Программирование микроконтроллеров AVR в IDE Lazarus

в 12:12, , рубрики: avr, Delphi, lazarus, микроконтроллеры, микроконтроллеры avr, программирование микроконтроллеров

Вот появилось желание написать небольшой проектик для себя с применением микроконтроллера. В CodeVisionAVR команды не подсвечиваются по Ctrl+Пробел, да и Си что-то начал забывать, вспоминать - лень... Конечно, вспомнить Си - это 10-30 минут, но лень... Поэтому, было решено начать проект в родной IDE Lazarus, она же кросс-компилируемая! Правда, понять, как включить avr в Lazarus, чтоб компилировался hex-файл ушло 3 дня :), поэтому пишу здесь, чтоб другие не мучались, а сразу пользовались.


Использование кросс-компиляции было основано на этой статье, в дальнейшем выкинуто всё лишнее (с моей точки зрения). Показываю как это заработало у меня.

  1. Итак, скачиваем отсюда и запускаем последний релиз замечательной программки fpcupdeluxe нужной разрядности и соответствующей ОСи;

  2. Определяем директорию, куда будут скачаны исходники и собраны бинарные файлы (напр., c:fpcupdeluxe);

  3. На вкладке "cross" и дополнительно по кнопке "Setup+" устанавливаем CPU - "AVR" и OS - "embedded". Устанавливаем - "Install compiler" (в каталоге появится папка "cross" с подпапками "bin" и "lib").

Программирование микроконтроллеров AVR в IDE Lazarus - 1

4. В процессе закачки и последующей сборки fpcupdeluxe ругнется на отсутствие утилит для сборки кросс-компилятора и предложит их скачать ("The building of a crosscompiler failed due to missing cross-tools. Fpcupdeluxe can try to download them if available! Do you want to continue?")

Программирование микроконтроллеров AVR в IDE Lazarus - 2

Соглашаемся и повторяем процесс сборки.

5. Для возможности компиляции hex-файлов скачиваем ppu микроконтроллеров, на вкладке "subarch" для каждого целевого процессора (в каталоге "fpc" появится папка "units"). Микроконтроллеры разделены на целевые процессоры, например ATmega8 находится в папке avr4, а ATmega328p находится в папке avr5.

Программирование микроконтроллеров AVR в IDE Lazarus - 3

6. Настраиваем IDE Lazarus. Для указания путей к бинарникам открываем настройки Tools --> Options --> Environment --> Files: для Compiler executable выбрать C:fpcupdeluxefpcbinx86_64-win64ppcross386.exe (предупреждение игнорировать):

Программирование микроконтроллеров AVR в IDE Lazarus - 4

Настройка целевой платформы в IDE Lazarus

  1. Для настройки целевой платформы, для которого будет генериться hex-файл, необходимо указать ОС на которой будет выполняться код - embedded; семейство процессоров - avr и целевой процессор можно определить по папке (в общей папке "units") в которой находится требуемый микроконтроллер, например, ATmega328p находится в папке avr5, значит, целевой процессор выбираем avr5:

Программирование микроконтроллеров AVR в IDE Lazarus - 5
  1. А так же выбрать конкретный процессор для программирования в "Параметры пользователя":

Программирование микроконтроллеров AVR в IDE Lazarus - 6

Упрощение установки компилятора

Как то 830 Мб в папке fpcupdeluxe меня напрягло и я решил сделать отдельную установочную папку размером в 50 Мб (3 Мб в архиве). В параметрах IDE нужно указать распакованную папку:

Программирование микроконтроллеров AVR в IDE Lazarus - 7

Если Вы распаковали в другую папку, то нужно поправить в блокноте файл "fpc.cfg", который лежит в корне AVR:

Программирование микроконтроллеров AVR в IDE Lazarus - 8

Тестирование

program Timers;
{$mode objfpc}{$H-}
{$goto on}

uses
  uInterrupts, me_avr;

//=== Entry point =============================================================  

begin
 DDRC := $FF; 		// настраиваем все линии порта C на вывод
 //PORTC := $00;		// выводим лог. 0 на все линии порта C

  //=== Main loop =========================================
  while True do
  begin
        PORTC := $FF;		// выводим лог. 1 на все линии порта C
        Delay(255);	  // задержка 1000 мс = 1 с
        delay(255);
        PORTC := $00;		// выводим лог. 0 на все линии порта C
        delay(255);	  // задержка 1000 мс = 1 с
  end;//Main loop
end. 

Процедура задержки "me_avr" (надо нормально написать):

unit me_avr;

{$mode objfpc}{$H-}
{$goto on}

interface

procedure Delay(MS: Byte); assembler;

implementation

procedure Delay(MS: Byte); assembler;
label __delay0;
asm
         PUSH    r31
         mov     r31, MS
__delay0:
         DEC     r31
         BRNE    __delay0
         pop     r31
end;
end.

Компиляция Ctrl+F9 (F9 не работает) заняла 0,1 сек в результате чего появились 3 файла: hex, bin и elf. Загружаем hex-файл в модель и видим, что прошивка работает:

Программирование микроконтроллеров AVR в IDE Lazarus - 9
(не равномерность мигания из-за подтормаживания компа)
(не равномерность мигания из-за подтормаживания компа)

Спасибо за внимание.

Автор: dalfy

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js