Ahoj,
prave jsem presel z ATtiny2313 na ATtiny25. Chtel jsem pouzit counter1, nastavil jsem clock source a cekal jsem, ze zacne pocitat, ale nestalo se nic. Counter0 bezi bez problemu. Zatim jen ladim v AVR studiu. Nepouzivam ATtiny15 mode. Vim, ze T/C1 je jiny nez T/C0, ale nevim v cem. Poradte prosim.
Diky.
timer 0: pro spusteni je treba nastavit registr TCCR0B (bity CS0x, str. 82-83)
timer 1 ma jiny nastaveni delicky - reg. TCCR1 (str. 93)
pro nastaveni preruseni je registr TIMSK
Tesil jsem se na odpoved, ale tahle mi bohuzel nepomohla. Zkusim to s prikladem.
[code].NOLIST
.INCLUDE “tn25def.inc”
.LIST
.DEF temp = R16
.CSEG
.ORG $0000
rjmp RESET
RESET:
;timer/counter0 prescaler = 1
ldi temp, (1<<CS00)
out TCCR0B, temp
;timer/counter1 prescaler = 1
ldi temp, (1<<CS10)
out TCCR1, temp
xxx:
rjmp xxx[/code]
Kdyz tohle krokuju, tak T/C0 cita, T/C1 nic. Co mam spatne?
Jedna otazka novacka navic. Jak nejlepe probouzet cip (a neco delat) ve dvou intervalech na sobe nezavislych napr. 30 s a 5 minut?
Diky.
Na probouzeni pouzij preruseni, sice ti treba nevyjde 1 otocka casovace na dobu, kterou budes potrebovat, ale to uz si urcite zeridis…
Ten druhej casovac jsem v simulatoru taky nerozjel ani v synchro ani v asynchro modu
Jeste jedna vec: ve tvym kodu nemas nastavenej SP… tady to nevadi, ale kdybys pouzival preruseni nebo podprogramy, muze ti zasahnout do dat…
No právě, TC1 nechodí, v čem sabáka zarýta, v čem sabáka zarýta…? Tak ještě jednou projdu datasheet. O nenastaveným SP vím, byl to jen příklad na TCx.
Jinak ta otázka na probouzení čipu byla mířena hlavně na to, jak nejlíp dosáhnout toho času, třeba 5 minut, a zrovna právě s tímhle čipem, když mi poběží na 12 MHz a já mám k dispozici jen 8 bitový čítač. Napadá mě pro sleep mode nastavit clock prescaler, nebo nějak (teď nevím jak) propojit čítače, nebo probouzet častěji podle toho jak to vyjde a v jednom registru počítat kolik těch probuzení bylo. Jak to dělají profíci?
profici nevim, ale ja to delam tak, jak jsi napsal - v jednom registru si pocitam pocet preteceni citace a kdyz je jich pozadovanej pocet, provedu tu akci, co ma byt provedena, registr vynuluju a znova Samozrejme pro vetsi intervaly potrebujes delicku a kdyz to ma bejt presnejsi, tak se pri nulovani pocitaciho registru taky prednastavuje citac.
Napr. kdyz ti vyjde, ze na tech svych 5s potrebujes 5,3 preteceni citace, prednastavis ho na zacatku na 0,7 jeho maxima a spustis. Pak uz jen pocitas tech zbyvajicich 5 otocek.
12MHz
30s: delicka - max(1024), pocet preteceni citace: 12e630/(1024256) = 1373,291
tj. 1374 preteceni s tim, ze pri spusneti bude v citaci hodnota (1-0,291)*256=181
-> ani na tech 30s ti nebude stacit 1 pocitaci registr coz teprve pak 5 min… (v C je to sranda)
Kdybys rozjel druhej citac, bylo by to neco jinyho, ma totiz vetsi delicku
Pokud bys chtel bejt puntickar, namitnes, ze prednastaveni citace v preruseni a za podminkou bude trvat nejakou dobu a moc presny to nebude… Pravda. Misto prednastaveni si muzes precist aktualni hodnotu citace, pricis pozadovane prednastavovaci cislo (zmensene o pocet cyklu potrebnych pro vypocet) a zapsat zpatky. Presnejc to uz neudelas
Zkousels ten citac i v realu, nebo zatim nejde jen v simu?
Tam je napsáno piityy - profesionál…
V reálu jsem to ještě nezkoušel, ale až se vrátím z dovči tak na to vlítnu.
Zatím díky.
Tak jsem zpět. Vyzkoušel jsem to v reálu a oba T/C chodí! Čili je v AVR studiu bug. Jak to mám ale teď krokovat? Ach jo.
A ještě bych měl jednu otázku nezkušeného. Jak střídavě rozsvěcet/zhasínat diodu, čili když svítí zhasnout, když nesvítí rozsvítit. Mám na mysli něco jako bejzikovský PINB4 = NOT PINB4. Zatím používám todle:
[code].EQU Dioda0 = PINB4
.DEF temp = R16
.DEF StavDiody0 = R19
sbr temp, (1<<Dioda0)
in StavDiody0, PORTB
eor StavDiody0, temp
out PORTB, StavDiody0[/code]
Tady jsme negaci pinu jiz resili Pokud mas ovsem vyhrazen 1 registr pro cteni brany -> nagaci -> zapis zpet, muzes si to cteni usetrit - pokud ho totiz nezmenis, je v nem stejna hodnota jako na brane, tudiz je jeji cteni zbytecny
Chtel jsem jim postnout bug, ale kdyz jsem to jeste jednou zkousel, zjistil jsem, ze v simulatoru 2 to chodi… Premejslim, jesli jim to tam i tak nepostnout…
Diky za info k bitu. Prectu. A co je to simulator 2? Jinak to opakovany cteni do registru ve svym kodu potrebuju bo mam na dalsim pinu dalsi diodu a tak bych si ji prepisoval kdybych neaktualizoval.
Prave, ze nepotrebujes Musel bys tu branu cist pouze v pripade, ze bys ten pracovni registr pouzival i k jinym ucelum, ale kdyz ho potrebujes jen pro nastaveni diod, tak branu cist nemusis. Staci jen pouzit podminku na urcitej bit a maskovanim upravit registr, ve kterym mas obraz ty brany. pak ten upravenej registr poslat na branu. Kdyz si ten registr neprepises nejakym nesmyslem a mas tam porad ulozeny jen stavy diod (obraz brany), tak ji nacitat nemusis.
K tomu simulatoru - jaks na zacatku psal “ladim zatim jen v avr studiu”, predpokladam, ze jsi prave pouzival avr simulator (nastaveni “debug platform”). Jsou tam ovsem 2 verze, ve verzi 2 ty citace makaj vpoho…
A jo vlastne, ty ses chytrej. Ja jsem zacatecnik, vim co chci, ale nemam praxi, zkusenosti… tak to bastlim jak me napadne. Naposledy jsem assembleroval pred asi 20 lety na 8080ce. Na tu verzi 2 se podivam co to je zac. Zatim diky.
Pred 20ti lety jsem chodil na nocnik
U nových AVR, k nimž ATtiny25 patří, je u portů nová funkce:Toggling the Pin. K překlopení výstupního portu nebo portů stačí jediná instrukce:
sbi PINB,Dioda0
Zápisem 1 do reg. PINx, která je jinak jen pro čtení, dochází k překlopení stavu u výstupních portů.
A ještě drobnost. V tom příkladu je drobná chyba. Instrukce SBR, nastaví příslušný bit do 1, ale ostatní jsou ponechány náhodě. To může způsobit nežádoucí změnu na ostatních pinech. Místo SBR má být LDI.
Pekne… Da se nekde najit seznam takovychto “nestandartnich featurek”? Bezne totiz clovek nema sanci si neceho takovyho vsimnout, pokud se po vecerech nebavi procitanim datasheetu vsech moznych procesoru
Myslim, ze iba tak ze “se clovek po vecerech bavi procitanim datasheetu vsech moznych procesoru”
Někdo čte noviny od začátku až do konce. Jiný si přečte jenom nadpisy. Pro zjištění takovýchto vlastností tentokrát postačí ta druhá možnost.
- Ja vedel, ze kdyz se na foru zeptam, tak mi ti chytrejsi poradi.
- Ja vedel, ze to musi jit nejak jednoduseji. Asi jsem byl v zajeti starych informaci. (Jak to, ze jsem si toho v datasheetu nevsiml?)
- SBR v tomto pripade byla pouzita spravne, zde uvedeny kod je totiz jen rychly kratky vytazek z delsiho kodu, ale pripominka je to dobra.
Opravdu diky za rady.
Timer 1 jsem ani po hodinách pokusů a hledání také nerozběhl.
Na síti mi někde probliklo, že AVR Studio Timer 1 a některé další věci
u Tiny25 neumělo a asi nadále neumí, protože mám jeho poslední verzi.
Co s tím?
Podívej se do souboru tn25def.inc. Jsou v něm definovany registry a už několikrát jsem tam našel chyby. Např. u tiny861 tam chybí definice bitu PWM1X. Musel jsem to doplnit z datasheetu.