Страница 1 из 1

ATmega8 . Разработка программы .

Добавлено: Чт янв 03, 2013 21:15:59
RossiaForever
Доброго времени суток .
Помогите пожалуйста разработать и написать программу ( желательно на Assembler ) для микроконтроллера ATmega8 . Работа программы примитивна : включать светодиод по нажатию кнопки .
Имеются программы AVR Studio и Proteus ( по сути эмулятор ) .
Хочется понять сам принцип разработки программы , алгоритм ее составления , с чего начинать .
Всем заранее спасибо !

Re: ATmega8 . Разработка программы .

Добавлено: Чт янв 03, 2013 21:22:47
SmarTrunk
Ну принцип такой -
1.Читаются книги и даташиты.
2.Пишется несколько строчек программы, в любом тектсовом редакторе или в АВРСтудио сразу.
3.Программа компилируется в АВРСтудио, если нужно.
4.Прошивка прошивается в МК программатором, если нужно.

Re: ATmega8 . Разработка программы .

Добавлено: Чт янв 03, 2013 21:23:02
blackx
Вы хотели сказать, "помогите мне найти в гугле пример такой программы для новичка"?

Лучшее обучение - самостоятельное, а материалов про AVR в сети много.

PS. Да, и кстати, к ветке "Аналоговая техника" это не очень относится :))

Re: ATmega8 . Разработка программы .

Добавлено: Чт янв 03, 2013 21:29:16
minakan

Re: ATmega8 . Разработка программы .

Добавлено: Чт янв 03, 2013 21:39:48
RossiaForever
SmarTrunk писал(а):Ну принцип такой -
1.Читаются книги и даташиты.
2.Пишется несколько строчек программы, в любом тектсовом редакторе или в АВРСтудио сразу.
3.Программа компилируется в АВРСтудио, если нужно.
4.Прошивка прошивается в МК программатором, если нужно.


Компилировать и прошивать МК собираюсь после проверки на эмуляторе . Хочется понять больше по программной части . Изучал Assembler на KP580 , поэтому на Atmel мне не так-то легко сейчас . Очень понравилась книга Ю.Ревич , "Практическое программирование Микроконтроллеров AVR на языке ассемблера" читал , старался понять .

Re: ATmega8 . Разработка программы .

Добавлено: Чт янв 03, 2013 21:46:14
SmarTrunk
Да, Ревича я тоже читал. По-моему, после Ревича уже можно смело ставить Студио 4-й версии, писать программу и отлаживать

Re: ATmega8 . Разработка программы .

Добавлено: Чт янв 03, 2013 21:50:38
RossiaForever
minakan писал(а):Вам сюда.
http://radiokot.ru/start/mcu_fpga/avr/



Огромное спасибо ! пока то что нужно , позже в любом случае отпишусь )))

Re: ATmega8 . Разработка программы .

Добавлено: Пт янв 04, 2013 23:44:08
RossiaForever
Если я не прав , и где-то ошибка , если можно конечно , подскажите над чем мне подумать , поработать .

Подключил кнопку к порту 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

Re: ATmega8 . Разработка программы .

Добавлено: Сб янв 05, 2013 01:43:00
blackx
Почитайте вот это.

Постарайтесь сначала отдельно:

1) сделать правильную схему. Например вы хотите повестить на МК кнопку и светодиод - в том же протеусе подключите все сразу так как нужно. С питанием, землей, линией сброса, защитными резисторами.

2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.

Re: ATmega8 . Разработка программы .

Добавлено: Сб янв 05, 2013 09:23:28
RossiaForever
blackx писал(а):Почитайте вот это.

Постарайтесь сначала отдельно:

1) сделать правильную схему. Например вы хотите повестить на МК кнопку и светодиод - в том же протеусе подключите все сразу так как нужно. С питанием, землей, линией сброса, защитными резисторами.

2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.


огромное спасибо за ответ .
Постараюсь поработать над этим .
У меня самая первая ошибка в заголовке , выдает ошибку

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

C:\Users\kompYOUter\Desktop\project\AVR\programm.asm(1): error: Missing include file name
, подскажите как ее убрать , хочется понять .

Re: ATmega8 . Разработка программы .

Добавлено: Сб янв 05, 2013 15:05:11
RossiaForever
Компилирую программу , компилируется .
Заметил "ошибку" программы при загрузке ее в МК в 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



В чем может быть ошибка ?

Re: ATmega8 . Разработка программы .

Добавлено: Вс янв 06, 2013 00:33:11
neon15
.org - указывает с какого адреса пойдет собственно программа. Обычно используется для создания таблицы прерываний.

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

.ORG $000      ; (RESET) 

Но каждый такой вопрос будут ссылки на ресурсы в интернете.
Рекомендую читать:
http://easyelectronics.ru/avr-uchebnyj- ... ramma.html
http://easyelectronics.ru/avr-uchebnyj- ... mbler.html
и упомянутые здесь книги.

Re: ATmega8 . Разработка программы .

Добавлено: Вс янв 06, 2013 10:21:55
RossiaForever
neon15 писал(а):.org - указывает с какого адреса пойдет собственно программа. Обычно используется для создания таблицы прерываний.

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

.ORG $000      ; (RESET) 

Но каждый такой вопрос будут ссылки на ресурсы в интернете.
Рекомендую читать:
http://easyelectronics.ru/avr-uchebnyj- ... ramma.html
http://easyelectronics.ru/avr-uchebnyj- ... mbler.html
и упомянутые здесь книги.


То есть программу нужно размещать в неком цикле ?

Re: ATmega8 . Разработка программы .

Добавлено: Вс янв 06, 2013 11:11:51
RossiaForever
Перешел временно на светодиоды , бегущие огни , написал программу и решил сделать задержку в подпрограмме :

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


.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 , и так до бесконечности . Где накосячил не могу понять , указатели стека пока немного трудно понять .

Re: ATmega8 . Разработка программы .

Добавлено: Вс янв 06, 2013 11:38:03
Engineer_Keen
Обычная ошибка тех кто начинает писать программы - нет инициализации стека, поэтому команды RET/RETI не работают.

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

   LDI   r16,high(ramend) ;это делаем первым делом, ну или одним из первых
   OUT   SPH,r16      
   LDI   r16,low(ramend)
   OUT   SPL,r16      
init: