|
Нужна помощь в прошивании AVR |
|
|
|
Jun 25 2012, 17:45
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370

|
Здравствуйте, господа форумчане. Столкнулся со следующей проблемкой. После долгих недель штудировании теории и кодинга под avr (с использованием Proteus) решил перейти к практике. Запилил простенькую платку, которая связывала выводы программатора и выводы мк(VCC, GND, RESET, MISO, MOSI, SCK). Взял у друга Avrisp mkii и при первой же попытке прошить мк взлетает ошибка "Read voltage 0,0V is outside selected device's operating range: 1,8 V to 5,5 V"... Недолго думая совершил грандиозный поступок и прочитал даташит к программатору... Ага лопухнулся нужно отдельно запитать. Запитал от лабораторного блока 5V как по феншую. Read voltage 0,0V is outside selected device's operating range: 1,8 V to 5,5 V. Недолго думая, подумал ещё, пришёл к выводу, что нужно поспать. Поспал. Проснулся, залез в интернет и нашёл схему для прошивки
Собрал, запитал. Read voltage 0,0V is outside selected device's operating range: 1,8 V to 5,5 V. Борюсь с этим уже не первую неделю) Формум хотел оставить на последок, чтобы лишний раз не беспокоить людей по мелочам. Но у меня ничего не вышло. Утопающий просит спасения, т.к. судя по проблеме рук у меня нет
|
|
|
|
|
Jun 25 2012, 18:40
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370

|
В первый раз соединил VCC и GND программатора и контроллера и запитал их. Во второй раз всё как на приведённой выше схеме
|
|
|
|
|
Jun 26 2012, 01:02
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(MySOL @ Jun 26 2012, 03:40)  Read voltage 0,0V is outside selected device's operating range: 1,8 V to 5,5 V AVRISP MKii не видит напряжения питания контроллера, о чём и говорит английским по белому. Вывод AVRISP MKii должен быть соединён с VCC,AVCC контроллера и там должно быть +5V относительно GND. Проверить можно даже без контроллера, подключив только блок питания +5V к AVRISP MKii. +5V -> VTG; GND -> GND. Должно поменяться сообщение об ошибке, например, что не может обнаружить контроллер, прочитать сигнатуру ит.п. Vasily_, контроллер ATmega8, обозначен на схеме в 1 посте.
|
|
|
|
|
Jun 26 2012, 07:51
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370

|
Цитата(ae_ @ Jun 26 2012, 05:02)  AVRISP MKii не видит напряжения питания контроллера, о чём и говорит английским по белому. Вывод AVRISP MKii должен быть соединён с VCC,AVCC контроллера и там должно быть +5V относительно GND. Проверить можно даже без контроллера, подключив только блок питания +5V к AVRISP MKii. +5V -> VTG; GND -> GND. Должно поменяться сообщение об ошибке, например, что не может обнаружить контроллер, прочитать сигнатуру ит.п. Vasily_, контроллер ATmega8, обозначен на схеме в 1 посте. Все выводы подсоеденины. Сейчас решил проверить сам программатор. Подал питание на VTG и GND и тут шляпа, пишет мне 0V ))
Сообщение отредактировал MySOL - Jun 26 2012, 07:52
|
|
|
|
|
Jun 26 2012, 08:25
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 28-01-12
Пользователь №: 69 930

|
Цитата(MySOL @ Jun 26 2012, 10:51)  Все выводы подсоеденины. Сейчас решил проверить сам программатор. Подал питание на VTG и GND и тут шляпа, пишет мне 0V )) Может программатор дохлый.
Сообщение отредактировал electronics - Jun 26 2012, 08:27
|
|
|
|
|
Jun 26 2012, 08:52
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370

|
Цитата(electronics @ Jun 26 2012, 12:25)  Может программатор дохлый. Ёлы-палы. Сам сейчас сижу думаю об этом. Но как такое могло произойти? Всегда подавал только рабочее напряжение
|
|
|
|
|
Jun 26 2012, 10:30
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370

|
Цитата(ILYAUL @ Jun 26 2012, 14:04)  Ну так есть два варианта - или шлейф в обрыве или прозвонить Vtg с GND , но я так понимаю источник питания в защиту не уходит. Тогда есть вариант с Пичаль и расстройство, Vtg молчит. Хотя это всё очень странно, в даташите написанно, что у мк есть защита от кз
|
|
|
|
|
Jun 26 2012, 11:59
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(MySOL @ Jun 26 2012, 19:30)  Пичаль и расстройство, Vtg молчит. Хотя это всё очень странно, в даташите написанно, что у мк есть защита от кз Может напутали с цоколёвкой разъёма? зеркально или вверх ногами, вот и не видит. 2 - VCC; 6 - GND 12\ 34 ) На плате, вид сверху на штырьки 56/ 21\ 43 ) Разъём mkII, цветной провод сверху, вид со стороны гнёзд 65/
|
|
|
|
|
Jun 26 2012, 13:45
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370

|
Цитата(ae_ @ Jun 26 2012, 15:59)  Может напутали с цоколёвкой разъёма? зеркально или вверх ногами, вот и не видит. 2 - VCC; 6 - GND 12\ 34 ) На плате, вид сверху на штырьки 56/
21\ 43 ) Разъём mkII, цветной провод сверху, вид со стороны гнёзд 65/ Благодарю, в даташите распиновка выводов была не со стороны гнёзд а вид сверху, не знал. Вопрос решён.
|
|
|
|
|
Apr 19 2013, 15:05
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Здравстуйте! Продскажите пожалуйста где у меня ошибка. Я написал программу для ATtiny13A. В симуляторе AVR Studio все работает как надо, а как прошиваю ничего не горит. Пробывал прошить скачаную программу из инета, все заработала. Это моя первая программа, опыта работы с AVR Studio нет. Программатор AVR Dragon, прошивку программатора обновил вчера через AVR Studio. Код .device ATtiny13A .nolist .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn13Adef.inc" .list
.def temp = r16 .def Delay1 = r17 .def Delay2 = r18 .def Delay3 = r19
.cseg .org 0
rjmp RESET; Reset Handler rjmp EXT_INT0; IRQ0 Handler reti;rjmp PCINT0; PCINT0 Handler reti;rjmp TIM0_OVF; Timer0 Overflow Handler reti;rjmp EE_RDY; EEPROM Ready Handler reti;rjmp ANA_COMP; Analog Comparator Handler reti;rjmp TIM0_COMPA; Timer0 CompareA Handler reti;rjmp TIM0_COMPB; Timer0 CompareB Handler reti;rjmp WATCHDOG; Watchdog Interrupt Handler reti;rjmp ADC; ADC Conversion Handler
;******************************************************************************* *******
Reset: ;задержка запуска после сброса ldi Temp,0 ldi Temp,0 ;Назначаем входы и выходы портов (0-вход, 1-выход) ldi temp, 0b111101 out DDRB, temp
;Включаем подтяжку и задаем начальное состояние выходов ldi temp, 0b000010 out PORTB ,temp ;Настраиваем регистр MCUCR на разрешение прерываний с 0 на 1 ;и устанавливаем режим Power-down ldi temp, 0b00110011 out MCUCR, temp ;разрешаем внешние прерывания на INT0 ldi temp, 0b01000000 out GIMSK, temp
sei ;разрешить прерывания
EXT_INT0: sei
ldi temp, 0b00110011 out MCUCR, temp sbis PinB, 1;ждем нажатия кнопки (0-выполняем, 1-пропускаем) sleep
puch:;ждем отпускания кнопки sbic PinB, 1 rjmp puch
;Настраиваем разрешение прерываний с 1 на 0 ldi temp, 0b00110010 out MCUCR, temp
Loop: sbi PortB, 4 ;включаем светодиод
;задержка 7 милисекунд ldi Delay1, 0x78 ldi Delay2, 0x05 ldi Delay3, 0x00 rcall Delay
cbi PortB, 4 ;тушим светодиод ;задержка 1 милисекунда ldi Delay1, 0xC8 ldi Delay2, 0x00 ldi Delay3, 0x00 rcall Delay
;если кнопка не нажата продолжаем гореть sbis PinB, 1 rjmp Loop puch1:;ждем отпускания кнопки sbic PinB, 1 rjmp puch1 rjmp EXT_INT0
Delay: subi Delay1,1 sbci Delay2,0 sbci Delay3,0 brcc Delay ret Вот схема всего устройства. Это фонарь с магнитным управлением, кнопку нажал светодиод загорелся, еще раз нажал потух и микроконтроллер ушол в спящий режим. Я на первом этапе поставил только геркон, 2 резистора и светодиод, вместо транзистора.
Сообщение отредактировал Valek - Apr 19 2013, 15:12
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 19 2013, 18:42
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата Продскажите пожалуйста где у меня ошибка. Я написал программу для ATtiny13A. А инициализация стека? Код ldi temp, LOW(RAMEND) out SPL, temp Добавить в самом начале.
|
|
|
|
|
Apr 20 2013, 04:22
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Цитата(artkam @ Apr 19 2013, 21:34)  Очень уж странная у Вас схема... Здесь получается, что при срабатывании мосфета, питание, подаваемое на контроллер, просаживается до ноля. Точно! ))) Так и есть. Но если вы повнемательней посмотрите на программу, то увидете, что это генератор с частоттой 125 Гц и скважностью 7/8. Так вот, когда открыт транзистор микроконтроллер питается от конденсатора С1, потом транзистор закрывается и С1 заряжается через R3, R4. Цитата(adnega @ Apr 19 2013, 21:42)  А инициализация стека? Код ldi temp, LOW(RAMEND) out SPL, temp Добавить в самом начале. А самое начало это после Код Reset: или после Код .cseg .org 0 ?
|
|
|
|
|
Apr 20 2013, 07:33
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(Valek @ Apr 20 2013, 08:22)  А самое начало это после Код Reset: или после Код .cseg .org 0 ? Вот примерчик: Код //--------------------------------------------- // Настройка (HIGH = 0xF9, LOW = 0x7A): // Fclk = 9.6 MHz // BOD = 4.3 V //--------------------------------------------- .include "tn13def.inc" //********************************************* // Константы //********************************************* .equ TO_PULSE = 50 ; Стартовый импульс, мс .equ pulse = PB2 ; Выход OUT_PULSE
//********************************************* // Регистры //********************************************* .def temp = r16
//********************************************* // Сегмент кода //********************************************* .org 0 rjmp RESET RESET: // Настройка стека ldi temp, LOW(RAMEND) out SPL, temp
// Настройка ввода-вывода ldi temp, (1<<pulse) out DDRB, temp
// Настройка аналгового кмпаратора ldi temp, (0<<ACD)|(0<<ACBG) out ACSR, temp
// Стартовый импульс sbi PORTB, pulse ldi temp, TO_PULSE rcall delay_ms
MAINLOOP: // Подать ток sbi PORTB, pulse rcall delay
// Ждать сработки компаратора wait_ac: sbic ACSR, ACO rjmp wait_ac
// Отключить ток cbi PORTB, pulse rcall delay rcall delay rcall delay
rjmp MAINLOOP
//********************************************* // БИБЛИОТЕКИ и ФУНКЦИИ //*********************************************
//--------------------------------------------- // Задержка ms //--------------------------------------------- // Формирует задержку в temp мс. //--------------------------------------------- delay_ms: push temp delay_ms_1: push temp ldi temp,148 delay_ms_2: push temp ldi temp,20 delay_ms_3: dec temp brne delay_ms_3 pop temp dec temp brne delay_ms_2 pop temp dec temp brne delay_ms_1 pop temp
ret
//--------------------------------------------- // Задержка тактирования //--------------------------------------------- delay: ldi temp,9 delay_1: dec temp brne delay_1 ret
//********************************************* // КОНЕЦ ФАЙЛА //*********************************************
|
|
|
|
|
Apr 21 2013, 10:21
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Это получается в двух местах инициализацию делать?
Сообщение отредактировал Valek - Apr 21 2013, 10:30
|
|
|
|
|
Apr 22 2013, 17:04
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Инициализация стека не спасло ситуацию (((. Мне вот интересно, есть статья http://radiokot.ru/start/mcu_fpga/avr/ там используются такие же команды как у меня в программе, но там ни слова про инициализацию стека. Где у меня ошибка? Почему в симуляторе все работает как надо, а в микроконтроллере нет? Может можно как-то поблочно программу проверить. Скажем чтобы был просто генератор. Отключить прерывания и оставить только задежки?
Сообщение отредактировал Valek - Apr 22 2013, 17:11
|
|
|
|
|
Apr 22 2013, 18:15
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(Valek @ Apr 22 2013, 20:04)  Инициализация стека не спасло ситуацию (((. Мне вот интересно, есть статья http://radiokot.ru/start/mcu_fpga/avr/ там используются такие же команды как у меня в программе, но там ни слова про инициализацию стека. Наверное там предполагают что Вы знаете чем отличается команда вызова подпрограммы от команды перехода. Цитата(Valek @ Apr 22 2013, 20:04)  Где у меня ошибка? Почему в симуляторе все работает как надо, а в микроконтроллере нет? Видать такие симуляторы. Цитата(Valek @ Apr 22 2013, 20:04)  Может можно как-то поблочно программу проверить. Скажем чтобы был просто генератор. Отключить прерывания и оставить только задежки? Конечно можно. Попробуйте переписать программу по образу и подобию примерчика ув. adnegaИ разберитесь со стеком. Пока не поймёте что это такое двигаться дальше бессмысленно.
|
|
|
|
|
Apr 24 2013, 15:05
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Цитата(ILYAUL @ Apr 22 2013, 21:34)  Покажите ка Вашу инит стека Код .device ATtiny13A .nolist .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn13Adef.inc" .list
;èíèöèàëåçàöèÿ ñòåêà ldi temp, LOW(RAMEND) out SPL, temp
.def temp = r16 .def Delay1 = r17 .def Delay2 = r18 .def Delay3 = r19
rjmp RESET; Reset Handler rjmp EXT_INT0; IRQ0 Handler reti;rjmp PCINT0; PCINT0 Handler reti;rjmp TIM0_OVF; Timer0 Overflow Handler reti;rjmp EE_RDY; EEPROM Ready Handler reti;rjmp ANA_COMP; Analog Comparator Handler reti;rjmp TIM0_COMPA; Timer0 CompareA Handler reti;rjmp TIM0_COMPB; Timer0 CompareB Handler reti;rjmp WATCHDOG; Watchdog Interrupt Handler reti;rjmp ADC; ADC Conversion Handler
;******************************************************************************* **
Reset: ;èíèöèàëåçàöèÿ ñòåêà ldi temp, LOW(RAMEND) out SPL, temp
;Íàçíà÷àåì âõîäû è âûõîäû ïîðòîâ (0-âõîä, 1-âûõîä) ldi temp, 0b111101 out DDRB, temp
;Âêëþ÷àåì ïîäòÿæêó è çàäàåì íà÷àëüíîå ñîñòîÿíèå âûõîäîâ ldi temp, 0b000010 out PORTB ,temp ;Íàñòðàèâàåì ðåãèñòð MCUCR íà ðàçðåøåíèå ïðåðûâàíèé ñ 0 íà 1 ;è óñòàíàâëèâàåì ðåæèì Power-down ldi temp, 0b00110011 out MCUCR, temp ;ðàçðåøàåì âíåøíèå ïðåðûâàíèÿ íà INT0 ldi temp, 0b01000000 out GIMSK, temp
sei ;ðàçðåøèòü ïðåðûâàíèÿ
EXT_INT0: sei
ldi temp, 0b00110011 out MCUCR, temp sbis PinB, 1;æäåì íàæàòèÿ êíîïêè (0-âûïîëíÿåì, 1-ïðîïóñêàåì) sleep
puch:;æäåì îòïóñêàíèÿ êíîïêè sbic PinB, 1 rjmp puch
;Íàñòðàèâàåì ðàçðåøåíèå ïðåðûâàíèé ñ 1 íà 0 ldi temp, 0b00110010 out MCUCR, temp
Loop: sbi PortB, 4 ;âêëþ÷àåì ñâåòîäèîä
;çàäåðæêà 7 ìèëèñåêóíä ldi Delay1, 0x78 ldi Delay2, 0x05 ldi Delay3, 0x00 rcall Delay
cbi PortB, 4 ;òóøèì ñâåòîäèîä ;çàäåðæêà 1 ìèëèñåêóíäà ldi Delay1, 0xC8 ldi Delay2, 0x00 ldi Delay3, 0x00 rcall Delay
;åñëè êíîïêà íå íàæàòà ïðîäîëæàåì ãîðåòü sbis PinB, 1 rjmp Loop puch1:;æäåì îòïóñêàíèÿ êíîïêè sbic PinB, 1 rjmp puch1 rjmp EXT_INT0 Delay: subi Delay1,1 sbci Delay2,0 sbci Delay3,0 brcc Delay ret При первом и втором варианте программы, если закоментировать строку sleep, то программа работает так - подносишь магнит загорается светодиод (как задумано, со скважностью 7/8) убераешь магнит тухнет светодиод.
Сообщение отредактировал Valek - Apr 24 2013, 14:44
|
|
|
|
|
Apr 25 2013, 10:48
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Цитата(XVR @ Apr 25 2013, 10:25)  За что же вы свою инициализацию стека в область векторов прерывания засунули?  Вообще я ставил инициализацию стека в разные места, не помогает (
|
|
|
|
|
Apr 25 2013, 12:16
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Valek @ Apr 25 2013, 14:48)  Вообще я ставил инициализацию стека в разные места, не помогает ( ОФФ: Вы знаете - мой сосед шаляпина напевал. Фигня шаляпин, не катит... По делу: Строки инициализации стэка это код (который будет оттранслирован в бинарные команды МК и вставлен в _то_место_ которое вы указали). Адрес вектора сброса ВСЕГДА с нулевого адреса. А теперь внимательно посмотрите что у вас вышло? Если до нулевого вектора программа и доковыляет, то вот другие аппаратные вектора у вас съехали в зад... Ассэмблер тем и хорош - что написали, сам дурак. Т.е. он будет вставлять туда и то, только то что вы написали в исходниках. Откройте для себя директиву .org и ставте её в критичных к смещению во флэше местах. Всегда компилятор будет ругаться, если что то налезет на эти адреса при компиляции.
|
|
|
|
|
Apr 25 2013, 14:23
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Попробуйте убрать инит.стека везде где Вы его вставили. А вот эти строки : Код sei EXT_INT0: sei заменить на : Код EXT_INT0: ldi temp, LOW(RAMEND) out SPL, temp sei
|
|
|
|
|
Apr 25 2013, 17:32
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Цитата(Valek @ Apr 24 2013, 18:05)  При первом и втором варианте программы, если закоментировать строку sleep, то программа работает так - подносишь магнит загорается светодиод (как задумано, со скважностью 7/8) убераешь магнит тухнет светодиод. не понятно как она у вас вообще запускается, во-первых сделайте как посоветовал zombi или попробуйте вот так: Код .device ATtiny13A .nolist .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn13Adef.inc" .list .def temp = r16 .def Delay1 = r17 .def Delay2 = r18 .def Delay3 = r19 rjmp RESET; Reset Handler rjmp INT0; IRQ0 Handler rjmp PCINT0; PCINT0 Handler reti;rjmp TIM0_OVF; Timer0 Overflow Handler reti;rjmp EE_RDY; EEPROM Ready Handler reti;rjmp ANA_COMP; Analog Comparator Handler reti;rjmp TIM0_COMPA; Timer0 CompareA Handler reti;rjmp TIM0_COMPB; Timer0 CompareB Handler reti;rjmp WATCHDOG; Watchdog Interrupt Handler reti;rjmp ADC; ADC Conversion Handler ;**************************************************************************** *** ** RESET: INT0: ;èíèöèàëåçàöèÿ ñòåêà ldi temp, LOW(RAMEND) out SPL, temp ;Íàçíà÷àåì âõîäû è âûõîäû ïîðòîâ (0-âõîä, 1-âûõîä) ldi temp, 0b111101 out DDRB, temp ;Âêëþ÷àåì ïîäòÿæêó è çàäàåì íà÷àëüíîå ñîñòîÿíèå âûõîäîâ ldi temp, 0b000010 out PORTB ,temp ;Íàñòðàèâàåì ðåãèñòð MCUCR íà ðàçðåøåíèå ïðåðûâàíèé ñ 0 íà 1 ;è óñòàíàâëèâàåì ðåæèì Power-down ldi temp, 0b00110010; вкл.режима Power-down + прерываания PCINT0 + вкл.режима срабатывания INT0 от перехода 1в0 out MCUCR, temp
; точка входа по прерыванию INT0 - Пробуждение из спящего режима ;INT0: ldi temp, 0b000010; устанавливаем слежение за выв.1 out PCMSK,temp ; вкл. прерывания PCINT0 по изменению уровня на выводах ldi temp, 0b00100000 out GIMSK, temp ; задержка от дребезга кнтактов ldi Delay1, 0x78 ldi Delay2, 0x05 ldi Delay3, 0x00 rcall Delay
sei ;ðàçðåøèòü ïðåðûâàíèÿ Loop: sbi PortB, 4 ;âêëþ÷àåì ñâåòîäèîä ;çàäåðæêà 7 ìèëèñåêóíä ldi Delay1, 0x78 ldi Delay2, 0x05 ldi Delay3, 0x00 rcall Delay cbi PortB, 4 ;òóøèì ñâåòîäèîä ;çàäåðæêà 1 ìèëèñåêóíäà ldi Delay1, 0xC8 ldi Delay2, 0x00 ldi Delay3, 0x00 rcall Delay rjmp Loop puch1:;æäåì îòïóñêàíèÿ êíîïêè sbic PinB, 1 rjmp puch1 Delay: subi Delay1,1 sbci Delay2,0 sbci Delay3,0 brcc Delay ret
; Пробуждение из спящего режима INT0:
; Прерывание по нажатию кнопки PCINT0: cbi PortB, 4 ;откл. св.диода ; вкл. прерывания INT0 ldi temp, 0b01000000 out GIMSK, temp sleep reti
|
|
|
|
|
Apr 27 2013, 02:53
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
AVR Studio 4.18 build 716 при компиляции выдает ошибку. Я помню что всамом начале тоже пытался задействовать это прерывание и у меня была такая же ошибка. Код .device ATtiny13A .nolist .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn13Adef.inc" .list
.def temp = r16 .def Delay1 = r17 .def Delay2 = r18 .def Delay3 = r19
rjmp RESET; Reset Handler rjmp EXT_INT0; IRQ0 Handler rjmp PCINT0; PCINT0 Handler reti;rjmp TIM0_OVF; Timer0 Overflow Handler reti;rjmp EE_RDY; EEPROM Ready Handler reti;rjmp ANA_COMP; Analog Comparator Handler reti;rjmp TIM0_COMPA; Timer0 CompareA Handler reti;rjmp TIM0_COMPB; Timer0 CompareB Handler reti;rjmp WATCHDOG; Watchdog Interrupt Handler reti;rjmp ADC; ADC Conversion Handler вот такая ощибка: D:\AVR Project\fonar\fonar.asm(131): error: Illegal attempt to re-use 'PCINT0' as label Пишет что PCINT0 где-то уже ипользовалось! Что за чушь, мы же его впервые в программе написали. Да... а разве нет резници между EXT_INT0 и INT0?
Сообщение отредактировал Valek - Apr 27 2013, 02:55
|
|
|
|
|
May 2 2013, 00:44
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Цитата(MaxiMuz @ Apr 27 2013, 18:32)  замените PCINT0 на любое др. имя к примеру PCINT0_vect , т.к. имя PCINT0 описывается в tn13Adef.inc который вы включили в свой проект Как микроконтроллер поймет что нужно перейти в это место при совершении прерывания? А я думал что метка в программе должна называться как прерывание, и когда совершается прерывание то программа переходит в это место.
|
|
|
|
|
May 2 2013, 07:28
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 9-12-11
Из: Новосибирск
Пользователь №: 68 762

|
Таблица векторов прерываний на адреса памяти программ 0h,2h,4h,6h и так далее, аппаратно прошита в МК, и уже с этих адресов командой rjmp, осуществляется переход на любую пользовательскую подпрограмму обработки прерывания, и без разницы как она называется, только выход из нее происходит по reti, а не по ret.
Сообщение отредактировал Andron77 - May 2 2013, 07:29
|
|
|
|
|
May 4 2013, 04:33
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Цитата(Herz @ May 2 2013, 11:39)  Valek, а чему Вы удивляетесь? Пока Вы будете делать по две ошибки в слове, программы Ваши и работать будут соответственно. Вы же и на ассемблере пишете с той же внимательностью.  прям как диктант пишем, будем повнимательней. А на ассемблере где ошибся?
Сообщение отредактировал Valek - May 4 2013, 04:45
|
|
|
|
|
May 6 2013, 11:31
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Цитата(Valek @ May 2 2013, 03:44)  А я думал что метка в программе должна называться как прерывание, и когда совершается прерывание то программа переходит в это место. коду программы всеравно как обзывается метка Последний кусок , где : Код ; Пробуждение из спящего режима INT0: нужно убрать
|
|
|
|
|
May 8 2013, 02:52
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Ну вот, совсем по-простому. Эта программа работает как часы. Но я хочу установить спящий режим. Какие регистры мне необходимо настроить? MCUCR и GIMSK? Без прерываний не обойтись? Код ; Программа для фонаря с магнитным управлением ; частота 1 МГц от внутреннего генератора
.device ATtiny13A .nolist .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn13Adef.inc" .list
.def temp = r16 .def delay1= r17 .def delay2= r18 .def delay3= r19
rjmp Init
Init: ;Назначаем входы и выходы портов (0-вход, 1-выход) ldi temp,0b111101 out DDRB ,temp ;Включаем подтяжку на входах (1-есть рез., 0- нет рез.) ;и задаем начальное состояние выходов ldi temp,0b000010 out PORTB ,temp
Start: rcall knopka
on: sbi portB, 4;включаем светодиод
;задержка 7 милисекунд ldi Delay1, 0x78 ldi Delay2, 0x05 ldi Delay3, 0x00 rcall Delay
cbi PortB, 4 ;тушим светодиод ;задержка 1 милисекунда ldi Delay1, 0xC8 ldi Delay2, 0x00 ldi Delay3, 0x00 rcall Delay
sbis PinB, 1 ;проверяем нажатие кнопки rjmp knopka
rjmp on
//Подпрограмма "кнопка" knopka: sbic PinB, 1;ждем нажатия кнопки rjmp knopka
;задержка от дребезга контактов 5mc ldi Delay1, 0x78 ldi Delay2, 0x05 ldi Delay3, 0x00 rcall Delay puch: sbis PinB, 1;ждем отпускания кнопки rjmp puch ret
Delay: subi Delay1,1 sbci Delay2,0 sbci Delay3,0 brcc Delay ret
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|