AD Problem 16F690

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
saleka
Inlägg: 16
Blev medlem: 24 juli 2010, 17:50:32

AD Problem 16F690

Inlägg av saleka »

Hej

Min fråga är om AD ingångarna kan påverkas av att µC sänker "stor" ström (20mA) på en annan pinne?

Jag använder en 16f690 och

Läser av en LM335 som är kopplad till AN10 med 60sek mellanrum.
Jag gör ett logiskt test och antingen tänder eller släcker en diod som är kopplad på RC6.
Skriver ut värdet till UART.
Väntar och börjar om

Problemet är att jag får mycket varierande värden, varanangång får jag 20+/-2 varannan gång får jag 40+/-4.
Mäter jag med multimeter vid LM335 så får jag stabila värden.

Jag får även stabila sifror på UART om jag tar bort den kod som tänder/släcker dioden.

Kan det vara så att dioden drar en så stor ström att det påverkar AD?
Lr har jag pajat µC?

Har ni gurus på forumet några förslag på lösning?


Mvh Samuel
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: AD Problem 16F690

Inlägg av Micke_s »

Det kan mycket väl påverka, PIC16F har ju inte separat matning för ADC:n.
Det du skulle kunna göra är att lågpassfiltrera lite i mjukvaran.


Enklast är det göra filtrerna en multipel av 2: 2,4,8,16 osv. då kan du bitshifta ner värdet istället för använda division.
saleka
Inlägg: 16
Blev medlem: 24 juli 2010, 17:50:32

Re: AD Problem 16F690

Inlägg av saleka »

Ursäkta min okunnighet

Men hur menar du då?

Tack för det snabba svaret! :)
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: AD Problem 16F690

Inlägg av vfr »

Jag tror att Micke menar ett lågpassfilter av typ medelvärde på flera mätvärden där du delar summan med antalet mätvärden. Divisioner är inget kul, utom just med multipler av 2. Då kan man använda bitshift för att dividera.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: AD Problem 16F690

Inlägg av Micke_s »

typ såhär i c kod, ADC har 10 bitar så vi kan addrera max 64 värden

Förutsättning här är att adc_read retunerar ett nytt sample varje gång den anropas.

Kod: Markera allt

//filtrerar på 16 värden
//(2^4=16)
uint16_t read_filtered(){
    uint16_t filtered=0;
    uint8_t i;

    for(i=0;i<16;i++){
        filtered += adc_read();
    }
    filtered >>= 4; //(2^4 = 16);

    return filtered;
}
Eftersom temperaturen ändras långsamt så skulle du kunna utan problem använda 64 adc värden.
För få fler än 64 adc värden så måste man använda uint32_t på filtered istället. Men det tar lite mer kod att köra 32bitar och jag tror inte det är nödvändigt. Alternativ ha en yttre loop som anropar read_filtered istället för adc_read().
barbarossa
EF Sponsor
Inlägg: 544
Blev medlem: 8 december 2006, 11:18:14
Ort: Tågarp, Svalöv

Re: AD Problem 16F690

Inlägg av barbarossa »

Det verkar vara systematiskt fel iom "varannan".

Om det är strömmen till dioden som är problemet så kan följande förslag till lösning funka (i ordning om enklast först).

1/ sänk lasten till 1mA
2/ transistor till att driva dioden
3/ använd annan referens än drivspänningen till ADC
4/ allt av ovanstående
saleka
Inlägg: 16
Blev medlem: 24 juli 2010, 17:50:32

Re: AD Problem 16F690

Inlägg av saleka »

Stort tack!!

Ska testa ovanstående i kväll.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: AD Problem 16F690

Inlägg av vfr »

En transitor till att driva lysdioden från en helt annan spänningskälla, låter som det enklaste sättet att testa. Om du inte kan vara helt utan LED:en under testet.
saleka
Inlägg: 16
Blev medlem: 24 juli 2010, 17:50:32

Re: AD Problem 16F690

Inlägg av saleka »

Jo jag kan vara det under testet, men jag ska använda applikationen till att styra ett antal fläktar i ett rackskåp så det skulle kännas bra att hitta en lösning.
Dessutom vill man ju lära sig:)

Nästa steg är att kunna variera PWM singnalen på CCP1 som funktion av värdet från LM335.
*L.R*
Inlägg: 61
Blev medlem: 30 mars 2008, 13:39:15
Ort: Norra sthlm

Re: AD Problem 16F690

Inlägg av *L.R* »

Stabila värden om du har kvar koden och tar bort dioden?

Hålls matningsspänningen stabilt när dioden tänds?

Ska du bara ha av och på-värden kanske en komparator fungerar?
saleka
Inlägg: 16
Blev medlem: 24 juli 2010, 17:50:32

Re: AD Problem 16F690

Inlägg av saleka »

Det har jag inte testat men ska prova det oxå. Att ta bort dioden asså.

Jag driver hela systemet (med diod inte fläktar) med strömmen från USB kabeln. Den kanske är begränsande på nått sätt.
Kan det vara värt att testa med en kondensator mellan Vss och Vdd? toro jag har nån electrolyt konding ligger hemma.

Jag har tänkt att ha ett usb till ttl interface och ställa de olika tempstegen via ett terminal program. Därför vill jag använda µC.
*L.R*
Inlägg: 61
Blev medlem: 30 mars 2008, 13:39:15
Ort: Norra sthlm

Re: AD Problem 16F690

Inlägg av *L.R* »

Men uc'n har inbyggd komparator.

Kolla sid 95 i manualen.
för jämförelsepsänning kolla 106.

Men du kanske ska PWM'a fläktarna?
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: AD Problem 16F690

Inlägg av sodjan »

> Kan det vara värt att testa med en kondensator mellan Vss och Vdd?

Ja, det är alltid värt att testa. Dels en elektrolyt på säg 10-100 uF
beroende på vad som behövs för att ta hand om variationer i
strömförbrukningen (vilket du ju får när du tänder/slävker lysdioden).
Dels en 100nF keramiskt för att ta hand om högfrekventa störningar
på matningsspänningen. Standardåtgärder...

Varför kör du 20mA genom lysdioden ?
barbarossa
EF Sponsor
Inlägg: 544
Blev medlem: 8 december 2006, 11:18:14
Ort: Tågarp, Svalöv

Re: AD Problem 16F690

Inlägg av barbarossa »

USB 5V är dålig som spänningsreferens till ADC. Den duger i utvecklingsstadiet men den är omöjlig att kalibrera till en skarp produkt.

Fixa en riktig spänningsreferens om du vill behålla LM335, annars byt till en tempsensor med utsignal som är linjär mot drivspänningen.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: AD Problem 16F690

Inlägg av vfr »

1-wire tempsensorer (18x20) borde ju vara tämligen immuna mot drivspänningsvariationer med tanke på att den hela tiden ändrar nivå när komunikationen går. Sedan är det ju grymt smidigt att slippa klabba med A/D-omvandlare ö.h.t. Bara digitalt mätvärde rakt in. Det skulle jag tveklöst köra på. Som bonus så får man möjlighet att lägga en slinga med flera sensorer.
Skriv svar