ATmega8 . Разработка программы .
-
RossiaForever
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вс июл 29, 2012 19:09:48
ATmega8 . Разработка программы .
Доброго времени суток .
Помогите пожалуйста разработать и написать программу ( желательно на Assembler ) для микроконтроллера ATmega8 . Работа программы примитивна : включать светодиод по нажатию кнопки .
Имеются программы AVR Studio и Proteus ( по сути эмулятор ) .
Хочется понять сам принцип разработки программы , алгоритм ее составления , с чего начинать .
Всем заранее спасибо !
Помогите пожалуйста разработать и написать программу ( желательно на Assembler ) для микроконтроллера ATmega8 . Работа программы примитивна : включать светодиод по нажатию кнопки .
Имеются программы AVR Studio и Proteus ( по сути эмулятор ) .
Хочется понять сам принцип разработки программы , алгоритм ее составления , с чего начинать .
Всем заранее спасибо !
- Реклама
Re: ATmega8 . Разработка программы .
Ну принцип такой -
1.Читаются книги и даташиты.
2.Пишется несколько строчек программы, в любом тектсовом редакторе или в АВРСтудио сразу.
3.Программа компилируется в АВРСтудио, если нужно.
4.Прошивка прошивается в МК программатором, если нужно.
1.Читаются книги и даташиты.
2.Пишется несколько строчек программы, в любом тектсовом редакторе или в АВРСтудио сразу.
3.Программа компилируется в АВРСтудио, если нужно.
4.Прошивка прошивается в МК программатором, если нужно.
- blackx
- Говорящий с текстолитом
- Сообщения: 1518
- Зарегистрирован: Пт дек 28, 2012 21:56:46
- Откуда: St. Petersburg
Re: ATmega8 . Разработка программы .
Вы хотели сказать, "помогите мне найти в гугле пример такой программы для новичка"?
Лучшее обучение - самостоятельное, а материалов про AVR в сети много.
PS. Да, и кстати, к ветке "Аналоговая техника" это не очень относится
Лучшее обучение - самостоятельное, а материалов про AVR в сети много.
PS. Да, и кстати, к ветке "Аналоговая техника" это не очень относится
only pure true norwegian blackx 
-
RossiaForever
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вс июл 29, 2012 19:09:48
Re: ATmega8 . Разработка программы .
SmarTrunk писал(а):Ну принцип такой -
1.Читаются книги и даташиты.
2.Пишется несколько строчек программы, в любом тектсовом редакторе или в АВРСтудио сразу.
3.Программа компилируется в АВРСтудио, если нужно.
4.Прошивка прошивается в МК программатором, если нужно.
Компилировать и прошивать МК собираюсь после проверки на эмуляторе . Хочется понять больше по программной части . Изучал Assembler на KP580 , поэтому на Atmel мне не так-то легко сейчас . Очень понравилась книга Ю.Ревич , "Практическое программирование Микроконтроллеров AVR на языке ассемблера" читал , старался понять .
- Реклама
Re: ATmega8 . Разработка программы .
Да, Ревича я тоже читал. По-моему, после Ревича уже можно смело ставить Студио 4-й версии, писать программу и отлаживать
-
RossiaForever
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вс июл 29, 2012 19:09:48
Re: ATmega8 . Разработка программы .
minakan писал(а):Вам сюда.
http://radiokot.ru/start/mcu_fpga/avr/
Огромное спасибо ! пока то что нужно , позже в любом случае отпишусь )))
-
RossiaForever
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вс июл 29, 2012 19:09:48
Re: ATmega8 . Разработка программы .
Если я не прав , и где-то ошибка , если можно конечно , подскажите над чем мне подумать , поработать .
Подключил кнопку к порту C , светодиод к порту D .
По схеме у меня порт C - ввода , порт D - вывода .
Кнопка у нас ввод , светодиод вывод .
По умолчанию все порты настроены на ввод , поэтому настраиваем только порт D на вывод .
При нажатии кнопки на порту ввода C появляется число 10000000 , до нажатия было 00000000 .
Вводим это число в регистр .
Далее его выводим .

У меня вопросы :
при нажатии кнопки как показано на рисунке , в порту ввода будет появляться число 10000000 или 00000000 . На KP580 включенная кнопка это 0 , тут аналогично ?
Как писать заголовок , первую строку программы , например ".include "d:\avr\avrasm\appnotes\2313def.inc" .
Нужно ли настраивать порт D на вывод ? ( объясните если можно ) .
Настройка порта D на вывод осуществляется с помощью этой команды ( ldi Temp, 0D11111111 ) ?
Заранее извиняюсь за код , старался написать базу , тело программы .
Подключил кнопку к порту C , светодиод к порту D .
По схеме у меня порт C - ввода , порт D - вывода .
Кнопка у нас ввод , светодиод вывод .
По умолчанию все порты настроены на ввод , поэтому настраиваем только порт D на вывод .
При нажатии кнопки на порту ввода C появляется число 10000000 , до нажатия было 00000000 .
Вводим это число в регистр .
Далее его выводим .
У меня вопросы :
при нажатии кнопки как показано на рисунке , в порту ввода будет появляться число 10000000 или 00000000 . На KP580 включенная кнопка это 0 , тут аналогично ?
Как писать заголовок , первую строку программы , например ".include "d:\avr\avrasm\appnotes\2313def.inc" .
Нужно ли настраивать порт D на вывод ? ( объясните если можно ) .
Настройка порта D на вывод осуществляется с помощью этой команды ( ldi Temp, 0D11111111 ) ?
Заранее извиняюсь за код , старался написать базу , тело программы .
Код: Выделить всё
.include " C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def "
.def Temp=R16
.cseg
.org 0
in DDRC,Temp
out DDRD ,Temp
- Вложения
-
- Снимок1.jpg
- (147.81 КБ) 6875 скачиваний
- blackx
- Говорящий с текстолитом
- Сообщения: 1518
- Зарегистрирован: Пт дек 28, 2012 21:56:46
- Откуда: St. Petersburg
Re: ATmega8 . Разработка программы .
Почитайте вот это.
Постарайтесь сначала отдельно:
1) сделать правильную схему. Например вы хотите повестить на МК кнопку и светодиод - в том же протеусе подключите все сразу так как нужно. С питанием, землей, линией сброса, защитными резисторами.
2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.
Постарайтесь сначала отдельно:
1) сделать правильную схему. Например вы хотите повестить на МК кнопку и светодиод - в том же протеусе подключите все сразу так как нужно. С питанием, землей, линией сброса, защитными резисторами.
2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.
only pure true norwegian blackx 
-
RossiaForever
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вс июл 29, 2012 19:09:48
Re: ATmega8 . Разработка программы .
blackx писал(а):Почитайте вот это.
Постарайтесь сначала отдельно:
1) сделать правильную схему. Например вы хотите повестить на МК кнопку и светодиод - в том же протеусе подключите все сразу так как нужно. С питанием, землей, линией сброса, защитными резисторами.
2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.
огромное спасибо за ответ .
Постараюсь поработать над этим .
У меня самая первая ошибка в заголовке , выдает ошибку
Код: Выделить всё
C:\Users\kompYOUter\Desktop\project\AVR\programm.asm(1): error: Missing include file name
Последний раз редактировалось RossiaForever Сб янв 05, 2013 10:02:58, всего редактировалось 2 раза.
-
RossiaForever
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вс июл 29, 2012 19:09:48
Re: ATmega8 . Разработка программы .
Компилирую программу , компилируется .
Заметил "ошибку" программы при загрузке ее в МК в Proteus , думал это Proteus виноват ( в интернете часто на программу сваливают ) . Решил отладить программу через Debug в AVR Studio , так-то и нашел ошибочку .
В пример приведу часть программы ( она компилируется ) , команда заносит в регистр R16 ( Temp ) число 11111111 :
При отладке в Debug в регистре R16 появляется число FF ( 11111111 ) как и должно быть .
Счетчик циклов увеличивается с 0 до 4096 и т.д.
Счетчик программ (PC) = 0x000001 .
Счетчик циклов , программ и регистр R16 выделены красным цветом .

В чем может быть ошибка ?
Заметил "ошибку" программы при загрузке ее в МК в Proteus , думал это Proteus виноват ( в интернете часто на программу сваливают ) . Решил отладить программу через Debug в AVR Studio , так-то и нашел ошибочку .
В пример приведу часть программы ( она компилируется ) , команда заносит в регистр R16 ( Temp ) число 11111111 :
Код: Выделить всё
.include "m8def.inc"
.def Temp=R16
.cseg
.org 0
ldi Temp, 0b11111111
out DDRD,Temp
При отладке в Debug в регистре R16 появляется число FF ( 11111111 ) как и должно быть .
Счетчик циклов увеличивается с 0 до 4096 и т.д.
Счетчик программ (PC) = 0x000001 .
Счетчик циклов , программ и регистр R16 выделены красным цветом .
Код: Выделить всё
AVR Simulator: Invalid opcode 0xffff at address 0x000002
В чем может быть ошибка ?
- Вложения
-
- Снимок1.JPG
- (50.68 КБ) 6478 скачиваний
- neon15
- Родился
- Сообщения: 10
- Зарегистрирован: Чт фев 25, 2010 20:00:26
- Откуда: Украина
- Контактная информация:
Re: ATmega8 . Разработка программы .
.org - указывает с какого адреса пойдет собственно программа. Обычно используется для создания таблицы прерываний.
Но каждый такой вопрос будут ссылки на ресурсы в интернете.
Рекомендую читать:
http://easyelectronics.ru/avr-uchebnyj- ... ramma.html
http://easyelectronics.ru/avr-uchebnyj- ... mbler.html
и упомянутые здесь книги.
Код: Выделить всё
.ORG $000 ; (RESET) Но каждый такой вопрос будут ссылки на ресурсы в интернете.
Рекомендую читать:
http://easyelectronics.ru/avr-uchebnyj- ... ramma.html
http://easyelectronics.ru/avr-uchebnyj- ... mbler.html
и упомянутые здесь книги.
Не откладывай на завтра то, что не хочется делать сегодня. Завтра тоже не захочется...
-
RossiaForever
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вс июл 29, 2012 19:09:48
Re: ATmega8 . Разработка программы .
neon15 писал(а):.org - указывает с какого адреса пойдет собственно программа. Обычно используется для создания таблицы прерываний.Код: Выделить всё
.ORG $000 ; (RESET)
Но каждый такой вопрос будут ссылки на ресурсы в интернете.
Рекомендую читать:
http://easyelectronics.ru/avr-uchebnyj- ... ramma.html
http://easyelectronics.ru/avr-uchebnyj- ... mbler.html
и упомянутые здесь книги.
То есть программу нужно размещать в неком цикле ?
-
RossiaForever
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вс июл 29, 2012 19:09:48
Re: ATmega8 . Разработка программы .
Перешел временно на светодиоды , бегущие огни , написал программу и решил сделать задержку в подпрограмме :
Без подпрограммы ( задержка ) все работает нормально .
При отладке программы :
по команде rcall вызывается п/п , при выходе из п/п ... снова возвращается на команду Init: Ldi Temp , 0b00000001 , и так до бесконечности . Где накосячил не могу понять , указатели стека пока немного трудно понять .
Код: Выделить всё
.include "m8def.inc"
.def Temp=R16
.def Temp1=R17
.cseg
.org 0000
Init: Ldi Temp , 0b00000001
Shift : rcall Delay
cpi Temp,0b10000000
breq Init
lsl Temp
rjmp Shift
Delay: ; подпрограмма
Ldi Temp1 , 0
Loop:dec Temp1
brne Loop
ret
Без подпрограммы ( задержка ) все работает нормально .
При отладке программы :
по команде rcall вызывается п/п , при выходе из п/п ... снова возвращается на команду Init: Ldi Temp , 0b00000001 , и так до бесконечности . Где накосячил не могу понять , указатели стека пока немного трудно понять .
- Engineer_Keen
- Друг Кота
- Сообщения: 3870
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: ATmega8 . Разработка программы .
Обычная ошибка тех кто начинает писать программы - нет инициализации стека, поэтому команды RET/RETI не работают.
Код: Выделить всё
LDI r16,high(ramend) ;это делаем первым делом, ну или одним из первых
OUT SPH,r16
LDI r16,low(ramend)
OUT SPL,r16
init:


