Bilbatteri laddare med PIC12F683 (4 / 8 steg)
Steg 4: Kort intro om PIC och dess ADC modul
Ta en titt på Blockdiagram för att ADC. Den visar exakt vad som beskrivs senare med registren, men kanske lite lättare att förstå. De fyra ingångarna är PICs stiften, CS väljer en som kommer att anslutas till ADC ingång. En av dem kan också användas som referens spänning, vi släckte denna funktion genom att säga VCFG = 0. Vi aktivera modulen med ADON lite på undersidan för att ADC och släppa en omvandling genom att växla lite GO/nDONE. När konverteringen är klar, förlägger ADC resultatet i ADRESH:ADRESL register så instruerat vid ADFM lite. Vi justerade resultatet i de längst till höger tiostycke-fälten.
För att mäta spänningen över batteriet, jag var tvungen att konfigurera PIC12F683 inre 10 bitars analog-digital-omvandlare. Inre moduler kan konfigureras via deras konfiguration register, i detta fall ADCON0 och ANSEL. Det finns två mer, som innehåller 10 bitars konvertering resultatet: ADRESH:ADRESL.
Innan hopp till konfigurationen, kontrollera att det finns inget sätt för dig att skada PIC genom att dess ingångar spänningar större än 5V. För att kunna mäta batterispänningen 12 v +, har jag till tillägga en spänningsavdelare med 1:4 dividera faktor. Detta innebär, att 14V batterispänningen PIC från 0V – endast ser en 0V – 3.5V omfång-som är ett säkert sätt under 5V. Jag använde en 15Kohm och 5Kohm resistor för spänning avdelare. Låt oss kolla in konfigurationen register.
ADCON0 registrera konfigurationer
Den 7: e biten av ADCON0 register är ADFM, som definierar sättet dessa 10 bitar är ordna i två, åtta-bitars ADC resultatet registreras. Jag fick som används med justera till höger, så jag kommer att plocka som: ADCON0. ADFM = 1.
Den 6: e biten är VCFG, som har att göra med positiv spänning referens indata för interna analog-till-digital konvertering modul. Ingående spänning vi vill mäta nu sträcker sig från 0V till 5V, detta innebär att vi kan välja ingång marken och input drivatillförselen av 5V att agera som vår lägre och högre spänning referens. Att veta detta, måste vi ställa in ADCON0. VCFG lite logik "0".
BITS 5 och 4 genomförs inte ställde jag nollor i dem för enkelhet.
BITS 3 och 2 i detta register Välj kanal (ingångsstift) på spänningsnivån kommer att mätas. I slutet av omvandlingen, kommer att innehållet i ADC resultat registret hålla ett tal som motsvarar spänningsnivån för vald kanal. Jag behöver inte ändra inmatningskanal i detta projekt, så att urvalet görs på hårdvara initiera ADCON0. CHS1:CHS0 = 00.
Bit 1, heter GO/nDONE rensas vid start, jag sätta den i tillståndet åtgärd till en, och vänta på att återställa automatiskt. Denna bit är inställd av hårdvara, och kan användas för att kontrollera om en ny annons mätning är tillgängliga eller inte. Låt oss sätta den till 0.
Bit 0 slår ADC modulen på och av. Naturligtvis måste vi slå på den, så vi måste sätta den till 1, ADCON0. ADON = 1.
Detta innebär, att den hexadecimala nummer 0b10000001 = 0x81 måste sättas i ADCON0 för modulen att arbeta den vägen förväntade.
ANSEL register konfiguration
Detta register konfigurerar förvärv klockan och definierar vilka analoga kanaler används för att mäta analog spänning och som kommer att vara avstängd för att använda respektive stift som digitala in-/ utgångar.
Den 7: e lite implementeras inte, jag sätta den till 0 för enkelhet.
De kommande tre Välj klocka Källa: Jag brukar välja FRC som standard och bara ändra det om något inte fungerar: ANSEL. ADCS = 111.
Den lägre Mumsa av registret påverkar analoga stiften, de som du behöver som insatsvaror eller utgångar måste vara konfigurerade. Jag använde endast analog kanal 0 denna gång, så jag måste lägga en '1' på den positionen. ANSEL. ANS = 0001.
Med dessa kända, ANSEL register har till vara sätta till 0b01110001 = 0x71.
Kort sagt, är detta hur en bör fortsätta konfigurera modulen ADC av denna processor. Det finns bara två register att fylla, efter omvandlingen resultat kan tas från ADRESH:ADRESL med jämna mellanrum.