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

 
 
 
Reply to this topicStart new topic
> WDT AVR, разное время сбрасывания
Alt.F4
сообщение Sep 23 2010, 19:08
Сообщение #1


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Установил WDT на 8сек + при каждом сбросе вкл/выкл светодиод и вооружившись секундомером стал измерять.
Так вот время сброса оказалось ОЧЕНЬ неточным: от 2с до 6с!
Это нормально? WDT при каждом включении сбрасываю:
Код
WDT_ON:                    
cli                        ; запрещаем прерывания
wdr                        ; сбрасываем WDT
in         temp,MCUSR            ;
andi     temp,(0xff & (0<<WDRF));
out     MCUSR, temp            ;    сбрасываем флаг MCUSR, для работы с WDE    
lds        temp,WDTCSR            ;
ori        temp,(1<<WDCE)|(1<<WDE); разрешаем изменение WDT
sts     WDTCSR,temp        ;
ldi        temp,(1<<WDP0)|(0<<WDP1)|(0<<WDP2)|(1<<WDE)|(0<<WDCE)|(1<<WDP3);
sts     WDTCSR,temp            ; WDT на 8сек
ret                            ;
Offtop: почему авр не хотит после инициализации UART отправлять символы, сперва надо что принять? (МК при отправке не зависает, проходит подпрограмму, ничего не отослав по UART, и работает дальше. А вот если сперва принять хотя бы один символ, то все отсылается.)
Спасибо.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 24 2010, 06:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Вы бы тип контроллера указали... Судя по использованию обращений к регистрам командами sts, наверное, что-то типа mega48/88/168 ?

Цитата(Alt.F4 @ Sep 23 2010, 23:08) *
почему авр не хотит после инициализации UART отправлять символы, сперва надо что принять?

Нет, не надо. Наверное, Вы "накосячили" с инициализацией...
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 24 2010, 06:47
Сообщение #3


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
наверное, что-то типа mega48/88/168
да, оно самое, mega48
Цитата
"накосячили" с инициализацией
Код
    clr        temp        ;
    sts        UCSR0A,temp    ;
    ldi        temp,0b00000110; 8бит, 1стоповый бит, нет четности, асинхронный режим
    sts        UCSR0C,temp    ;
    ldi        temp,0x80    ; сброс
    sts        CLKPR,temp    ; делителя
    ldi        temp,0x00    ; тактовой
    sts        CLKPR,temp    ; частоты
    clr        temp        ;
    sts        UBRR0H,temp    ;
    ldi        temp,29        ; ubrr=29
    sts        UBRR0L,temp    ; 9600 бод/сек

    ldi        temp,0b00011000; установка TXEN RXEN
    sts        UCSR0B,temp    ; USART вкл
Спасибо.

Сообщение отредактировал Alt.F4 - Sep 24 2010, 06:50
Go to the top of the page
 
+Quote Post
=GM=
сообщение Sep 24 2010, 14:13
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Да, сильно накосячили, поставили USART в SPI моду (послав 0x06 -> UCSR0C, а не в UCSR0B)


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 24 2010, 14:46
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(=GM= @ Sep 24 2010, 18:13) *
Да, сильно накосячили, поставили USART в SPI моду (послав 0x06 -> UCSR0C, а не в UCSR0B)
Да, нет - с этим всё правильно. Это Вы биты UMSEL с битами UCSZ попутали...

То Alt.F4:
С инициализацией, вроде, всё верно... А, куски программы передачи и приёма байта можно посмотреть?
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 24 2010, 14:58
Сообщение #6


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Код
USART_transmit:
    lds        temp2,UCSR0A    ;
    sbrs    temp2,(UDRE0)    ;ждем пока содержимое из UDR0 перегрузится в сдвиговый регистр
    rjmp    USART_transmit    ;
    sts        UDR0,temp        ;отправляем
    ret                        ;возврат из процедуры отправки

USART_receive:
    lds        temp2,UCSR0A    ;
    sbrs    temp2,(RXC0)    ;ждем приема символа (установка RXC)
    rjmp    USART_receive    ;
    lds        temp,UDR0        ;читаем
    ret                        ;возврат из процедуры приема


Сообщение отредактировал Alt.F4 - Sep 24 2010, 14:59
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 24 2010, 16:05
Сообщение #7


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



По поводу WDT: накосячил с кодом, запускал watchdog до нажатия кнопки! 01.gif
Теперь проблема другая: после сброса, МК не реагирует на кнопку
Код
Start:
    sbic      PinC,0            ; KEY нажата? если да, то пропуск след. команды
    rjmp      Start            ;
    rcall     sec0_5            ; подождали 0,5сек        
    sbic      PinC,0            ; KEY нажата? если да, то пропуск след. команды
    rjmp      Start            ;

    sbi        PortC,3        ; светим SYSTEM    
    rcall    WDT_ON        ; включаем WDT + разрешаем прерывания


Сообщение отредактировал Alt.F4 - Sep 24 2010, 16:06
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 24 2010, 18:13
Сообщение #8


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Ё-мана, после сотого "опыта" я понял, что WDT после сброса не выключается!!!
Go to the top of the page
 
+Quote Post

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

 


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


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