Kul med PIC församling - episod 7 (3 / 3 steg)
Steg 3: programvara
Programvaran länk nedan. Medan det är måltavlan för 12F683, är det lätt portas till andra versioner av bilden. Du kommer att behöva ändra raden som identifierar den PIC versionen (lista =) och INCLUDE-filen men de är intuitivt förändringar. Den __CONFIG linjen kan också behöva tweaking bara för att en eller två av de etiketter som används är stavat fel i några av inkluderade filer.
Normalt skulle vi definiera en i/o pin som indata eller en produktion för vilken funktion var vi med. I detta fall har vi dock kravet på att ladda upp kondensatorn och sedan vända och samtidigt dränera och övervaka kondensatorn spänningen. TRISIO registret styr riktningen I/O stift så som ska ändras varje timeout cykel. Också, eftersom TRISIO och GPIO registren i olika banker, vi måste se till att vi utfärdar rätt BANKSEL kommando varje gång.
Laddtid krävs för kondensatorn bestäms av formeln T = R * K där T är i sekunder, R är i ohm och C är i farads. För exempel värdena i diagrammet innebär ett minimum av 11ms. Koden jag började med hade ett 100 ms fördröjning rutin så jag bara kvar som istället för att trimma ner närmare krävs minst. Om du verkligen vill minimera totala strömförbrukning, då du skulle lätt kunna minska denna försening. Ärligt talat, inte skulle det resultera i mycket besparingar eftersom merparten av tiden spenderas i viloläge. Vad hjälper för energibesparingar är att minska klockhastighet så i detta exempel vi ställa den interna klockan till dess lägsta (31-kHz) genom att avmarkera frekvens kontroll bitar i OSCCON. OSCCON standard normalt för att använda 4-MHz intern klockfrekvens. En annan makt besparingar tips är att konfigurera alla oanvända GPIO stift som resultat.
Naturligtvis detta exempel kommer inte att strömsparläge eftersom vi belysning en av lamporna hela tiden, även under viloläge. Utan lamporna jag mätt sömn läge strömmen av bara några mikro ampere. Om vi inte bryr oss om energibesparingar eller om vi måste göra något i koden under timeout-perioden, kan vi ta bort instruktionen SLEEP. I båda fallen kommer att tidsgränsen generera ett avbrott. I vårt exempel avbrottshanterare helt enkelt laddas kondensatorn, växlar mellan lamporna och klarnar sedan GPIF (GPIO avbrott flagga). Avfarten från avbrottshanterare återställer automatiskt GIE (allmänt avbrott aktivera) flaggan. Tja, är det det för episod 7 i "Kul med PIC församlingen". Håll ögonen öppna för ytterligare episoder.