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

Обсуждаем контроллеры компании Atmel.
Ответить
RossiaForever
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вс июл 29, 2012 19:09:48

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

Сообщение RossiaForever »

Доброго времени суток .
Помогите пожалуйста разработать и написать программу ( желательно на Assembler ) для микроконтроллера ATmega8 . Работа программы примитивна : включать светодиод по нажатию кнопки .
Имеются программы AVR Studio и Proteus ( по сути эмулятор ) .
Хочется понять сам принцип разработки программы , алгоритм ее составления , с чего начинать .
Всем заранее спасибо !
Реклама
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

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

Сообщение SmarTrunk »

Ну принцип такой -
1.Читаются книги и даташиты.
2.Пишется несколько строчек программы, в любом тектсовом редакторе или в АВРСтудио сразу.
3.Программа компилируется в АВРСтудио, если нужно.
4.Прошивка прошивается в МК программатором, если нужно.
Реклама
Аватара пользователя
blackx
Говорящий с текстолитом
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

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

Сообщение blackx »

Вы хотели сказать, "помогите мне найти в гугле пример такой программы для новичка"?

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

PS. Да, и кстати, к ветке "Аналоговая техника" это не очень относится :))
Изображение only pure true norwegian blackx Изображение
Аватара пользователя
minakan
Поставщик валерьянки для Кота
Сообщения: 2209
Зарегистрирован: Вт июл 27, 2010 11:31:59
Откуда: Кххх

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

Сообщение minakan »

Реклама
Эиком - электронные компоненты и радиодетали
RossiaForever
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вс июл 29, 2012 19:09:48

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

Сообщение RossiaForever »

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


Компилировать и прошивать МК собираюсь после проверки на эмуляторе . Хочется понять больше по программной части . Изучал Assembler на KP580 , поэтому на Atmel мне не так-то легко сейчас . Очень понравилась книга Ю.Ревич , "Практическое программирование Микроконтроллеров AVR на языке ассемблера" читал , старался понять .
Реклама
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

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

Сообщение SmarTrunk »

Да, Ревича я тоже читал. По-моему, после Ревича уже можно смело ставить Студио 4-й версии, писать программу и отлаживать
Реклама
RossiaForever
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вс июл 29, 2012 19:09:48

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

Сообщение RossiaForever »

minakan писал(а):Вам сюда.
http://radiokot.ru/start/mcu_fpga/avr/



Огромное спасибо ! пока то что нужно , позже в любом случае отпишусь )))
RossiaForever
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вс июл 29, 2012 19:09:48

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

Сообщение 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
Вложения
Снимок1.jpg
(147.81 КБ) 6875 скачиваний
Аватара пользователя
blackx
Говорящий с текстолитом
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

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

Сообщение blackx »

Почитайте вот это.

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

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

2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.
Изображение only pure true norwegian blackx Изображение
RossiaForever
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вс июл 29, 2012 19:09:48

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

Сообщение RossiaForever »

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 . Разработка программы .

Сообщение 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



В чем может быть ошибка ?
Вложения
Снимок1.JPG
(50.68 КБ) 6478 скачиваний
Аватара пользователя
neon15
Родился
Сообщения: 10
Зарегистрирован: Чт фев 25, 2010 20:00:26
Откуда: Украина
Контактная информация:

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 . Разработка программы .

Сообщение RossiaForever »

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 . Разработка программы .

Сообщение 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 , и так до бесконечности . Где накосячил не могу понять , указатели стека пока немного трудно понять .
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Обычная ошибка тех кто начинает писать программы - нет инициализации стека, поэтому команды RET/RETI не работают.

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

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

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