Buggfix Plus
Aktuellt datum och tid: 08.57 2018-12-14

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 17 inlägg ]  Gå till sida Föregående  1, 2
Författare Meddelande
InläggPostat: 21.55 2018-05-21 
Användarvisningsbild

Blev medlem: 11.56 2004-05-08
Inlägg: 2926
Ort: Stockholm
Pin change interrupt verkar ju nästan lämpligare att använda till en kvadraturavkodning eftersom man då kan använda ett och samma interrupt till båda ingångarna? D.v.s. man får ett sådant interrupt om någon ändring har skett på någon av de ingångar som man "bevakar". Sen är det bara att läsa av statusen på ingångarna och hantera ändringen.

Arduino Pin Change Interrupts.


Upp
 Profil  
 
InläggPostat: 00.32 2018-05-22 

Blev medlem: 22.04 2010-07-02
Inlägg: 522
Man väljer ett viloläge som inte stänger av det som orsakar det interrupt man väntar på, så att AVR:en går ur viloläge när ett interrupt händer.
Sen har man en mainloop i user-mode som sätter µC:n i viloläge i varje varv. Det kommer att väckas upp ur viloläge varje gång en interrupt-handler har körts och därmed kunna sätta sig själv i viloläge igen.

Om det viloläge du väljer är SLEEP_MODE_IDLE (det minst djupa viloläget) så borde det inte finnas någon vits med någon fördröjning innan man går i viloläge för det borde inte kosta något att ta sig ur.
Annars skulle du kunna ha ett timer-interrupt och en global booleansk flagg-variabel. Varje gång en normal interruptthandler körs så resettar den timern för att förlänga tiden tills timerinterruptet triggas. Timer-interrupt:ets handler sätter flagg-variabeln till true.
Eftersom timer-interrupthandlern ju startas av ett interrupt så kommer mainloopen att återuppväckas efterråt.
Mainloopen kollar flaggan. Om flaggan är true så stänger den av timer-interruptet, sätter flaggan till false och sover i ett djupare läge, annars sover den i SLEEP_MODE_IDLE. Sen måste koden förstås sätta på timer-interruptet igen om den går ur ett djupare läge.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 17 inlägg ]  Gå till sida Föregående  1, 2

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 2 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010