Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem atTINY2313 ASSEMBLER, Counter/Timer

zdravím,
Chci se zeptat zda by mi někdo nepomohl s podprogramem pro spoždění 0,4s pomocí C/T1.

Zadání: Připojte přípravky podle schématu. Napište program pro blikání led na vývodu PB4 v intervalu 0,4 s pomocí C/T. Použijte režim output compare.

Vůbec si nevím rady s tím, jak zreazilovat ten C/T1. Předem díky za odpověď.
Zmena predmetu, pôvodne: ASSEMBLER, C/T1 (MM..)

Předmět Autor Datum
C/T znamena counter/timer, a popis mas ako inac v datasheete tvojho tajneho mikrokontrollera.
MM.. 28.11.2012 20:59
MM..
... a nepotrebujes "podprogramem pro spoždění". HW timery vedia zvycajne na urcitych vystupoch vytva…
MM.. 28.11.2012 21:18
MM..
Prikladam sem nieco z posty, jedna sa o atTINY2313, a stale to nechape ani po mojom pokuse o vysvetl…
MM.. 28.11.2012 22:38
MM..
Ok tak nikto nic tak som stiahol ten tvoj nestastny datasheet doc2543.pdf V prvom rade uz zo zadania…
MM.. 29.11.2012 01:17
MM..
.. este k tym bitom co som pisal, bity sa asi nedaju nastavovat samostatne ale musis nastavovat cely… poslední
MM.. 29.11.2012 01:43
MM..

Prikladam sem nieco z posty, jedna sa o atTINY2313, a stale to nechape ani po mojom pokuse o vysvetlenie

Nastavis nejaky counter aby pocital trebars do 50, a vzdy ked dopocita tak zmeni vystup (z 0 na 1 alebo z 1 na 0) a zacne pocitat odznova. Napriklad.
T.j. musis nastavit 1) takyto automaticky mod (to si musis v datasheete pozret ze jake ma tvoj CPU moznosti u toho counteru), a 2) do kolko ma pocitat. To je cele.

Kto robi s atmelmi skuste to vysvetlit lepsie, ja nepoznam zhlavy atmely do detailu

Ok tak nikto nic tak som stiahol ten tvoj nestastny datasheet 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

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.

Takze vies ze mas nastavit DDB4 (bit 4 registra DDRB) na 1, aby ten vystup mal funkciu OC1B.

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

.. este k tym bitom co som pisal, bity sa asi nedaju nastavovat samostatne ale musis nastavovat cely register naraz, t.j. tie nazvy bitov ktore som pisal si das vyhladat v datasheete, napr. CS12-CS10 su v registri TCCR1B, okrem toho je tam WGM13 a WGM12, tie bity ktore nepotrebujes nechas na default hodnote, vyratas si jaku hodnotu registra potrebujes a cely register zapises naraz t.j. napr.

ldi REG, 0x13 ; priklad vyratanej hodnoty podla vsetkych bitov registra
out TCCR1B, REG ;uloz hodnotu do TCCR1B registra

Vyratas si samozrejme spravnu hodnotu registra podla toho jake vsetky bity v nom maju mat hodnotu, to 0x13 som len tak strelil ako priklad.

Zpět do poradny Odpovědět na původní otázku Nahoru