;;; ;;; ИМИТАТОР СЕРДЦА ;;; .include "C:\VMLAB\include\tn13def.inc" .equ sec14 = 5 ; 1/4 секунды для 1.2 МГц / 256 .def temp = r16 .def counter = r17 .def scaler = r18 reset: rjmp start reti ; Addr $01 reti ; Addr $02 reti ; Addr $03 reti ; Addr $04 reti ; Addr $05 reti ; Addr $06 Use 'rjmp myVector' reti ; Addr $07 to define a interrupt vector reti ; Addr $08 reti ; Addr $09 reti ; Addr $0A reti ; Addr $0B This is just an example reti ; Addr $0C Not all MCUs have the same reti ; Addr $0D number of interrupt vectors reti ; Addr $0E reti ; Addr $0F reti ; Addr $10 start: ; настраиваем стек ldi temp,ramend out spl,temp ; по умолчанию чип работает на 9.6МГц с делителем на 8 = 1.2МГц ; 1.2МГц/256=4.678кГц, ; 4678/256=18циклов по 256 отсчётов в секунду ; настраиваем делитель частоты ldi temp, 0b10000000 ; инициализация процесса out clkpr,temp ldi temp, 0b00001000 ; делим на 256, см. стр. 28 даташита out clkpr,temp ; порт PB0 переводим в режим выхода, остальные остаются ; работать как входы sbi ddrb,0 ; мигаем три раза при старте программы rcall init_flash forever: ; мырг-мырг-пауза rcall led_on rcall middle_pause rcall led_off rcall short_pause rcall led_on rcall middle_pause rcall led_off rcall long_pause rjmp forever ; бесконечно led_on: ; зажечь диод ldi temp,0b00111110 out portb,temp ret led_off: ; погасить диод ldi temp,0b00111111 out portb,temp ret short_pause: ; 1/4 секунды ldi counter,0 ldi scaler,sec14 sp_loop: dec counter brne sp_loop dec scaler brne sp_loop ret middle_pause: ; 1/2 секунды rcall short_pause rcall short_pause ret long_pause: ; 1 секунда rcall short_pause rcall short_pause rcall short_pause rcall short_pause ret init_flash: ; мигнуть три раза rcall led_on rcall middle_pause rcall led_off rcall short_pause rcall led_on rcall middle_pause rcall led_off rcall short_pause rcall led_on rcall middle_pause rcall led_off rcall long_pause ret
| | Ruslan Popov ( |
Имитатор сердца
Накидал код, проверил в эмуляторе (кстате, если отключить анимацию кода и задрать частоту контроллёра, то носится почти в реалтайме), буду завтра прошивать.

March 15 2009, 18:47:56 UTC 3 years ago
Получалось, что МК начинал работать на частоте 37.5 кГц (9.6 МГц/256). Непонятно, почему эта настройка не сбрасывалась при RESET. А программатор пытался общаться с МК на стандартных 800 Гц.
Победную идею подсказал камрад threevc, за что ему громадное спасибо!
Вот победная команда:
Deleted comment
September 6 2009, 09:21:15 UTC 2 years ago
Re: ..........
http://radz.ya.ru/replies.xml?item_no=1Это будет поинтереснее.
September 13 2009, 19:52:19 UTC 2 years ago
В итоге пришлось изучить avrdude:
rad@kitchen:~/bin$ sudo avrdude -c stk200 -p attiny13 -U flash:w:heart.hex:i avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e9007 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "heart.hex" avrdude: writing flash (136 bytes): Writing | ################################################## | 100% 0.06s avrdude: 136 bytes of flash written avrdude: verifying flash memory against heart.hex: avrdude: load data flash data from input file heart.hex: avrdude: input file heart.hex contains 136 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.04s avrdude: verifying ... avrdude: 136 bytes of flash verified avrdude: safemode: Fuses OK avrdude done. Thank you.