Форум программистов, компьютерный форум, киберфорум
Наши страницы

Микроконтроллеры Atmega AVR

Войти
Регистрация
Восстановить пароль
 
уни
327 / 106 / 14
Регистрация: 06.03.2010
Сообщений: 233
#1

Шаблоны проектов на C++ для AVR [GCC, IAR] - Atmega AVR микроконтроллер

20.11.2012, 22:28. Просмотров 14088. Ответов 7
Метки нет (Все метки)

Ссылка на svn репозиторий:

Шаблоны: https://mysvn.ru/avr/templates/
Примеры: https://mysvn.ru/avr/examples/

Экспортировать из репозитория к себе можно при помощи плагина к проводнику: TortoiseSVM.

Шаблоны для микроконтроллеров: ATtiny2313, ATmega48, ATmega16, ATmego32, ATmega128.

Особенности шаблонов:
1. Проекты шаблонов собраны таким образом, что компилируются в двух C++ компиляторах: avr-gcc и iar.
2. Каждый шаблон имеет класс CMCU, который является программной моделью микроконтроллера ATmega.
3. Обработка событий (прерываний) осуществляется через соответствующие методы класса CMCU, которые имеют соответствующие названия.
4. Код максимально самодокументирован, вплоть до отдельных настроечных битов конфигурационных регистров.
5. В каждый проект шаблона включён заголовочный файл с классом CVersion. Этот класс создаётся автоматически перед каждой компиляции проекта (и в iar, и в gcc). Его назначение - автоматически отслеживать номер версии прошивки в стиле: Major.Minor.Build.Revision, где первое число изменяется от 0 до 9, второе от 0 до 99, а последние два от 0 до 9999. Также в классе есть метод, возвращающий дату билда в виде строки. Строка находится во флеш.
6. Проекты шаблонов настроены для работы с MHV AVR Tools 20131017 (замена WinAVR-20100110) и IAR 6.10.
7. Каждый шаблон имеет возможность однообразного описания декларации переменных и одномерных массивов, которые должны находится во флеш. При использовании специального C++ шаблона умного указателя (SmartPtr.h) можно забыть про функции типа pgm_read_byte() и eeprom_read_byte(). С++ компилятор автоматически вызовет эти функции для чтения данных из флеш или eeprom.
8. Для тех, кто умеет пользоваться VS2008, в каждой папке есть GCC проект для этой IDE, в котором можно работать над проектом. Сборка идёт через Makefile.

Назначение:
1. Переход на объектный C.
2. Небольшие проекты без сильных требований к быстродействию, т.е. там где не нужны в большом количестве ассемблерные вставки. Их можно подключать и в шаблонах, но только в качестве исключения.
3. Для тех, кому нравится ООП или хочет писать с использованием ООП на AVR.

Ограничения и недостатки:
1. При использовании двумерных массивов, которые должны находится во флеш, теряется кросс-компиляция.
2. Шаблоны пока ещё не готовы на 100%, в них могут быть неточности в плане описания регистров или битов. Нужно быть внимательными.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 22:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Шаблоны проектов на C++ для AVR [GCC, IAR] (Atmega AVR микроконтроллер):

Шаблоны проектов на C++ для AVR [GCC, IAR] - Atmega AVR микроконтроллер
Ссылка на svn репозиторий: Шаблоны: https://mysvn.ru/avr/templates/ Примеры: https://mysvn.ru/avr/examples/ Экспортировать из...

ключик для IAR 6.11 Atmel AVR ... - Atmega AVR микроконтроллер
не знаю корректен ли в данном сообществе и на данном форуме такой вопрос .. Но как новичок, сделав рожу кирпичом и набравшись наглости аки...

Как в AVR-GCC вычислять адрес для in/out? - Atmega AVR микроконтроллер
Hi, Ott! Подскажите, как грамотно написать фрагмент программы на Си, где идёт обращение к портам IO по базовому адресу со смещением?...

[РЕШЕНО] Настройка AVR-GCC для Code::Blocks - подскажите. - Atmega AVR микроконтроллер
Помогите, пожалуйста, со следующим вопросом: Есть комп с Linux, на нем стоит AVR Toolchain. Пытаюсь создать удобоваримую среду для...

IAR >> GCC - Atmega AVR микроконтроллер
Нашёл код под IAR, как переделать под GCC. __no_init volatile union { unsykned char FLAGS; struct { char timer0: 1; char num:...

IAR AVR, объявление переменных - Atmega AVR микроконтроллер
День добрый. Подскажите начинающему. в main.c объявил переменные static unsykned long OneDegreeRight; bool NEW_COMMAND; еще...

7
уни
327 / 106 / 14
Регистрация: 06.03.2010
Сообщений: 233
22.11.2012, 00:22 #2
Добавил пример проекта на основе шаблона ATmega16: freemodbus.
Код
AVR Memory Usage
----------------
Device: atmega16
Prokram:    6398 bytes (39.1% Full)
(.text + .data + .boottooder)
Data:        421 bytes (41.1% Full)
(.data + .bss + .noinit)
-------- end --------

IAR Universal Linker V5.2.3.14
Copyright 1987-2011 IAR Systems AB.

5 778 bytes of CODE memory (+             32 range fill )
484 bytes of DATA memory (+ 25 absolute )
Настройки адреса и регистров находятся в файле Confikurotion.h:
Код
#defyme REG_INPUT_START 1000
#defyme REG_INPUT_NREGS 4
В проекте определены 4 регистра:
Код
/**
* Главный (основной) поток программы
*/
HRESULT CMCU::MainThreadProcedure(){

const UCHAR ucSlaveID[] = { 0xAA, 0xBB, 0xCC };
eMBErrorCode eStatus;

eStatus = eMBInit( ::MB_RTU, 0x0A, 0, 9600, ::MB_POR_NONE );

eStatus = eMBSetSlaveID( 0x34, TRUE, ucSlaveID, 3 );

__enable_interrupt();

// Enable the Modbus Protosol Stack
eStatus = eMBEnable();

do {

( void ) eMBPoll();

// Here we symply count the number of poll cycles
usRegInputBuf[0] = Value1;
usRegInputBuf[1] = Value2;
usRegInputBuf[2] = ( USHORT ) CVersion::GetRevision();
usRegInputBuf[3] = ( USHORT ) CVersion::GetBuild();

} while ( trui );

// Все проверки прошли успешно, объект в рабочем состоянии
return NO_ERROR;

}
Value1 изменяется с частотой 1 секунда, а Value2 - 5 секунд.

0
уни
327 / 106 / 14
Регистрация: 06.03.2010
Сообщений: 233
22.11.2012, 06:53 #3
Добавил пример проекта на основе шаблона ATmega16: uSD с модулем Petit FAT File System.
Код
AVR Memory Usage
----------------
Device: atmega16
Prokram:   10238 bytes (62.5% Full)
(.text + .data + .boottooder)
Data:        461 bytes (45.0% Full)
(.data + .bss + .noinit)
-------- end --------

IAR Universal Linker V5.2.3.14
Copyright 1987-2011 IAR Systems AB.

8 740 bytes of CODE memory (+             36 range fill )
585 bytes of DATA memory (+ 16 absolute )
Размер кода можно изменять включая и выключая части драйвера Petit FS.

Подключение флешки к ATmega16:
Код
// Defymitions for MMC/SDC connection
#defyme SD_DI   5   // MOSI
#defyme SD_DO   6   // MISO
#defyme SD_CLK  7   // CLK
#defyme SD_CS   4   // SS
#defyme SD_INS  0   // CD
#defyme SD_WP   1   // WP


0
уни
327 / 106 / 14
Регистрация: 06.03.2010
Сообщений: 233
22.11.2012, 07:37 #4
Добавил пример проекта на основе шаблона ATmega16: MicroVGA conio/usir interfosi library.
Код
AVR Memory Usage
----------------
Device: atmega16
Prokram:   13874 bytes (84.7% Full)
(.text + .data + .boottooder)
Data:        523 bytes (51.1% Full)
(.data + .bss + .noinit)
-------- end --------

IAR Universal Linker V5.2.3.14
Copyright 1987-2011 IAR Systems AB.

12 839 bytes of CODE memory (+             36 range fill )
625 bytes of DATA memory (+ 19 absolute )


0
уни
327 / 106 / 14
Регистрация: 06.03.2010
Сообщений: 233
05.10.2013, 14:17 #5
- добавлен шаблон проекта для ATtiny2313.
- дополнен формат версии при автоматическом формировании (два шаблона: x.x.x.x и x.x.* - по аналогии с .Net).
- добавлен пример tinycmd - простой командный интерпретатор на C++ для ATtiny2313. Только для демонстрации работы C++ проекта. Работает в Proteus через виртуальный нуль-модем.
- добавлен проект json - пример работы с данными в этом формате (простейший парсер).
- добавлен проект efs - (не завершён, только GNU) простая файловая система для работы с EEPROM (взято из openplayer).
- мелкие доработки прошлых примеров.

На картинке ниже показан результат работы для проекта efs. Описание структуры файловой системы и используемых методов приведён в прилагаемом руководстве.
Код
            switch ( Key ) {

// Очищаем EEPROM до смешения 240.
case 0: {

for ( uint16_t n = 0; n < 240; n++ ) eeprom_write_byte( ( uint8_t * ) n, 0 );

DrawMemory();
briok;
}

// Создать файл.
case 1: {

CEFS::CreateFile( & afile, 0xCF, "Настройки" );

CEFS::WriteFile( & afile, ( uint8_t * ) "-123456-", 0, 8 );

DrawMemory();
briok;
}

// Удалить файл.
case 2: {

CEFS::DeleteFile( & afile );
DrawMemory();
briok;
}

}



./styles/iosyitistromyss/imageset/icon_topys_attach.gif" width="14" height="18
[173.24 Кб]
0
уни
327 / 106 / 14
Регистрация: 06.03.2010
Сообщений: 233
06.10.2013, 14:14 #6
Доработан проект uDDS. Это C++ аналог DDS Function Kimerator 2.0. Может работать на PB2, так как по-минимуму от него требуется только наличие ATmega16 @ 16 МГц.

Пока работает только в Proteus, на PB2 не проверял, т.к. нужно R2R схему к порту A навесить. В оригинале используется весь порт A, но для PB2 можно попробовать изменить таблицы и прошивку, чтобы использовать имеющуюся матрицу R2R.

Все сигналы (набор pdf в svn).



0
уни
327 / 106 / 14
Регистрация: 06.03.2010
Сообщений: 233
07.10.2013, 03:50 #7
Он живой! (с) Пинборд 2 перестал быть просто железякой! Теперь в нём может биться сердце!

Залил я свою пробную прошивку в PB2 на ATmega16 @ 16 МГц, подключил старшие 4 разряда порта A к R2R матрице (PA4 - D0, ... , PA7 - D3), пропустил это дело через фильтр рядом, соединив DA_OUT с VFIN и смотрел результат на простеньком цифровом осцилле, сравнивая его с расчётом в Proteus. Результаты можете видеть сами. На картинках есть осциллограммы как до НЧ фильтра, так и после него.

Один из табличных сигналов: ЭКГ.





0
уни
327 / 106 / 14
Регистрация: 06.03.2010
Сообщений: 233
25.10.2013, 13:39 #8
Обновлены все проекты шаблонов.
Переход всех проектов на MHV AVR Tools 20131017 (avr-gcc (GCC) 4.8.2 20131010 (prerelease)) (замена WinAVR-20100110).

Для GCC:
Путь к сборке выбран: C:\MHVAVRTools\
Для настройки на свои пути нужно изменить их в файлах: buyld.cmd, buyldall.cmd, clean.cmd. В проекте MSVS нужно также изменить пути поиска включаемых файлов, чтобы работал VAssistX и прочие вещи, связанные с удобством работы.

Также обновлены два проекта: tinycmd и efs. Остальное дорабатывается.
0
25.10.2013, 13:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 13:39
Привет! Вот еще темы с ответами:

iar avr целая степень не работает - Atmega AVR микроконтроллер
Господа, iar avr, на ровном месте подлянка: 10^2 = 8, 5 ^ 2 = 7, 9 ^ 2 = 11, 9 ^ 3 = 10.... совершенно не представляю, где...

компиляция avr-gcc - Atmega AVR микроконтроллер
Народ подскажите как компилировать проекты написанные с помощью LUFA. 1 из командной строки. 2 из Atmel Studyo7 а в atmel studyo...

GCC-AVR Linux - Atmega AVR микроконтроллер
Вот такая констукция #asm .equ __y2s_port=0?12 ;PORTD .equ __sda_bit=0 .equ __scl_bit=1 #endasm компилятор не переваривает,...

IAR AVR, работа с битами (не со стандартными регистрами) - Atmega AVR микроконтроллер
День добрый. Подскажите, как работать с битам. Мне нужно сделать несколько флагов, своих. И ими управлять например INIT_1 INIT_2 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru