реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Нужна помощь в прошивании AVR
MySOL
сообщение Jun 25 2012, 17:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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.
Борюсь с этим уже не первую неделю) Формум хотел оставить на последок, чтобы лишний раз не беспокоить людей по мелочам. Но у меня ничего не вышло. Утопающий просит спасения, т.к. судя по проблеме рук у меня нет
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jun 25 2012, 18:36
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



А сам контроллер запитали


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jun 25 2012, 18:40
Сообщение #3


Участник
*

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



В первый раз соединил VCC и GND программатора и контроллера и запитал их. Во второй раз всё как на приведённой выше схеме
Go to the top of the page
 
+Quote Post
Vasily_
сообщение Jun 25 2012, 22:44
Сообщение #4


Знающий
****

Группа: Модераторы
Сообщений: 925
Регистрация: 25-01-09
Из: Рига
Пользователь №: 43 909



А чего хоть пытаемся прошить, кантроль какой?
Go to the top of the page
 
+Quote Post
ae_
сообщение Jun 26 2012, 01:02
Сообщение #5


Участник
***

Группа: Свой
Сообщений: 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 посте.
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jun 26 2012, 07:51
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
electronics
сообщение Jun 26 2012, 08:25
Сообщение #7


Участник
*

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



Цитата(MySOL @ Jun 26 2012, 10:51) *
Все выводы подсоеденины. Сейчас решил проверить сам программатор. Подал питание на VTG и GND и тут шляпа, пишет мне 0V ))

Может программатор дохлый.

Сообщение отредактировал electronics - Jun 26 2012, 08:27
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jun 26 2012, 08:52
Сообщение #8


Участник
*

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



Цитата(electronics @ Jun 26 2012, 12:25) *
Может программатор дохлый.

Ёлы-палы. Сам сейчас сижу думаю об этом. Но как такое могло произойти? Всегда подавал только рабочее напряжение
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jun 26 2012, 10:04
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Ну так есть два варианта - или шлейф в обрыве или прозвонить Vtg с GND , но я так понимаю источник питания в защиту не уходит. Тогда есть вариант с
Цитата
Запилил простенькую платку....


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jun 26 2012, 10:30
Сообщение #10


Участник
*

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



Цитата(ILYAUL @ Jun 26 2012, 14:04) *
Ну так есть два варианта - или шлейф в обрыве или прозвонить Vtg с GND , но я так понимаю источник питания в защиту не уходит. Тогда есть вариант с

Пичаль и расстройство, Vtg молчит. Хотя это всё очень странно, в даташите написанно, что у мк есть защита от кз
Go to the top of the page
 
+Quote Post
ae_
сообщение Jun 26 2012, 11:59
Сообщение #11


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(MySOL @ Jun 26 2012, 19:30) *
Пичаль и расстройство, Vtg молчит. Хотя это всё очень странно, в даташите написанно, что у мк есть защита от кз

Может напутали с цоколёвкой разъёма? зеркально или вверх ногами, вот и не видит. 2 - VCC; 6 - GND
12\
34 ) На плате, вид сверху на штырьки
56/

21\
43 ) Разъём mkII, цветной провод сверху, вид со стороны гнёзд
65/
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jun 26 2012, 13:45
Сообщение #12


Участник
*

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



Цитата(ae_ @ Jun 26 2012, 15:59) *
Может напутали с цоколёвкой разъёма? зеркально или вверх ногами, вот и не видит. 2 - VCC; 6 - GND
12\
34 ) На плате, вид сверху на штырьки
56/

21\
43 ) Разъём mkII, цветной провод сверху, вид со стороны гнёзд
65/

Благодарю, в даташите распиновка выводов была не со стороны гнёзд а вид сверху, не знал. Вопрос решён.
Go to the top of the page
 
+Quote Post
Valek
сообщение Apr 19 2013, 15:05
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 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
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
artkam
сообщение Apr 19 2013, 18:34
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 14-09-10
Из: Уфа
Пользователь №: 59 479



Очень уж странная у Вас схема... Здесь получается, что при срабатывании мосфета, питание, подаваемое на контроллер, просаживается до ноля.
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 19 2013, 18:42
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата
Продскажите пожалуйста где у меня ошибка. Я написал программу для ATtiny13A.

А инициализация стека?
Код
            ldi        temp, LOW(RAMEND)
            out        SPL, temp

Добавить в самом начале.
Go to the top of the page
 
+Quote Post
zombi
сообщение Apr 19 2013, 22:43
Сообщение #16


Гуру
******

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



Согласен с artkam.
Прежде чем браться за программу надобы со схемой разобраться!
Я не схемотехник но схема мне тоже не нравится!!!
Обьясните что должно происходить при выводе в PB4 единицы???
D2 работает от падения напряжения на R4?
R3=0.7 Ома?
Go to the top of the page
 
+Quote Post
Valek
сообщение Apr 20 2013, 04:22
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 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

?
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 20 2013, 07:33
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 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

//*********************************************
//    КОНЕЦ ФАЙЛА
//*********************************************
Go to the top of the page
 
+Quote Post
zombi
сообщение Apr 20 2013, 09:14
Сообщение #19


Гуру
******

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



Цитата(adnega @ Apr 20 2013, 10:33) *
Вот примерчик:

Боюсь тут не тот случай.
Поскольку у тс прерывание есть а выхода из оного нету.
Видать стек нужно инициализировать при старте и каждый раз при входе в прер.
Go to the top of the page
 
+Quote Post
Valek
сообщение Apr 21 2013, 10:21
Сообщение #20


Участник
*

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



Это получается в двух местах инициализацию делать?

Сообщение отредактировал Valek - Apr 21 2013, 10:30
Go to the top of the page
 
+Quote Post
zombi
сообщение Apr 21 2013, 10:53
Сообщение #21


Гуру
******

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



Цитата(Valek @ Apr 21 2013, 13:21) *
Это получается в двух местах инициализацию делать?

В Вашем случае да.
Похоже Вы не понимаете что такое стек зачем он нужен и как работает.
Go to the top of the page
 
+Quote Post
Valek
сообщение Apr 22 2013, 17:04
Сообщение #22


Участник
*

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



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

Сообщение отредактировал Valek - Apr 22 2013, 17:11
Go to the top of the page
 
+Quote Post
zombi
сообщение Apr 22 2013, 18:15
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 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

И разберитесь со стеком. Пока не поймёте что это такое двигаться дальше бессмысленно.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Apr 22 2013, 18:34
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Покажите ка Вашу инит стека


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Valek
сообщение Apr 24 2013, 15:05
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
XVR
сообщение Apr 25 2013, 07:25
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



За что же вы свою инициализацию стека в область векторов прерывания засунули? blink.gif
Go to the top of the page
 
+Quote Post
Valek
сообщение Apr 25 2013, 10:48
Сообщение #27


Участник
*

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



Цитата(XVR @ Apr 25 2013, 10:25) *
За что же вы свою инициализацию стека в область векторов прерывания засунули? blink.gif

Вообще я ставил инициализацию стека в разные места, не помогает (
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 25 2013, 12:16
Сообщение #28


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Valek @ Apr 25 2013, 14:48) *
Вообще я ставил инициализацию стека в разные места, не помогает (


ОФФ:
Вы знаете - мой сосед шаляпина напевал. Фигня шаляпин, не катит...

По делу:
Строки инициализации стэка это код (который будет оттранслирован в бинарные команды МК и вставлен в _то_место_ которое вы указали).
Адрес вектора сброса ВСЕГДА с нулевого адреса.

А теперь внимательно посмотрите что у вас вышло? Если до нулевого вектора программа и доковыляет, то вот другие аппаратные вектора у вас съехали в зад...
Ассэмблер тем и хорош - что написали, сам дурак. Т.е. он будет вставлять туда и то, только то что вы написали в исходниках.
Откройте для себя директиву
.org
и ставте её в критичных к смещению во флэше местах. Всегда компилятор будет ругаться, если что то налезет на эти адреса при компиляции.
Go to the top of the page
 
+Quote Post
zombi
сообщение Apr 25 2013, 14:23
Сообщение #29


Гуру
******

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



Попробуйте убрать инит.стека везде где Вы его вставили.

А вот эти строки :
Код
sei
EXT_INT0:
    sei

заменить на :
Код
EXT_INT0:
    ldi temp, LOW(RAMEND)
    out SPL, temp  
    sei
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение Apr 25 2013, 17:32
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Valek
сообщение Apr 27 2013, 02:53
Сообщение #31


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение Apr 27 2013, 15:32
Сообщение #32


Местный
***

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



Цитата(Valek @ Apr 27 2013, 05:53) *
вот такая ощибка:
D:\AVR Project\fonar\fonar.asm(131): error: Illegal attempt to re-use 'PCINT0' as label

Пишет что PCINT0 где-то уже ипользовалось! Что за чушь, мы же его впервые в программе написали.

Да... а разве нет резници между EXT_INT0 и INT0?

замените PCINT0 на любое др. имя к примеру PCINT0_vect , т.к. имя PCINT0 описывается в tn13Adef.inc который вы включили в свой проект
Go to the top of the page
 
+Quote Post
Valek
сообщение May 2 2013, 00:44
Сообщение #33


Участник
*

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



Цитата(MaxiMuz @ Apr 27 2013, 18:32) *
замените PCINT0 на любое др. имя к примеру PCINT0_vect , т.к. имя PCINT0 описывается в tn13Adef.inc который вы включили в свой проект

Как микроконтроллер поймет что нужно перейти в это место при совершении прерывания?
А я думал что метка в программе должна называться как прерывание, и когда совершается прерывание то программа переходит в это место.
Go to the top of the page
 
+Quote Post
Andron77
сообщение May 2 2013, 07:28
Сообщение #34


Участник
*

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



Таблица векторов прерываний на адреса памяти программ 0h,2h,4h,6h и так далее, аппаратно прошита в МК, и уже с этих адресов командой rjmp, осуществляется переход на любую пользовательскую подпрограмму обработки прерывания, и без разницы как она называется, только выход из нее происходит по reti, а не по ret.

Сообщение отредактировал Andron77 - May 2 2013, 07:29
Go to the top of the page
 
+Quote Post
Herz
сообщение May 2 2013, 08:39
Сообщение #35


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(Valek @ Apr 27 2013, 05:53) *
Пишет что PCINT0 где-то уже ипользовалось! Что за чушь, мы же его впервые в программе написали.

Да... а разве нет резници между EXT_INT0 и INT0?

Valek, а чему Вы удивляетесь? Пока Вы будете делать по две ошибки в слове, программы Ваши и работать будут соответственно.
Вы же и на ассемблере пишете с той же внимательностью.
Go to the top of the page
 
+Quote Post
Valek
сообщение May 4 2013, 04:33
Сообщение #36


Участник
*

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



Цитата(Herz @ May 2 2013, 11:39) *
Valek, а чему Вы удивляетесь? Пока Вы будете делать по две ошибки в слове, программы Ваши и работать будут соответственно.
Вы же и на ассемблере пишете с той же внимательностью.

blush.gif прям как диктант пишем, будем повнимательней.
А на ассемблере где ошибся?

Сообщение отредактировал Valek - May 4 2013, 04:45
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение May 6 2013, 11:31
Сообщение #37


Местный
***

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



Цитата(Valek @ May 2 2013, 03:44) *
А я думал что метка в программе должна называться как прерывание, и когда совершается прерывание то программа переходит в это место.

коду программы всеравно как обзывается метка
Последний кусок , где :
Код
; Пробуждение из спящего режима
  INT0:
нужно убрать
Go to the top of the page
 
+Quote Post
Valek
сообщение May 8 2013, 02:52
Сообщение #38


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 16:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01939 секунд с 7
ELECTRONIX ©2004-2016