AVR изход за отстраняване на грешки чрез UART (RS232 отстраняване на грешки), avr, програмиране

Статията описва как бързо да вградите изход за отстраняване на грешки в текстовата конзола на терминала във фърмуераAVR.

Малко програмисти (особено начинаещи) имат хардуерен дебъгер (катоJTAGICE mkII илиAVR Dragon ) на свое разположение. Следователно светодиодът, осцилоскопът и текстовият изход остават подходящи инструменти за отстраняване на грешки и откриване на грешки. Въпреки това, дори и с хардуерен дебъгер, често трябва да видите в реално време какво прави изпълняваният код. За да направите това, в конзолата на терминала се показва така наречената информация за отстраняване на грешки - данни, които програмистът трябва да види.

отстраняване

Най-лесният начин да реализирате този изход е да използвате хардуераUART, който се намира в почти всички AVR модели. Резултатът е бърз и не изисква много ресурси (т.е. не отнема много процесорно време на ядрото на AVR). Има готови подпрограми и макроси за AVR изход през UART, един от тях е модулътoddebug, който е включен в библиотекатаV-USB.

[Използване на модула oddebug.c за отстраняване на грешки ]

1. Изтеглете V-USB библиотеката [1].

2. В папката vusb-20120109\usbdrv вземете файловете usbportability.h, oddebug.c и oddebug.h и ги копирайте в папката на вашия проект.

3. Добавете компилация на модула oddebug.c към проекта.

Ако имате AVR GCC проект, добавете модула oddebug.c към компилацията на makefile и списъка с връзки:

SRC = $(TARGET).c \ Descriptors.c \ oddebug.c \ $(LUFA_SRC_USB) \ $(LUFA_SRC_USBCLASS)

Ако имате IAR проект, добавете модула oddebug.c към дървото на модулите на проекта.

4. В модули, където искате да използвате изход за отстраняване на грешки, включете заглавката oddebug.h (използвайки директивата за включване).

#include "GenericHID.h" #include #include "oddebug.h" /* Макроси за изход за отстраняване на грешки чрез UART */

5. Задайте глобалния макрос DEBUG_LEVEL на нещо различно от 0.

Ако имате AVR GCC проект, най-добре е да направите това в make-файла на проекта:

DEBUG_LEVEL = 1 .. CDEFS += -DDEBUG_LEVEL=$(DEBUG_LEVEL)

Ако имате IAR проект, добавете дефиниция DEBUG_LEVEL в свойствата на проекта (Опции -> Компилатор -> Препроцесор -> Дефинирани символи).

Модулът oddebug е написан по такъв начин, че стойността на макроса DEBUG_LEVEL може да бъде 0, 1 или 2:DEBUG_LEVEL=0 UART отстраняването на грешки не е активно, кодът на oddebug не е компилиран и макросите DBG1 и DBG2 не работят (въпреки че може да присъстват в потребителския код).DEBUG_LEVEL=1 само макросът DBG1 работи, DBG2 не работи (въпреки че DBG2 може да се появи в потребителския код).DEBUG_LEVEL=2 и DBG1, и DBG2 работят.

6. Преди основния основен цикъл извикайте odDebugInit().

LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); odDebugInit(); DBG1(0x00, 0, 0); /* изход за отстраняване на грешки: стартиране на главния цикъл */ sei();

Макросът odDebugInit настройва UART на 19200 bps, 8 бита данни, един стоп бит, без паритет (19200 бода скорост, 8 бита данни, 1 стоп бит, без паритет) – имайте това предвид, когато се свързвате към порта за отстраняване на грешки.

u16 var16; var16 = 0x1234; DBG1(0x01, &var16, 2); //ще покаже "01: 34 12" - HEX стойности на два байта от променлива var16

грешки

Както може би се досещате, използването на макросите DBG1 и DBG2 ви позволява да отстранявате грешки на 2 нива, в зависимост от стойността на DEBUG_LEVEL. Ако DEBUG_LEVEL = 2, изходът може да бъде възможно най-подробен, тъй като ще бъдат показани както DBG1, така и DBG2. Ако DEBUG_LEVEL = 1, тогава изходът за отстраняване на грешки можебъде по-малко (ще бъде изведен само DBG1 макрос).

[Отстраняване на неизправности ]

1. oddebug.h:39:5: предупреждение: #warning "Отстраняването на грешки е деактивирано, защото устройството няма UART"

Вероятно сте забравили да включите заглавка, която указва символните имена на вашия микроконтролер - oddebug.h не намери имената TXEN или TXEN0, включете правилната заглавка, преди да свържете oddebug.h. В проекта AVR GCC трябва да включите файлаio.h ​​​​:

2. Ако имате чип, който няма имената TXEN или TXEN0, но е посочено името TXEN1 или друго (например като чипа AT90USB162), тогава коригирайте файла oddebug.h така:

#if DEBUG_LEVEL > 0 && !(дефиниран TXEN дефиниран TXEN0) /* няма UART в устройството */

#if DEBUG_LEVEL > 0 && !(дефиниран TXEN дефиниран TXEN0 дефиниран TXEN1) /* няма UART в устройството */

#if дефиниран UCR # дефинира ODDBG_UCR UCR #elif дефиниран UCSRB # дефинира ODDBG_UCR UCSRB #elif дефинира UCSR0B # дефинира ODDBG_UCR UCSR0B #endif

#if дефиниран UCR # дефинира ODDBG_UCR UCR #elif дефиниран UCSRB # дефинира ODDBG_UCR UCSRB #elif дефинира UCSR0B # дефинира ODDBG_UCR UCSR0B #elif дефинира UCSR1B # дефинира ODDBG_UCR UCSR1B #endif

Коригирайте дефиниционните условия за ODDBG_TXEN, ODDBG_UBRR, ODDBG_USR USR, ODDBG_UDRE UDRE, ODDBG_UDR UDR по същия начин.

Готовият oddebug.h с направените корекции може да бъде изтеглен от връзката [2].

[Как да свържете AVR към компютър ]

За да съпоставите нивата на TTL RS232 (0..+5V) и стандартния RS232, който е бил използван на компютъра (+-12V), имате нужда от специален адаптер, като [3]. Като минимум трябва да се свържете с инверсиятаTTL TXD на микроконтролера, който се отстранява сRXD на компютъра. Трудността тук е необходимостта да се осигури инверсия, да се направи изолацияизолация от статично електричество и в същото време осигурява биполярен TXD сигнал. Фигурата показва вариант на такава връзка, която осигурява електрическа изолация на устройството, което се отстранява, и компютъра. Оптрон 6H2017C може да бъде заменен с всеки друг фототранзистор. Напреженията +12V и -12V могат да бъдат премахнати от ATX конектора на захранването на компютъра.

грешки

[USB към TTL RS232 адаптер ]

Ако вашият компютър няма RS232 порт, тогава ви е необходим адаптерUSB - TTL RS232 (нарича се ощеVCP адаптер, виртуален COM порт). Може да се сглоби наFTDI чип [7] или на AVR микроконтролер. Снимката показва пример за такъв адаптер, направен от макетната платкаAVR-USB162MU [6] и свързан към дебъгваната макетна платка AVR-USB-MEGA16 (която, между другото, може да направи точно същия USB към TTL RS232 адаптер). По-горе е платката AVR-USB-MEGA16, чиято програма се отстранява, а по-долу е адаптерът USB-TTL RS232, сглобен на платката AVR-USB162.

грешки

Самата платка AVR-USB162 е физически готов адаптер, който просто трябва да флашнете с програматаUSB CDC (вижте [2], папка bin) и да свържете с три проводника - GND, TXD, RXD (TXD кабелите са по избор, ако имате нужда само от отстраняване на грешки):

изход

Когато за първи път свържете USB - TTL RS232 адаптера към компютъра, операционната система Windows ще поиска драйвер, насочете съветника за инсталиране на хардуер към папката на драйвера от архива [2].

изход

Свързване на адаптера USB към TTL RS232 към развойната платка AVR-USB-MEGA16 (микроконтролер ATmega32A).

отстраняване

Свързване на адаптера USB към TTL RS232 към развойната платка AVR-USB162 (микроконтролер AT90USB162).

грешки

Свързване на адаптера USB към TTL RS232 към развойната платка AVR-USB162MU (микроконтролерAT90USB162MU).

[USB към TTL RS232 адаптери на хардуерни чипове ]

USB TTL COM-порт адаптер (свързва се от едната страна към 6-пинов FTDI конектор, а от другата към компютър през USB) може да се купи готов. Обикновено такъв адаптер се прави по най-простата схема, базирана на чипа FT232 (компания FTDI) или CP210x (компания Silicon Labs). Драйверът за адаптера може да бъде изтеглен от сайта на съответната фирма. Добрите USB към TTL сериен кабел FTDI (или CP210x чип) адаптери могат да бъдат закупени от eBay, dealextreme или aliexpress, дори има оферти с безплатна доставка. Когато купувате, изберете версията 5V (понякога има версии за 3.3V). Най-добрият вариант е, когато можете да изберете работните нива на TTL RS-232 порта (3.3V или 5V) с джъмпер. Ако нивата на сигнала на USB към TTL адаптера и устройството, което се отстранява, не съвпадат, тогава ще са необходими последователно свързани резистори с номинална стойност от около 1 ... 2 kOhm.

[Използване на USB CDC клас за отстраняване на грешки ]

Ако вашето устройство на AVR има USB интерфейс (като AVR-USB-MEGA16 или AVR-USB162 платки за разработка), тогава можете да стартирате USB CDC клас софтуер върху тях, което позволява на USB устройството да работи като виртуален COM порт. В този случай адаптерът USB - TTL RS232 изобщо не е необходим. За пример за използване на виртуален COM порт за AVR-USB-MEGA16 вижте [4] и за AVR-USB162 в библиотеката LUFA [5].

[Код за отстраняване на грешки в Arduino IDE ]

VCP адаптерът може също да се използва за отстраняване на грешки в изхода и изтегляне на скеч код (на Arduino платки, които нямат собствен VCP порт), което може да помогне за отстраняване на грешки в програмен код [2]. Arduino IDE използва изразаprintln за тази цел.

[Присвояване на файлове и папкиархив по препратка [2] ]

bin Готов фърмуер за USB - TTL RS232 адаптер (проект LUFA-110528\Projects\USBtoSerial), компилиран за AVR-USB162, AVR-USB162MU платки (AT90USB162 чип) за 8 и 16 MHz кварцови честоти.doc листове с данни за AT90USB1 62 микроконтролера (AVR-USB162, AVR-USB162MU) и ATmega32A (платка за разработка AVR-USB-MEGA16).изтеглете изтеглени LUFA, V-USB, WinAVR помощни пакети за разработка.драйвер inf файл за USB към TTL RS232 адаптер за предоставяне на Windows Hardware Found Wizard.LUFA-1 10528 LU библиотека FALUFA-110528\Projects\USBtoSerial е проект USBtoSerial, от който е компилиран фърмуерът на адаптера USB към TTL RS232.LUFA-110528\Demos\Device\ClassDriver\GenericHID е проект, който използва изход за отстраняване на грешки чрез USART като пример (използвайки oddebug модул). Вижте също пример LUFA-110528\Demos\Device\LowLevel\GenericHID.LUFA-110528\Demos\Device\ClassDriver\GenericHID\oddebug.h ​​коригиран файл oddebug.h, който добавя поддръжка за микроконтролер AT90USB162.

Как да компилирате фърмуера на USB към TTL RS232 адаптер (трябва да имате инсталиран комплект за разработка на WinAVR):

1. Отидете до директорията LUFA-110528\Projects\USBtoSerial\.2. Проверете опциите на makefile MCU, BOARD, F_CPU - те трябва да съответстват на използвания микроконтролер, breadboard, кристална честота.3. Изпълнете командата make clean.4. Изпълнете командата make, вземете файла USBtoSerial.hex - това ще бъде компилираният файл на фърмуера за USB към TTL RS232 адаптера.

Проектът USBtoSerial може да бъде компилиран за всички 8-битови USB микроконтролери Atmel AVR (микроконтролери Atmel, които имат хардуерподдръжка на USB интерфейс).

[Често задавани въпроси, ЧЗВ ]

120428. Направих извеждане на информация за отстраняване на грешки чрез конвертора на нива, работи. PuTTY обаче показва йероглифи (krakozyabry и псевдографика). Прилагам скрийншот.

изход

Вероятно кодирането не съвпада някъде, можете ли да ми кажете какво трябва да се коригира?

Отговор : може да има две причини. Първият е несъответствие на кодиране на текст, кодиране на изход за отстраняване на грешки и кодиране на дисплея в puTTY. Лесна корекция - свойства на сесията puTTY -> Прозорец ->Превод. Опитайте да кодиратеWin1251 (Cyrillic) или друго кодиране на български език. Втората възможна причина (в случай, че се използва физически UART AVR, какъвто вероятно е случаят с вас) е несъответствие в параметрите за получаване / предаване (скорост, брой битове, брой стоп битове, наличие на паритетен бит). Конфигурирано чрез свойствата на сесията puTTY -> Връзка -> Сериен. Параметрите трябва да съответстват на настройките на UART AVR.