С чего начать программировать микроконтроллеры?

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Всёравно не видит там мой МК
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Можно ли вообще совместить Uniprof и Си? Или Си и программатор Громова? А то ниодна прога для Си не видит его.
Файлы HEX - это только ассемблер?
Pippeytz писал(а):всеравно юни проф и пони всякий хлам поддержуют)

На юнипроф то работает. Но он прошивает только hex файлы...
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

Дык я Вам и говорил, что надо выбирать программатор, который поддерживается той средой программирования, которую Вы выбрали.
В CodeVisionAVR поддерживается, например, программатор STK200/300 для LPT. Можно его же приспособить и для Uniprof с небольшими переделками.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Блин. Изучая обучалку, тормознулся с прерываниями. Делаю всё как надо, а получаются сплошные ошибки. :(
Аватара пользователя
Pippeytz
Потрогал лапой паяльник
Сообщения: 396
Зарегистрирован: Ср май 28, 2008 19:30:31
Откуда: Донецк
Контактная информация:

Сообщение Pippeytz »

Я те как прошдеший первую стадию мк могу тибе токо посоветовтаь щаз
1 Переводи даташит , обучалки тибе не помогут
2 Слепи STK200-300 вместо програматра громова
3 Слепи HVProg для оживления дохлых мег, которые будут
С етим наобром можно смело писать прогу, тут же шить и проверть ее работу в железе и не боятсо неправлиьно выставить пару фузов.
Тут могу дать печатку и некотоыре рекомеднации , я его собирал сам недавно.....
Полный пипеутз.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Да мне (на первое время) для того, чтобы начать применять МК, нужно разобраться, как сделать так, чтобы МК не гонял программу по кругу (как с мигалками светодиодов), а при подаче сигнала на определённые выводы, начинал выполнять программу с заданной метки. А именно на этом у меня всё застопорилось. Даже когда полностью копирую код из обучалки (и конечно ставлю соответствующий для этого кода апноут), то при компиляции так-же выдаёт кучу ошибок.
Щас я подготовлю вопрос, что конкретно я не понял, может и подскажет кто (в теме про контроллеры я уже спросил, но пока полный молчёк).

Вот код, скопированый из обучалки для 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 >> 8) & 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 ;выход из обработчика

Соответственно то-же при компиляции выдаёт такие-же ошибки.
Может кто знает, что тут не так? Или может кто написать простейший пример, чтобы по прерыванию переходило на нужную метку?
Аватара пользователя
Pippeytz
Потрогал лапой паяльник
Сообщения: 396
Зарегистрирован: Ср май 28, 2008 19:30:31
Откуда: Донецк
Контактная информация:

Сообщение Pippeytz »

Асемблер не понимать даже кушать немогу(
Советую почитать старинчки тыча сли они еще есть
они мне в начале здорово помогли...
Полный пипеутз.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Ох
Кажись разобрался.
Множество мелких ошибок, типа пропущеной запятой и т.д.

Но ругался на вектор прерываний 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:


Пришлось закомментировать, но теперь работает вроде. Ладно, продолжу дальше.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Pippeytz писал(а):Советую почитать старинчки тыча сли они еще есть
они мне в начале здорово помогли...

С таким оформлением и структурой сайта, мне проще в асемблере разобраться, чем в этих страницах. Но еще попытаюсь.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

И еще, подскажите, как десятичное число перевести в шестнадцатиричную систему?
Аватара пользователя
Pippeytz
Потрогал лапой паяльник
Сообщения: 396
Зарегистрирован: Ср май 28, 2008 19:30:31
Откуда: Донецк
Контактная информация:

Сообщение Pippeytz »

http://ru.wikipedia.org/wiki/16-ричное_число
Разибваеш чилсо на стеки по 4 елемента и заменяеш по табилце..
Полный пипеутз.
Аватара пользователя
Томатный
Нашел транзистор. Понюхал.
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина
Контактная информация:

Сообщение Томатный »

пашок писал(а):Помогите пожалуиста нати сомоучитель по программированию микроконтроллеров AVR (начинающих с нуля)

почитал бы посты выше!
я лично предлагаю статьи Сергея Рюмика: http://stream.ifolder.ru/10074067
есть куча книжек например на http://all-ebooks.com
PB_EXPERT
Потрогал лапой паяльник
Сообщения: 331
Зарегистрирован: Вс мар 30, 2008 14:31:51

Сообщение PB_EXPERT »

Может немного не в тему, но авось кому пригодится.
На этой страничке есть самоучитель по PIC контроллерам http://www.ikarab.narod.ru/
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Вчера решил перепаять программатор Громова внутрь разъёма COM, и обнаружил, что у меня стояли резисторы по 10 Ком вместо 1 Ком :)))
Кстати, вот еще вопрос.
Для внешнего прерывания есть два вывода: INT0 и INT1. Как я понимаю, если их задействовать, они должны быть настроены на ввод. Подавать на них надо 5 вольт? Читал что вроде как надо чтобы было меньше напряжения питания. А если включить через диод? Или будет достаточно резистора (а какого)? Можно ли задействовать для внешних прерываний (или может каким-то другим способом) дополнительные выводы? Надо, чтобы при замыкании концевого выключателя, программа начинала выполняться с определённого места, а двух выводов возможно маловато будет.
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

SeregaT писал(а):...Для внешнего прерывания есть два вывода: INT0 и INT1. ...Подавать на них надо 5 вольт?

Надо подавать логический уровень, который соответствует напряжению питания. Ведь Ваш микроконтроллер может питаться и от 3,3 вольт...

SeregaT писал(а):...Можно ли задействовать для внешних прерываний (или может каким-то другим способом) дополнительные выводы?

Я бы сделал по-простому, чтобы при замыкании любой кнопки, менялся логический уровень на входе INT. А потом уже внутри обработчика прерываний разбирался бы, какая именно кнопка нажата. Схему нарисовать, или и так всё ясно?
Аватара пользователя
Pippeytz
Потрогал лапой паяльник
Сообщения: 396
Зарегистрирован: Ср май 28, 2008 19:30:31
Откуда: Донецк
Контактная информация:

Сообщение Pippeytz »

Понятно что если прерывания INT0 и INT1 называютсья внешними, то
выводы прерываний дожлны быть сконфигурированый на вход :)))
Логическая еденица гарантировано разпознаеться мк если она ссответсвует больше чем 60% от питания , ноль ссответсвено меньше чем 20%
Полный пипеутз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Pippeytz писал(а):Понятно что если прерывания INT0 и INT1 называютсья внешними, то выводы прерываний дожлны быть сконфигурированый на вход :)))
входы внешних прерываний остаются действующими и в том случае, когда соответствующие порты сконфигурированы на ВЫХОД. Это позволяет генерировать прерывание программно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Каким образом можно написать прошивку для МК на С, и конвертировать её в файл HEX?
Аватара пользователя
Пухич
Модератор
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

SeregaT писал(а):Каким образом можно написать прошивку для МК на С, и конвертировать её в файл HEX?


Путем компиляции и ассемблирования. Иначе никак машкодов не получить.
Знание - сила!
Аватара пользователя
suslogon
Друг Кота
Сообщения: 10693
Зарегистрирован: Пн июл 14, 2008 21:28:00
Откуда: Москва
Контактная информация:

Сообщение suslogon »

:) буду в институте в этом симестре изучать ATmega8515...это будет круто!!!будем работать с отладочными платами :wink:
Ищу тиратрон ТХИ1-2000/4, ГРИ ИН-23, ФЭУ-103; 134; 135, 138, 155, 157, лампу ИСШ-7.
Любые ГИС серий 203, 225, 233, 244, 250, 296, 801, 838 в любом состоянии. Компоненты и детали от миниатюрных твердотельных лазеров.
Ответить

Вернуться в «Теория»