С чего начать программировать микроконтроллеры?
- Pippeytz
- Потрогал лапой паяльник
- Сообщения: 396
- Зарегистрирован: Ср май 28, 2008 19:30:31
- Откуда: Донецк
- Контактная информация:
Я те как прошдеший первую стадию мк могу тибе токо посоветовтаь щаз
1 Переводи даташит , обучалки тибе не помогут
2 Слепи STK200-300 вместо програматра громова
3 Слепи HVProg для оживления дохлых мег, которые будут
С етим наобром можно смело писать прогу, тут же шить и проверть ее работу в железе и не боятсо неправлиьно выставить пару фузов.
Тут могу дать печатку и некотоыре рекомеднации , я его собирал сам недавно.....
1 Переводи даташит , обучалки тибе не помогут
2 Слепи STK200-300 вместо програматра громова
3 Слепи HVProg для оживления дохлых мег, которые будут
С етим наобром можно смело писать прогу, тут же шить и проверть ее работу в железе и не боятсо неправлиьно выставить пару фузов.
Тут могу дать печатку и некотоыре рекомеднации , я его собирал сам недавно.....
Полный пипеутз.
- SeregaT
- Генеральный секретарь МЯУ
- Сообщения: 18852
- Зарегистрирован: Пн сен 03, 2007 18:24:27
- Откуда: Россия. Омск.
- Контактная информация:
Да мне (на первое время) для того, чтобы начать применять МК, нужно разобраться, как сделать так, чтобы МК не гонял программу по кругу (как с мигалками светодиодов), а при подаче сигнала на определённые выводы, начинал выполнять программу с заданной метки. А именно на этом у меня всё застопорилось. Даже когда полностью копирую код из обучалки (и конечно ставлю соответствующий для этого кода апноут), то при компиляции так-же выдаёт кучу ошибок.
Щас я подготовлю вопрос, что конкретно я не понял, может и подскажет кто (в теме про контроллеры я уже спросил, но пока полный молчёк).
Вот код, скопированый из обучалки для 90s2313 ( http://radiokot.ru/start/mcu_fpga/avr/11/ )
При компиляции выдаёт вот это:
И так на каждую строку.
Вот то-же самое, но это я написал уже для Mega8
Соответственно то-же при компиляции выдаёт такие-же ошибки.
Может кто знает, что тут не так? Или может кто написать простейший пример, чтобы по прерыванию переходило на нужную метку?
Щас я подготовлю вопрос, что конкретно я не понял, может и подскажет кто (в теме про контроллеры я уже спросил, но пока полный молчёк).
Вот код, скопированый из обучалки для 90s2313 ( http://radiokot.ru/start/mcu_fpga/avr/11/ )
.include "F:\AVR\tavrasm\appnotes\2313def.inc"
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.cseg
.org 0
rjmp Reset ;вектора прерываний
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP
;Reset:
INT_0:
INT_1:
Timer1_capt1:
;Timer1_comp1:
Timer1_OVF1:
Timer0_OVF0:
UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset: ldi Temp,0b11111111 ;настройка портов
out DDRB,Temp
ldi Temp,0b01000000 ;разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0b00000011 ;тактовый сигнал = CK/64
out TCCR1B,Temp
ldi Temp,0x4C ;инициализация компаратора
out OCR1AH,Temp
ldi Temp,0x4B
out OCR1AL,Temp
ldi Temp,RamEnd ;установка указателя стека
out SPL,Temp
ldi Temp1,0b00000001 ;инициализация индикатора
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
sei ;разрешить прерывания
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
Inf: rjmp Inf ;бесконечный цикл
;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************
Timer1_comp1:
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
Shift: cpi Temp1,0b10000000 ;сравнить с крайним знач.
breq Init ;если равно - загрузка нач. знач.
lsl Temp1 ;иначе - сдвиг влево
rjmp Output ;перейти на вывод в порт
Init: ldi Temp1,0b00000001 ;загрузить нач. значение
Output: out PortB,Temp1 ;вывод в порт
reti ;выход из обработчика
При компиляции выдаёт вот это:
Warning : Invalid character 0xFF
Error : Unknown opcode
Warning : Invalid character 0x00
Error : Unknown opcode
И так на каждую строку.
Вот то-же самое, но это я написал уже для Mega8
.include "F:\AVR\tavrasm\appnotes\m8def.inc
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.cseg
.org0
rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer2_COMP
rjmp Timer2_OVF
rjmp Timer1_CAPT
rjmp Timer1_COMPA
rjmp Temer1_COMPB
rjmp Timer1_OVF
rjmp Timer0_OVF
rjmp SPI_STC
rjmp USART_RXC
rjmp USART_UDRE
rjmp USART_TXC
rjmp ADC
rjmp EE_RDY
rjmp ANA_COMP
rjmp TWI
rjmp SPM_RDY
;Reset:
INT_0:
INT_1:
Timer2_COMP:
Timer2_OVF:
Timer1_CAPT:
;Timer1_COMPA:
Temer1_COMPB:
Timer1_OVF:
Timer0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
ADC:
EE_RDY:
ANA_COMP:
TWI:
SPM_RDY:
reti
Reset: ldi Temp,0b11111111 ;настройка портов
out DDRD,Temp
ldi Temp,0b00010000 ;разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0b00000010 ;тактовый сигнал = CK/8
out TCCR1B,Temp
ldi Temp,0x4C ;инициализация компаратора
out OCR1AH,Temp
ldi Temp,0x4B
out OCR1AL,Temp
ldi Temp, (RamEnd & 255) ;Установка указателя стека
out SPL,Temp
ldi Temp, (RamEnd >>& 255)
out SPH,Temp
ldi Temp1,0b00000001 ;инициализация индикатора
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
sei ;Разрешить прерывания
;ОСНОВНОЙ ЦИКЛ
Inf: rjmp Inf ;бесконечный цикл
;ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
Timer1_comp1:
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
Shift: cpi Temp1,0b10000000 ;сравнить с крайним знач.
breq Init ;если равно - загрузка нач. знач.
lsl Temp1 ;иначе - сдвиг влево
rjmp Output ;перейти на вывод в порт
Init: ldi Temp1,0b00000001 ;загрузить нач. значение
Output: out PortD,Temp1 ;вывод в порт
reti ;выход из обработчика
Соответственно то-же при компиляции выдаёт такие-же ошибки.
Может кто знает, что тут не так? Или может кто написать простейший пример, чтобы по прерыванию переходило на нужную метку?
- SeregaT
- Генеральный секретарь МЯУ
- Сообщения: 18852
- Зарегистрирован: Пн сен 03, 2007 18:24:27
- Откуда: Россия. Омск.
- Контактная информация:
Ох
Кажись разобрался.
Множество мелких ошибок, типа пропущеной запятой и т.д.
Но ругался на вектор прерываний ADC (0x00E), типа неправильная константа (а это всё из даташита взято)
Пришлось закомментировать, но теперь работает вроде. Ладно, продолжу дальше.
Кажись разобрался.
Множество мелких ошибок, типа пропущеной запятой и т.д.
Но ругался на вектор прерываний ADC (0x00E), типа неправильная константа (а это всё из даташита взято)
rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer2_COMP
rjmp Timer2_OVF
rjmp Timer1_CAPT
rjmp Timer1_COMPA
rjmp Temer1_COMPB
rjmp Timer1_OVF
rjmp Timer0_OVF
rjmp SPI_STC
rjmp USART_RXC
rjmp USART_UDRE
rjmp USART_TXC
rjmp ADC
rjmp EE_RDY
rjmp ANA_COMP
rjmp TWI
rjmp SPM_RDY
;Reset:
INT_0:
INT_1:
Timer2_COMP:
Timer2_OVF:
Timer1_CAPT:
;Timer1_COMPA:
Temer1_COMPB:
Timer1_OVF:
Timer0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
ADC:
EE_RDY:
ANA_COMP:
TWI:
SPM_RDY:
Пришлось закомментировать, но теперь работает вроде. Ладно, продолжу дальше.
- Pippeytz
- Потрогал лапой паяльник
- Сообщения: 396
- Зарегистрирован: Ср май 28, 2008 19:30:31
- Откуда: Донецк
- Контактная информация:
http://ru.wikipedia.org/wiki/16-ричное_число
Разибваеш чилсо на стеки по 4 елемента и заменяеш по табилце..
Разибваеш чилсо на стеки по 4 елемента и заменяеш по табилце..
Полный пипеутз.
- Томатный
- Нашел транзистор. Понюхал.
- Сообщения: 174
- Зарегистрирован: Вт июл 31, 2007 20:32:30
- Откуда: Киев, Украина
- Контактная информация:
пашок писал(а):Помогите пожалуиста нати сомоучитель по программированию микроконтроллеров AVR (начинающих с нуля)
почитал бы посты выше!
я лично предлагаю статьи Сергея Рюмика: http://stream.ifolder.ru/10074067
есть куча книжек например на http://all-ebooks.com
Может немного не в тему, но авось кому пригодится.
На этой страничке есть самоучитель по PIC контроллерам http://www.ikarab.narod.ru/
На этой страничке есть самоучитель по PIC контроллерам http://www.ikarab.narod.ru/
- SeregaT
- Генеральный секретарь МЯУ
- Сообщения: 18852
- Зарегистрирован: Пн сен 03, 2007 18:24:27
- Откуда: Россия. Омск.
- Контактная информация:
Вчера решил перепаять программатор Громова внутрь разъёма COM, и обнаружил, что у меня стояли резисторы по 10 Ком вместо 1 Ком
Кстати, вот еще вопрос.
Для внешнего прерывания есть два вывода: INT0 и INT1. Как я понимаю, если их задействовать, они должны быть настроены на ввод. Подавать на них надо 5 вольт? Читал что вроде как надо чтобы было меньше напряжения питания. А если включить через диод? Или будет достаточно резистора (а какого)? Можно ли задействовать для внешних прерываний (или может каким-то другим способом) дополнительные выводы? Надо, чтобы при замыкании концевого выключателя, программа начинала выполняться с определённого места, а двух выводов возможно маловато будет.
Кстати, вот еще вопрос.
Для внешнего прерывания есть два вывода: INT0 и INT1. Как я понимаю, если их задействовать, они должны быть настроены на ввод. Подавать на них надо 5 вольт? Читал что вроде как надо чтобы было меньше напряжения питания. А если включить через диод? Или будет достаточно резистора (а какого)? Можно ли задействовать для внешних прерываний (или может каким-то другим способом) дополнительные выводы? Надо, чтобы при замыкании концевого выключателя, программа начинала выполняться с определённого места, а двух выводов возможно маловато будет.
SeregaT писал(а):...Для внешнего прерывания есть два вывода: INT0 и INT1. ...Подавать на них надо 5 вольт?
Надо подавать логический уровень, который соответствует напряжению питания. Ведь Ваш микроконтроллер может питаться и от 3,3 вольт...
SeregaT писал(а):...Можно ли задействовать для внешних прерываний (или может каким-то другим способом) дополнительные выводы?
Я бы сделал по-простому, чтобы при замыкании любой кнопки, менялся логический уровень на входе INT. А потом уже внутри обработчика прерываний разбирался бы, какая именно кнопка нажата. Схему нарисовать, или и так всё ясно?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
входы внешних прерываний остаются действующими и в том случае, когда соответствующие порты сконфигурированы на ВЫХОД. Это позволяет генерировать прерывание программно.Pippeytz писал(а):Понятно что если прерывания INT0 и INT1 называютсья внешними, то выводы прерываний дожлны быть сконфигурированый на вход
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- suslogon
- Друг Кота
- Сообщения: 10693
- Зарегистрирован: Пн июл 14, 2008 21:28:00
- Откуда: Москва
- Контактная информация:
Ищу тиратрон ТХИ1-2000/4, ГРИ ИН-23, ФЭУ-103; 134; 135, 138, 155, 157, лампу ИСШ-7.
Любые ГИС серий 203, 225, 233, 244, 250, 296, 801, 838 в любом состоянии. Компоненты и детали от миниатюрных твердотельных лазеров.
Любые ГИС серий 203, 225, 233, 244, 250, 296, 801, 838 в любом состоянии. Компоненты и детали от миниатюрных твердотельных лазеров.