Ok tak nikto nic tak som stiahol ten tvoj nestastny datasheet www.atmel.com/Images/doc2543.pdf
V prvom rade uz zo zadania vidis ze mas pouzit pin PB4, vyhladas si to slovo v datasheete zistis ze moze mat funkciu "OC1B" (vystup timeru B), a das si hladat slovo OC1B a najdes
Takze vies ze mas nastavit DDB4 (bit 4 registra DDRB) na 1, aby ten vystup mal funkciu OC1B.OC1B: Output Compare Match B output: The PB4 pin can serve as an external output for the
Timer/Counter1 Output Compare B. The pin has to be configured as an output (DDB4 set (one))
to serve this function.
Dalej vlavo mas kapitoly kliknes na kapitolu 16bit timer/counter1 a citas si, za normalnych okolnosti je NUTNE si to precitat cele ptz ta vec ma vela moznosti jak ju vyuzit a je tam podrobne popisane jak to funguje a jake su moznosti. Bez citania datasheetu vzivote ziaden mikrokontroller nenaprogramujes.
Na strane 93 najdes napr. popis "Compare Match Output Unit", to je pre teba zaujimave, tam je napisane to co som uz pisal minule (po dosiahnuti prednastaveneho cisla v pocitadle sa invertuje vystupny pin a pocita sa odznova).
Na str.104 zacina sekcia popis registrov timera/countera, to je najdolezitejsia sekcia. Uvedomis si ze pracujes s kanalom B (timer1 a vystup OC1B), takze pre teba platia tie oznacenia bitov s pismenom B. Zistis napr. ze musis nastavit register resp bity COM1B1 na 0 a COM1B0 na 1, aby invertoval pin ked pocitadlo dosiahne zadanu hodnotu ("Toggle OC1A/OC1B on Compare Match")
Dalej musis nastavit registre resp. bity WGM13-10 na 0,1,0,0, aby si mal mod "CTC" to znamena clear timer on compare (aby ked dosiahne tebou zadanu hodnotu zacal radat znova od 0)
Dalej tam vidis ze musis nastavit CS12-CS10 na frekvenciu ktora ti najlepsie vyhovuje. Frekvencia je odvodena od frekvencie chipu, t.j. musis vediet na jakej frekvencii bezi vas chip v skole. Ak pouzivate interny oscilator ten ma 128kHz, je mozne ze tam mate nastavenz este aj nejaky prescaler to zavisi od specialnych bitov pri programovani tzv "fuse" bitov.
Ty mozes predpokladat ze tam mas 128kHz, a teda ked nastavis CS12-CS10 na 0,1,1 (clkIO/64), tak tvoj timer pocita s frekvecniou 2kHz, t.j. 2000 za sekundu. V tom pripade ak chces 0.4s tak musis ratat do 0.4*2000 = 800. Hodnotu 800 teda tuto hodnotu nastavis do registra "OCR1B". To je 16bitovy register a pristupuje sa nan specialnym sposobom po bajtoch (najprv vrchny bajt, potom spodny bajt), popisanym na strane 84-85. Vrchny bajt ma hodnotu 800/256, spodny bajt 800%256 (zbytok po deleni 256), mozes si to vyratat rucne ak chces (vrchny bajt=800/256=3, spodny bajt=800-3*256=32), alebo to za teba vyrata prekladac ak tam napises 800/256 a 800%256. Sposob pristupu je priblizne takyto
ldi r17,3
ldi r16,32
out OCR1BH,r17
out OCR1BL,r16
Uff. To by malo byt vsetko a program mozes zahaltovat a pin bude blikat sam od seba.
P.S. je mozne ze je treba nastavit este nejake registre controllera ja som necital cely dtasheet a nepoznam tento ATtiny zhlavy. Ale zhruba do skoly pre ucitela stacia tie registre ktore som pisal.
P.S.2. zabralo mi to pol hodinu kroru to malo zabrat VAM studentom. VY si mate ten datasheet studovat aby ste sa naucili, nie ja. Zvykni si ze datasheety su kludne aj 200-300stranove a sused ani hurvinek to za teba citat nebude :)
P.S.3. ale uznavam ze ten atmel datasheet je dost nezrozumitelny, to si ale este nevidel datasheet od cinana :D