Göra ADC beräkningar med PIC 12F675
Göra ADC beräkningar med PIC 12F675
Tja!
Jag ska läsa in en analog spänning som ligger mellan 0-760mV och spara det i en unsigned int. Vdd är referens.
Efter att en inläsning gjorts ska det vara en delay och en ny läsning ska göras. Det nya värdet ska läsas in och jämföras med det gamla.
Jag vill ha nogrannhet på ca 10mV, funkar det då att ha VDD som ref?
Jag ska läsa in en analog spänning som ligger mellan 0-760mV och spara det i en unsigned int. Vdd är referens.
Efter att en inläsning gjorts ska det vara en delay och en ny läsning ska göras. Det nya värdet ska läsas in och jämföras med det gamla.
Jag vill ha nogrannhet på ca 10mV, funkar det då att ha VDD som ref?
Re: Göra ADC beräkningar med PIC12f675
Vad är Vdd ?
(Alltså, jag vet vad "Vdd" är, men vilken spänning...
)
Sen så är det bara att räkna Vdd/1024 så har du upplösningen.
(Alltså, jag vet vad "Vdd" är, men vilken spänning...

Sen så är det bara att räkna Vdd/1024 så har du upplösningen.
Re: Göra ADC beräkningar med PIC 12F675
Gött. Då har jag ca 5 mv upplösning. Borde räcka men det visar sig när jag testat det i verkligheten
Re: Göra ADC beräkningar med PIC 12F675
Fick hem ett gäng 12F1840 från Microchip.
Det är en 8-pinnare som 12F675 men fullt modern.
http://www.microchip.com/wwwproducts/De ... e=en549758.
Bl.a har den en inbyggd spännings.ref som bl.a kan användas som Vref till ADC :
D.v.s att avläsningen av ADC'n blir direkt i "millivolt".
Sen att den har 32 MHz intern osc m.m m.m är ju bara trevligt.
EDIT:
Om du vill testa så kan jag skicka över en av dom.
Stöds av PICkit2, dock enbart från den fristående PICkit2-applikationen,
inte inifrån MPLAB. Maila vid intresse...
Det är en 8-pinnare som 12F675 men fullt modern.
http://www.microchip.com/wwwproducts/De ... e=en549758.
Bl.a har den en inbyggd spännings.ref som bl.a kan användas som Vref till ADC :
Om man väljer 1.024 V, och kör det som Vref till ADC, så får du 1.0 mV/steg jämt.The Fixed Voltage Reference, or FVR, is a stable voltage reference, independent of VDD,
with 1.024V, 2.048V or 4.096V selectable output levels. The output of the FVR can be
configured to supply a reference voltage to the following:
• ADC input channel
• ADC positive reference
• Comparator positive input
• Digital-to-Analog Converter (DAC)
• Capacitive Sensing (CPS) module
The FVR can be enabled by setting the FVREN bit of the FVRCON register.
D.v.s att avläsningen av ADC'n blir direkt i "millivolt".
Sen att den har 32 MHz intern osc m.m m.m är ju bara trevligt.
EDIT:
Om du vill testa så kan jag skicka över en av dom.
Stöds av PICkit2, dock enbart från den fristående PICkit2-applikationen,
inte inifrån MPLAB. Maila vid intresse...
Re: Göra ADC beräkningar med PIC 12F675
Notera dock att 1.024V är för lågt för VRef, jag har gått på den niten en gång... Om man har Vss som VRef- så är lägsta VRef+ 1.8V enligt databladet. Och så står det:
Datablad föresten, nästan 400 sidor för en liten 8-pinnars PIC - inte klokt vad mycket godsaker de klämmer in
Så 1.024V finns inte med som alternativ för ADC'n men 2.048 ska fungera vilket ju skulle ge 2mV upplösning.16.1.3 ADC VOLTAGE REFERENCE
The ADPREF bits of the ADCON1 register provides
control of the positive voltage reference. The positive
voltage reference can be:
• VREF+ pin
• VDD
• FVR 2.048V
• FVR 4.096V (Not available on LF devices)
Datablad föresten, nästan 400 sidor för en liten 8-pinnars PIC - inte klokt vad mycket godsaker de klämmer in

Re: Göra ADC beräkningar med PIC 12F675
Aha, OK... 
Det är i alla fall praktiskt med en inbyggd Vref som är oberoende av
Vdd (förrutom att Vdd så klart behöver vara högre än den valda Vref).

Det är i alla fall praktiskt med en inbyggd Vref som är oberoende av
Vdd (förrutom att Vdd så klart behöver vara högre än den valda Vref).
Re: Göra ADC beräkningar med PIC 12F675
tack för erbjudandet men kör med 675 då jag har dem på "lager"
Re: Göra ADC beräkningar med PIC 12F675
För att få högre noggranhet skulle du kunna sänka VDD (om det är möjligt med hänsyn till kretsen i övrigt).
Re: Göra ADC beräkningar med PIC 12F675
@bearing. om det behövs går det att sänka lite ja. tack
har nu knackat ihop ett första test program. Jag tar in adc värdet på pinne 4 som motsvarar an2. Om värdet är under 350mV vill jag tända en led annars ska den var släckt. Led'en sitter på gpio 4. I första hand har jag två frågor.
1 Har jag konfigurerat ansel och trisio rätt??
2 Jag har omvandlat 350mV till 15E i Hex form och jämfört rakt av kan man göra såhär eller är jag helt lost?
har nu knackat ihop ett första test program. Jag tar in adc värdet på pinne 4 som motsvarar an2. Om värdet är under 350mV vill jag tända en led annars ska den var släckt. Led'en sitter på gpio 4. I första hand har jag två frågor.
1 Har jag konfigurerat ansel och trisio rätt??
2 Jag har omvandlat 350mV till 15E i Hex form och jämfört rakt av kan man göra såhär eller är jag helt lost?
Kod: Markera allt
unsigned int adc_rd;
void main() {
ANSEL = 0xf; // Configure GPIO2 pin as analog
TRISIO=0x2F; // Set GPIO2 pin as input
while (1) {
adc_rd = ADC_Read(2); // get ADC value from 2nd channel
if (adc_rd < 0x15e) //if value < 350mV turn on Relay_out
RELAY_OUT=1;
else
RELAY_OUT=0; //if value > 350mV turn off Relay_out
}
}
Re: Göra ADC beräkningar med PIC 12F675
Din "TRIS-kod" sätter GPIO.4 till utgång, resten till ingångar så det verkar väl rimligt om du har pullup eller pulldown på de ingångar du inte använder. Det är inte så bra att lämna ingångar flytande (icke anslutna). Sätt de i så fall hellre till utgångar.
Din "ANSEL-kod" sätter AN0-AN3 till analoga ingångar samt ADC'ns klocka till Fosc/2. Om du bara vill ha AN2 som analog ingång och resten som digitala är ANSEL = 0x4 ett bättre alternativ - och då bortser jag från valet av klocka som huserar i de övre bitarna av ANSEL.
Så, om det var jag
Personligen brukar jag ange registervärden etc i binär form, jag tycker det blir mycket enklare att "se" varje bit för sig och jämföra med databladet då.
0x15E motsvarar mycket riktigt 350 men inte 350mV i det här fallet utan 350*Vref/1024 alltså ~1.709V.
Din "ANSEL-kod" sätter AN0-AN3 till analoga ingångar samt ADC'ns klocka till Fosc/2. Om du bara vill ha AN2 som analog ingång och resten som digitala är ANSEL = 0x4 ett bättre alternativ - och då bortser jag från valet av klocka som huserar i de övre bitarna av ANSEL.
Så, om det var jag
Kod: Markera allt
TRISIO = 0x4 ' Set GP2/AN2 as input, rest as outputs (except GP3/MCLR)
ANSEL = 0x4 ' Set AN2 as analog, rest as digital (don't forget CMCON)
0x15E motsvarar mycket riktigt 350 men inte 350mV i det här fallet utan 350*Vref/1024 alltså ~1.709V.
Re: Göra ADC beräkningar med PIC 12F675
För att undvika "fladder" i relät så borde du lägga till lite hysteres, t.ex :
D.v.s att det blir ett "glapp" på 350 +/- 5 där inget händer. Värderna från
ADC'n fladdrar normalt några bitar upp och ner om man inte bygger kopplingen
speciellt för att undvika det. Finns app nötter om det...
Kod: Markera allt
if (adc_rd < (0x15e - 5)) //if value < 350mV turn on Relay_out
RELAY_OUT=1;
else if (adc_rd > (0x15e + 5))
RELAY_OUT=0; //if value > 350mV turn off Relay_out
}
ADC'n fladdrar normalt några bitar upp och ner om man inte bygger kopplingen
speciellt för att undvika det. Finns app nötter om det...
Re: Göra ADC beräkningar med PIC 12F675
Ok. Fan vad gött med lite hjälp. Då ska jag prova labba med en riktig krets imorgon och se vad som mer kan tänkas strula.
Ang beräkningen då ska det alltså vara?? Där x fås i decimal, och sedan omvandlas till hex.
x = (350*1024)/vref
Som blir 11800 i hex? Mmm detta låter helt orimligt
Det låter inte alls rätt att jämföra adc_rd med 11800
Ang beräkningen då ska det alltså vara?? Där x fås i decimal, och sedan omvandlas till hex.
x = (350*1024)/vref
Som blir 11800 i hex? Mmm detta låter helt orimligt
Det låter inte alls rätt att jämföra adc_rd med 11800