AD Problem 16F690
AD Problem 16F690
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
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
Re: AD Problem 16F690
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.
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.
Re: AD Problem 16F690
Ursäkta min okunnighet
Men hur menar du då?
Tack för det snabba svaret!
Men hur menar du då?
Tack för det snabba svaret!

Re: AD Problem 16F690
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.
Re: AD Problem 16F690
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.
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().
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;
}
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().
-
- EF Sponsor
- Inlägg: 544
- Blev medlem: 8 december 2006, 11:18:14
- Ort: Tågarp, Svalöv
Re: AD Problem 16F690
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
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
Re: AD Problem 16F690
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.
Re: AD Problem 16F690
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.
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.
Re: AD Problem 16F690
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?
Hålls matningsspänningen stabilt när dioden tänds?
Ska du bara ha av och på-värden kanske en komparator fungerar?
Re: AD Problem 16F690
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.
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.
Re: AD Problem 16F690
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?
Kolla sid 95 i manualen.
för jämförelsepsänning kolla 106.
Men du kanske ska PWM'a fläktarna?
Re: AD Problem 16F690
> 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 ?
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 ?
-
- EF Sponsor
- Inlägg: 544
- Blev medlem: 8 december 2006, 11:18:14
- Ort: Tågarp, Svalöv
Re: AD Problem 16F690
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.
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.
Re: AD Problem 16F690
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.