Göra ADC beräkningar med PIC 12F675

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Göra ADC beräkningar med PIC 12F675

Inlägg av newbadboy »

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?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Göra ADC beräkningar med PIC12f675

Inlägg av sodjan »

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.
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av newbadboy »

matnings spänningen.. dvs 5v
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av sodjan »

OK. Då har du svaret på frågan.
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av newbadboy »

Gött. Då har jag ca 5 mv upplösning. Borde räcka men det visar sig när jag testat det i verkligheten
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av sodjan »

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 :
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.
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.
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...
H.O
Inlägg: 5919
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av H.O »

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:
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)
Så 1.024V finns inte med som alternativ för ADC'n men 2.048 ska fungera vilket ju skulle ge 2mV upplösning.

Datablad föresten, nästan 400 sidor för en liten 8-pinnars PIC - inte klokt vad mycket godsaker de klämmer in ;-)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av sodjan »

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).
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av newbadboy »

tack för erbjudandet men kör med 675 då jag har dem på "lager"
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av bearing »

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).
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av newbadboy »

@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?

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
        
  }

}
H.O
Inlägg: 5919
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av H.O »

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

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)
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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av sodjan »

För att undvika "fladder" i relät så borde du lägga till lite hysteres, t.ex :

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
       
  }
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...
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av newbadboy »

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
Bäckman
Inlägg: 32
Blev medlem: 1 oktober 2011, 10:56:43

Re: Göra ADC beräkningar med PIC 12F675

Inlägg av Bäckman »

350mV = 0.35V
vref = 5V

x = (0.35*1024)/vref = 71,68
Skriv svar