Ik heb een PIC 12F629 welke ik aan een rookmelder heb toegevoegd. De PIC wil ik in SLEEP mode brengen voor 1 uur waarna hij moet ontwaken en even een RF code moet uitspugen. Tevens moet hij uit zijn sleep mode worden gehaald door een Interrupt op de B poorten.
Is het mogelijk om met een SLEEP {Lenght} commando de PIC te laten ontwaken m.b.v. een interrupt? of kan dit alleen met de SLEEP (zonder Lenght) opdracht? Ik vind de hulp van de proton compiler niet helemaal duidelijk hierover.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Dat kan uiteraard niet. Als de MCU in sleep mode is, kan 'ie geen timers bijhouden...
Mogelijkheid is om de WDT te gebruiken. Bij max. tijd krijg je dan een WDT-timeout interrupt iedere ~2.3 seconden. Dan even tijdens wake-up de timers bijwerken en weer terug in sleep mode. Na zo'n 1565 interrupts zit je dan aan een uur...
Misschien is het handig om de 629 op de interne oscillator van 32KHz te draaien, in plaats van de gebruikelijke 4MHz, als stroomverbruik van belang is.
idd ik had hem op 20Mhz draaien en heb inmiddels al een 4Mhz kristal besteld om het stroomverbruik terug te dringen. Ik gebruik 4 Mhz omdat het een en ander met 2400 baud wordt verzonden ik had gelezen op picbasic.nl dat de timing nogal kritisch is en een kristal wordt aangeraden.
Verder zag ik dat de 78L05 veel te veel stroom vreet in rust dus heb inmiddels ook een Low drop regulator besteld.
[Bericht gewijzigd door jpeeters op (27%)]
kristallen bestaan in nog veel meer snelheden.
Kijk ook naar je voedingsspanning, een PICje werkt al met 2 volt en dat scheelt ook heel veel in stroomverbruik.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Op 5v / 4MHz gebruikt de pic ~0.6mA. Als je de WDT methode gebruikt, loopt dat terug tot ~10µA. (87.6mA p.jaar)
87.6 mA per jaar is dat het totale verbruik dan met de WDT methode ondanks dat hij om de 2,3 sec. maximaal verbruikt?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
ondanks dat hij om de 2,3 sec. maximaal verbruikt
Het extra gebruik bij interrupts is nihil.
Bij een klok van 4MHz, en zeg 30 instruction cycles elke 2.3 seconden om de timers bij te werken, is dat:
1565 * 30 * 24 * 365 = 411.282.000 instruction cycles op vol vermogen ieder jaar
411.282.000 / 1.000.000 = 411.8 seconden.
Dat is zo'n 68µA extra op jaarbasis... 
(Er komt natuurlijk wel eventueel extra bij van andere gebruikte peripherals, zoals usart, pull-ups, enz...)
Hoe gaat dat precies in zijn werk met de WDT, want ik had altijd begrepen dat als de WDT overloopt (na ca 2.3 sec), de PIC zichzelf reset. Hoe houd ik dan bijv een tellerwaarde bij?
Als je van de PICBasic Sleep gebruikt maakt gaat hij gewoon verder met de volgende regel in je programma.
Teller = 0
Again:
Sleep 60
Teller = Teller + 1
goto AgainDe PIC wordt inderdaad gereset, maar in het PCON register staan een aantal vlaggetjes waaraan je kunt zien waardoor de reset veroorzaakt werd:
1) Opkomen voedingspanning
2) MCLR lijn laag getrokken
3) Watchdog timer
4) Brown out
En dat gebruikt PICBasic om weer naar de goede plek in je programma terug te springen.
Hou er trouwens wel rekening mee dat als je 60 seconden slaapt het alles kan zijn tussen 30 seconden en 2 minuten afhankelijk van je chip, de temperatuur en de voedingspanning. Het is dus erg onnauwkeurig.
Dus als ik het goed begrijp, zou dit moeten werken voor een 12F629:
Main:
BD1 = PORTB ;"This wil end the mismatch condition"
INTCON.0 = 0
Sleep
If STATUS.4 = 0 Then Inc teller ; STATUS register testen
If teller > X then verder
GoTo Main
verder: