Теория и практика AVR ассемблера.

Обсуждаем контроллеры компании Atmel.
Ответить
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

Всем доброго времени суток.
Что значит Sink Current (Слив потока) в даташите на тини13а?
Дальше, расчет резистора для светодиода.
Допустим, к PB0 прикошачен светодиод анодом к порту, катодом в землю. Известно, что падение напряжения на светодиоде равно 1.5 вольта.
Далее по графику с названием Figure 19-28.VOH: I/O Pin Output Voltage vs. Source Current (Low Power Pins, VCC= 3V) определяем, что при токе 10 мА напряжение на PB0 равно 2.5 вольта.
Находим падение напряжения на резисторе 2,5-1,5=1,0 вольт
ток 10 мА, резистор равен 1/0,01=100 Ом
Ответ: резистор равен 100 Ом

Так?

Дальше, начал изучать прерывания.
Но в тини13а нет USART. Сколько я ни копался ничего про это не нашел, а автор показывает пример именно на USART. Я думаю чем можно заменить USART при изучении. Хотел заменить RESET'ом, там RESET уже используется для перехода на основную программу.
С другой переферией практически не знаком.
Вот программа у автора
Reset: LDI R16,Low(RAMEND) ; Инициализация стека
OUT SPL,R16 ; Обязательно!!!

LDI R16,High(RAMEND)
OUT SPH,R16

SEI ; Разрешаем прерывания глобально
LDI R17,(1<<RXCIE) ; Разрешаем прерывания по приему байта
OUT UCSRB,R17

M1: NOP
NOP
NOP
NOP
RJMP M1

Что в ней значит строчка LDI R17,(1<<RXCIE)? Можно ли применить эту же строчку для прерывания по переполнению таймера/каунтера 0?
Если нет, то какую строчку надо применить?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

АндрейАвербах писал(а):Что значит Sink Current (Слив потока)
Жесть))) Current, применительно к электротехнике - это ток. Sink (source) current - это ток, который втекает (вытекает) в (из) вывод(а), т.е. это нагрузочная способность.
АндрейАвербах писал(а): Ответ: резистор равен 100 Ом
Так?
Вроде расчет верный.
АндрейАвербах писал(а): Но в тини13а нет USART. Сколько я ни копался ничего про это не нашел, а автор показывает пример именно на USART. Я думаю чем можно заменить USART при изучении.
Изучении чего? Работы прерываний? Тогда есть масса других источников, например внешние прерывания INT0, INT1 или PCINT. Вообще можно изучать прерывания на симуляторе, встроенном в студию или использовать proteus, тогда можно взять любой контроллер, хоть с USART.
АндрейАвербах писал(а): Что в ней значит строчка LDI R17,(1<<RXCIE)?
1) RXCIE - специфический номер бита в регистре UCSRB. выражение 1<<n означает взять число "1" и передвинуть его влево на n бит.
2) сама по себе строка LDI R17,(1<<RXCIE) ничего не конфигурирует, она просто загружает в регистр R17 число
3) а вот команда OUT как раз копирует это число в регистр ввода-вывода. И если в контроллере нет регистра UCSRB, то число скопируется куда-то в другой регистр (UCSRB - это просто число (адрес), как и RXCIE)
АндрейАвербах писал(а): Можно ли применить эту же строчку для прерывания по переполнению таймера/каунтера 0?
Если нет, то какую строчку надо применить?
По этой фразе видно, что принцип работы контроллера до вас дошел еще не полностью. Строчку можно применить для конфигурирования работы таймера по прерыванию, но с другим параметром вместо RXCIE и другим адресом вместо UCSRB. С каким - читать даташит.
Как пример для тини13:

Код: Выделить всё

LDI R17,(1<<TOIE0) ;включение прерывания по переполнению таймера0
OUT TIMSK0,R17
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

АндрейАвербах, не используйте ATtiny для изучения AVR. Возьмите, например, мегу 88/168, или 8535.
Изображение only pure true norwegian blackx Изображение
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

Current, применительно к электротехнике - это ток. Sink (source) current - это ток, который втекает (вытекает) в (из) вывод(а), т.е. это нагрузочная способность.
То есть график с таким названием определяет сколько может втекать тока при заданном напряжении? Сам график уже не сильно помню.
Изучении чего? Работы прерываний? Тогда есть масса других источников, например внешние прерывания INT0, INT1 или PCINT. Вообще можно изучать прерывания на симуляторе, встроенном в студию или использовать proteus, тогда можно взять любой контроллер, хоть с USART.
Да, работы прерываний. Изучаю я ВСЕ на симуляторе встроенном в студию, сегодня программатор купить обещали. А вот внешние прерывания
INT0, INT1, PCINT. Вот код:
.include <tn13Adef.inc>
.dseg
.cseg
rjmp RESET
.org 0x0002
rjmp EXT_INT0
.org 0x0004
rjmp PCI0
.org 0x0008
rjmp TIM0_OVF
.org 0x000A
rjmp EE_RDY
.org 0x000C
rjmp ANA_COMP
.org 0x000E
rjmp TIM0_COMPA
.org 0x0010
rjmp TIM0_COMPB
.org 0x0012
rjmp WDT

;RESET:
;EXT_INT0:
PCI0:
TIM0_OVF:
EE_RDY:
ANA_COMP:
TIM0_COMPA:
TIM0_COMPB:
WDT:
RETI

EXT_INT0: ldi R20, 0b011110
out PORTB, R20
RETI

RESET: LDI R17, low (RAMEND)
out SPL, R17
ldi R22, 0

ldi R18, 0b111110
out DDRB, R18

sei

M1:
ldi R20, 0b000000
out PORTB, R20
rjmp M1

Не удивляйтесь PCIO, EXT_INT0, просто студия отказывалась работать с PCINT0, INT0, а потом где-то вычитал, что надо как в первом варианте. А ADC он вообще за команду держит. Ну, этот код работает молодцом, нареканий нет, НО только когда выставляешь бит вот здесь
Изображение
ВРУЧНУЮ
А как сделать так, чтоб не выставлять его вручную, а с помощью порта входа-выхода PB0(по совместительству он PCINT0)?
Или не с помощью PB0, а с помощью PB1(по совместительству он INT0 и PCINT1)?

blackx, денег сейчас не так много, да и в магазине мег пока нет.

Программатор не купили, т.к. последнего не было в магазине зато купили arduino nano v3.0. Я сначала так обрадовался, а когда понял, что на асме для него нифига не напишешь... Я его тогда уже было выкинуть захотел, но рука не поднялась.
Пишется программа для него на хз каком языке. Какой это язык?

int ledPin = 13; // Светодиод, подключенный к вход/выходу 13
void setup()
{
pinMode(ledPin, OUTPUT); // устанавливает режим работы - выход
}

void loop()
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}

Далее у него на борту имеется ICSP. Эт вообще что такое? Программатор? Если да, то можно ли им запрограммировать тини13а, к примеру?
Реклама
Эиком - электронные компоненты и радиодетали
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Программатор не купили, т.к. последнего не было в магазине зато купили arduino nano v3.0. Я сначала так обрадовался, а когда понял, что на асме для него нифига не напишешь... Я его тогда уже было выкинуть захотел, но рука не поднялась.
Пишется программа для него на хз каком языке. Какой это язык?
1. Arduino - платформа, основанная на тех же AVR, просто средства разработки для нее ориентированы на гуманитариев и убогих. Но никто не заставляет использовать то, что впихивается в рамках их идеологии. Так что на асме писать там вполне можно, в той же AVR Studio.

2. Обычно программирование Arduino осуществляется через их специфичный загрузчик. Но если на плате есть микросхема FT232 (мост USB - UART), то можно использовать ее как программатор под управлением AVRdude.

Мораль: Arduino волне пойдет для Ваших целей. Надо просто забыть, что это Arduino и работать как с обычной отладочной платой. Выкидывать ее не надо, это экстримизм. :) Просто используйте "взрослые" средства (AVR Studio, AVRdude) и программируйте плату по-человечески, вот и все. :)

Да, следствие из п. 2 - чтобы использовать Ардуино по-человечески, надо бы потереть загрузчик, отжирающий память программы и поправить фьюзы. Про фьюзы я писал тут.
Пишется программа для него на хз каком языке. Какой это язык?
Это Wiring, диалект Си, ориентированный на девушек, гуманитариев и дилетантов.

***

UPD:

Я посмотрел доки. Да, там есть FT232, Вам повезло!

Делайте так.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Реклама
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

Так что на асме писать там вполне можно, в той же AVR Studio.
А как связать AVR Studio и Arduino 1.5.2?
Обычно программирование Arduino осуществляется через их специфичный загрузчик. Но если на плате есть микросхема FT232 (мост USB - UART), то можно использовать ее как программатор под управлением AVRdude.
Да, такая микра есть :) А еще на плате есть шесть штырьков в отдельной кучке. Я вычитал в бумажке, которая прилагалась к плате, что эти штырьки - MISO, MOSI, SCK, +5V, GND. Можно ли использовать эту плату как программатор для тини13а? В самой ардуино есть подпункт: программатор USBtinyISP.

Ну, я на этом "языке" уже немного освоился, написал прогу для бегущего огонька, работает.
Реклама
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

А как связать AVR Studio и Arduino 1.5.2?
Никак их связывать не надо. Просто выкиньте ардуиновый софт, вот и все. А плату используйте по-человечески.

Пишете программу в AVR Studio, заливаете в контроллер полученный HEX с помощью AVRdude / ftbb.
Можно ли использовать эту плату как программатор для тини13а?
Да, ссылка выше.
Ну, я на этом "языке" уже немного освоился, написал прогу для бегущего огонька, работает.
Это неплохо. :) Но не калечьте себе мозг идеологией Ардуино. Лучше поставьте WinAVR и поизучайте нормальный Си. AVR Studio автоматом подхватывает плагин AVR GCC от WinAVR. Но это все потом, сейчас делайте то, что делаете.

Кстати, даже в этом детском примере есть грамм идиотизма:

Код: Выделить всё

int ledPin = 13; // Светодиод, подключенный к вход/выходу 13
void setup()
{
 pinMode(ledPin, OUTPUT); // устанавливает режим работы - выход
}

void loop()
{
 digitalWrite(ledPin, HIGH); 
 delay(100); 
 digitalWrite(ledPin, LOW); 
 delay(100); 
}
По-человечески будет

Код: Выделить всё

#define LED_PIN        13
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

Пишете программу в AVR Studio, заливаете в контроллер полученный HEX с помощью AVRdude / ftbb.
Т.е. все файлы уже есть, мне нужно написать только батник?
Кстати, даже в этом детском примере есть грамм идиотизма:
Я это понял :)
Ладно, сейчас попробую тини13а запрограммировать.
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

все файлы уже есть, мне нужно написать только батник?
Э-э-э, не совсем понял.

Да, инструменты уже все готовы, велоcипедов изобретать не надо, если Вы в этом смысле. Есть среда разработки - AVR Studio, есть ассемблер, с которым она работает, есть компилятор Си, который к ней можно подключить. Все это на выходе дает файл прошивки в формате Intel HEX.

Отдельно есть целый набор программаторов. Один из них - AVRdude. Он поддерживает множество адаптеров программирования, один из которых - ftbb на базе FT232. С помощью этих средств прошивка переносится в память МК.

Все модульно. Любой инструмент можно заменить - вместо AVRdude можно использовать, например, avreal, вместо AVR Studio - IAR, и так далее. И та ардуиновская среда - всего лишь одна из возможностей. Не лучшая.

И когда Вы жмете кнопочку "загрузить" в любом IDE, на самом деле отрабатывают несколько программ - препроцессор, ассемблер, линкер, программатор (а по правде еще больше). Тот же эффект будет, если все их запускать вручную из командной строки.

Главное - сама плата ардуины никак не привязана к IDE, поймите это. С ней можно использовать и AVR Studio, и IAR, и WinAVR. В отношении программатора тоже есть много опций. :)
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

Про батник - вероятно, имелось ввиду записать команды в bat-файл для вызова avrdude. Вполне можно использовать вместо этого какую-нибудь удобную оболочку с графическим интерфейсом :)

Кстати, подходит ли конфиг "ftbb" для ардуины? Возможно придется подправить номера выводов битбанга.
Изображение only pure true norwegian blackx Изображение
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Вполне можно использовать вместо этого какую-нибудь удобную оболочку с графическим интерфейсом
Вот внезапно, тут батник удобнее. Я когда пишу что-то, сразу создаю батник с отдельными прописанными путями для проекта. Потом один раз ткнул - и все. :)

В принципе, у меня батников целая коллекция на все случаи жизни. :) Ориентация, в основном, на ATmega48, ибо это мой основной МК серии AVR для проектов.

Например, есть отдельный батник для переключения на 8 МГц (если ставлю новый МК, с завода идут с частотой 1 МГц):

Код: Выделить всё

avrdude.exe -p m48 -c ftbb -P ft0 -B 4800 -u -e -U lfuse:w:0xE2:m

pause > null
Для чтения чипа:

Код: Выделить всё

avrdude.exe -p m48 -c ftbb -P ft0 -e -F -U flash:r:ch_flash.hex:i -U eeprom:r:ch_eep.hex:i -U hfuse:r:ch_hf.hex:i -U lfuse:r:ch_lf.hex:i

pause > null
И для программирования:

Код: Выделить всё

avrdude.exe -p m48 -c ftbb -P ft0 -e -U flash:w:%1:i

pause > null
Причем этот батник (называется у меня progm48) принимает как аргумент путь к файлу прошивки. И батники, специфичные для проектов, имеют примерно такой вид:

Код: Выделить всё

progm48 <Путь_до_прошивки>\<файл_прошивки>.hex
В результате все делается в один тычок мышкой. :)
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

Скачал я вчера AVRdude 5.8. Подключил к ардуиновской плате через шесть штырьков тини13А вот таким образом
Изображение
Изображение
Изображение
И вот по такой схеме
Изображение
Дальше пишу вот такой батник
avrdude.exe -p tn13A -c ftbb -P ft0 -e -U flash:w:"C:/AssemblerApplication5.hex":i

pause = null
Сохраняю, запускаю и вот что пишет

Изображение
И все :cry: ...
Последний раз редактировалось АндрейАвербах Вс май 26, 2013 06:02:33, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 37346
Зарегистрирован: Чт авг 30, 2012 20:24:40
Откуда: Нижний Новгород

Сообщение Андрей Бедов »

Печялька.. :cry: Разбирайтесь с фьюзами...
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

А при чем тут фьюзы? :dont_know:
Друг Кота
Аватара пользователя
Сообщения: 37346
Зарегистрирован: Чт авг 30, 2012 20:24:40
Откуда: Нижний Новгород

Сообщение Андрей Бедов »

А при том, что изначально у ATTiny13 выставлены они так, что получаются защёлки. И не видит поэтому.
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

А при том, что изначально у ATTiny13 выставлены они так, что получаются защёлки. И не видит поэтому.
Про защелки второй раз слышу, это вообще как или что?
Вы выше читали через какое ур-во я программирую?
Я думаю еще проблема в том, что туда подключено два контроллера один встроенный(мега328п), а другой тини13а.
И пишет же, что проблема дудке...
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Разбирайтесь с фьюзами...
Бред. AVRdude еще даже не запустился - система не может найти его.
Сохраняю, запускаю и вот что пишет
Видимо, запускаете не из той директории. AVRdude должен лежать по тому же пути, откуда происходит вызов. Т.е., либо перейти в ту папку, либо указать путь.

Пример.

Пусть прошивка лежит в C:\firmware\firmware.hex, AVRdude расположен в D:\AVRdude\AVRdude.exe. Тогда можно сделать так:

Код: Выделить всё

>D:

>cd "AVRdude"

>avrdude.exe -p m48 -c ftbb -P ft0 -e -U flash:w:"C:\firmware\firmware.hex":i 
Или Вы его на рабочий стол прям сохранили? :shock:
Я думаю еще проблема в том, что туда подключено два контроллера один встроенный
На этом этапе - не в этом. AVRdude еще даже не запустился. :)

И проверьте, как советовал blackx, соответствуют ли надписи на плате конфигу AVRdude.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

Или Вы его на рабочий стол прям сохранили?
Да вроде на диске C...
И проверьте, как советовал blackx, соответствуют ли надписи на плате конфигу AVRdude.
А вот тут пожалуйста поподробней, про конфиг, это что вообще? Тот, который avrdude файл "CONF"?
На плате из серии загадочных надписей только эта:
nano v3.0
И усё.
По вашей версии счас попробую.

Еще хуже стало, забил в блокнот такой код
>C:

>cd "avrdude"

>avrdude.exe -p tn13A -c ftbb -P ft1 -e -U flash:w:"C:\AssemblerApplication5.hex":i
pause=null
ft1 потому, что я ету плату настроил как COM1.
Сохраняю, запускаю. На долю секунды выскакивает черное окошко и пропадает, пока оно выскакивает и пропадает успеваю заметить, что там две строчки.
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Да вроде на диске C...
Ну так а вызываете с рабочего стола. Вот система и удивляется. :)

По умолчанию файл без пути ищется в текущей директории.
А вот тут пожалуйста поподробней, про конфиг, это что вообще?
Это, в частности, соответствие ножек FT232 сигналам программирования. Как они распределены в той сборке AVRdude - показано в статье, ссылку на которую я давал.

Вот и проверьте, надписи на плате соответствуют истине в Вашем случае, или нет. Если нет - я бы не стал править конфиг, а просто соединял в соответствии с картинкой в статье, забив на надписи.
На плате из серии загадочных надписей только эта:
nano v3.0
Ничего загадочного. :) Arduino nano, версия платы 3.0.
ft1 потому, что я ету плату настроил как COM1.
Первое устройство всегда будет ft0. У меня это, например, COM11. Но ft0.
Еще хуже стало, забил в блокнот такой код
>C:

>cd "avrdude"

>avrdude.exe -p tn13A -c ftbb -P ft1 -e -U flash:w:"C:\AssemblerApplication5.hex":i
pause=null
Прямо с галочками (>) в начале? :facepalm: Пойдите почитайте про то, как работать в MS-DOS. :) Что такое консоль, какие в ней есть команды. Тогда станет понятнее.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

АндрейАвербах, вам нужно добавить путь к AVRDude в переменную окружения PATH (лучший вариант), либо поместить avrdude.exe и avrdude.conf в папку, которая уже есть в PATH (например, C:/Windows/system32).

В ОС Windows добавить директорию в PATH можно через диалоговое окно "Система" или "Свойства системы" в панели управления. На вкладке "Дополнительно" внизу есть кнопка, "Переменные окружения". Жмете на нее, далее в нижнем списке ищете Path, жмете "Редактировать":

Изображение

Теперь нужно аккуратно вписать в конец списка путь до директории, в которой лежит avrdude, как у меня. Путь нужно отделить от других точкой с запятой (";").

Сохраняем, далее вызываем терминал (Win+R, "cmd", Enter), и пишем в нем "avrdude -v", Enter. Вот что должно получиться:

Изображение

Все, теперь переходим в папку с нужным hex-ом (команда cd <путь>, для перехода на другой раздел пишем сначала букву раздела и двоеточие, вот так: "D:", enter), и вводим команды для прошивки. Avrdude должен быть теперь доступен отовсюду.


Про конфиг avrdude. Это файл avrdude.conf, в нем хранятся определения программаторов. Там нужно найти ftbb (вы его, к слову, не найдете на "чистом" avrdude - нужен патченный, как из статьи). Вот, например, как оно у меня выглядит:

Код: Выделить всё

#FTDI_Bitbang
programmer
  id    = "ftbb";
  desc  = "FT232R Synchronous BitBang";
  type  = ft245r;

  miso  = 7; # RI (6 PIN FT232R)
  sck   = 6; # DCD (10 PIN FT232R)
  mosi  = 2; # RTS (3 PIN FT232R)
  reset = 5; # DSR(9 PIN FT232R)
  gates = 4; # DTR (2 PIN FT232R)

  baudrate = 9600;
;
Поля miso, sck, mosi, reset (gates вам не нужен) определяют номер пина ft232rl, который используется для соответствующей цели. Вам нужно убедиться, что номера ног тут соответствуют тому, как разведена ваша плата. Например, у меня нога 6 ft232rl подключена к выводу MISO микроконтроллера. Нога 6 соответствует биту 7 порта битбанга ft232rl:

Изображение

Тут легко запутаться, проверяйте дважды все :)
Вложения
ft232-bitbang.png
(39.02 КБ) 1218 скачиваний
scr002.png
(55.06 КБ) 1244 скачивания
scr001.png
(110.92 КБ) 1229 скачиваний
Изображение only pure true norwegian blackx Изображение
Ответить

Вернуться в «AVR»