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

 
 
 
Reply to this topicStart new topic
> не работает watchdog, не могу разобраться в чём проблема
MySOL
сообщение Jun 17 2012, 18:40
Сообщение #1


Участник
*

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



Здравствуйте, господа форумчане. Недавно начал освоение микроконтроллеров и дошёл до watchdog и тут я застрял. НАписал простенькую програмку, которая мигает светодиодом раз в секунду, затем записал в программу watchdog, который сбрасывал программу через 0.5 сек. Т.е. по сути светодиод загораться не должен. Но когда запустил в симуляторе Proteus, то прерывания не происходит, т.е. светодиод продолжает мигать. Весь интернет уже облазил в поисках ответа на свой вопрос.
Помогите пожалуйста разобраться в чём проблема, в моих руках или в протеусе. Вот фрагмент самой программы:
Код
rjmp Init

Delay:
ldi Delay1, 0x40
ldi Delay2, 0x0D
ldi Delay3, 0x03
OneSecond:
subi Delay1, 1
sbci Delay2, 0
sbci Delay3, 0
brne OneSecond

ret

Init:
ser temp
out DDRD, temp

ldi temp, 0b00001101
sts wdtcsr, temp

Start:
cbi PortD, 0
rcall Delay
sbi PortD, 0
rcall Delay

rjmp Start
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 17 2012, 19:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(MySOL @ Jun 17 2012, 21:40) *
Код
ldi temp, 0b00001101
sts wdtcsr, temp

Довольно сранная инициализация WDT. Не думаю что так удастся изменить период WDT.
ДШ рекомендует делать как-то так:
Код
WDT_Prescaler_Change:
; Turn off global interrupt
cli
; Reset Watchdog Timer
wdr
; Start timed sequence
lds r16, WDTCSR
ori   r16, (1<<WDCE) | (1<<WDE)
sts WDTCSR, r16
; --  Got four cycles to set the new values from here -
; Set new prescaler(time-out) value = 64K cycles (~0.5 s)
ldi   r16, (1<<WDE) | (1<<WDP2) | (1<<WDP0)
sts WDTCSR, r16
; --  Finished setting new values, used 2 cycles -
; Turn on global interrupt
sei
ret
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jun 17 2012, 19:39
Сообщение #3


Участник
*

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



Невероятно, заработало; большое спасибо! Вот только не могли бы вы пояснить, как работает данная часть кода
Код
ldi   r16, (1<<WDE) | (1<<WDP2) | (1<<WDP0)

а точнее то, что написанно в скобках. Просто я новичёк в плане ассемблера и всё пишу в таком виде ldi reg, 0bXXXXXXXX

Сообщение отредактировал MySOL - Jun 17 2012, 19:42
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 17 2012, 19:55
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(MySOL @ Jun 17 2012, 22:39) *
Код
ldi   r16, (1<<WDE) | (1<<WDP2) | (1<<WDP0)

а точнее то, что написанно в скобках. Просто я новичёк в плане ассемблера и всё пишу в таком виде ldi reg, 0bXXXXXXXX


Из inc-файла:
Код
#define    WDE      3
#define    WDP2     2
#define    WDP1     1
#define    WDP0     0


(1<<WDE) | (1<<WDP2) | (1<<WDP0)=(1<<3)|(1<<2)|(1<<0)=0x0D=0b0001101.
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jun 17 2012, 19:57
Сообщение #5


Участник
*

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



Благодарю
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 18 2012, 10:32
Сообщение #6


Гуру
******

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



Цитата(MySOL @ Jun 17 2012, 22:40) *
Вот фрагмент самой программы...

Инициализация стека - не попала в представленный фрагмент программы или отсутствует вовсе?
Go to the top of the page
 
+Quote Post
MySOL
сообщение Jun 20 2012, 10:31
Сообщение #7


Участник
*

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



Цитата(Палыч @ Jun 18 2012, 13:32) *
Инициализация стека - не попала в представленный фрагмент программы или отсутствует вовсе?


Просто не попала
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:47
Рейтинг@Mail.ru


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