Stránka 1 z 1

atmega 64 - obsluha int0 asi nestíhá

Napsal: 08 lis 2008, 14:17
od 32megac
Ahoj. Mám motorek s enkodérem otáček. Ten mám píchlej na int0. Pokud jsou malé otáčky tak je to ok, i když mi to neukazuje "skutečnou rychlost", ale to by se dalo pořešit. Ale při vyšších otáčkách indikovaná rychlost prudce klesá skoro až k nule. INT0 už nestíhá? Při polovičních otáčkách mám asi 1000 přerušení za sekundu při sbi(MCUCR, ISC00). Jak se dá tahle situace vyřešit?

Napsal: 08 lis 2008, 15:50
od Ragnol
Taktovací frekvence procesoru ? Kolik strojovejch cyklů trvý vykonání přerušení ? ?

Napsal: 08 lis 2008, 16:06
od 32megac
Zaprvé omylem jsem uvedl špatně název mcu. Je to atmega16. 14,745MHz je jeho frekvence. Jak mám zjistit jak dlouho trvá to přerušení? V každým ISR(INT0_vect) provedu ajaja++; a každou sekundu přečtu a nastavím na nulu a tak pořád dokola.

Napsal: 08 lis 2008, 16:36
od Ragnol
vyčíst z asembleru nebo odsimulovat

Napsal: 08 lis 2008, 17:54
od 32megac
Já to programuju v céčku. A odsimulovat to prakticky nemám kde.

Napsal: 08 lis 2008, 18:38
od Ragnol
32megac píše:Já to programuju v céčku. A odsimulovat to prakticky nemám kde.


já vím, že to programuješ v céčku ale každej dobrej kompilátor dává i výstup v asembleru. A odsimulovat třeba v avr studiu.

Napsal: 08 lis 2008, 18:45
od 32megac
Budu se snažit spustit to pod wine. Jedu totiž pod linuxem.

Napsal: 08 lis 2008, 23:14
od 32megac
Tak AVR Studio mi nejede. Musí se to vyřešit nějak jinak. ??

Napsal: 14 lis 2008, 20:29
od zmatkar
32megac píše:Tak AVR Studio mi nejede. Musí se to vyřešit nějak jinak. ??


Zkusil bych v mainu posílat pulzy na jeden pin a tam bych pích osciloskop a zjišťoval, zda se mi blikání zpomaluje a o kolik.

Napsal: 15 lis 2008, 00:59
od Jenda_KL
...
nebo na začátku INT nastavit flag a na konci ho rušit.
ALE ještě před nastavením ho testovat a kdyby byl, tak tu chybu sw ošetřit.
Nebo na konci INT resetovat a spustit timer a na začátku INT se zeptat na nenulovost.

Napsal: 15 lis 2008, 01:05
od Jenda_KL
jak vypisuješ tu informaci? Protože pokud v mainu a MCU by nevyšlo z INT, tak by se nic nevypsalo.
Pokud je to tak, je to spíše v připojení enkodéru.