Problem med Analog in An0 samt AN1

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
mr_fatise
Inlägg: 93
Blev medlem: 22 september 2004, 03:24:49

Problem med Analog in An0 samt AN1

Inlägg av mr_fatise »

Hallå!

Sitter här och skriver en liten kod till ett projekt jag håller på med! I projektet ska jag använda två analoga ingångar, är det tänkt!

Strukturen just nu är att köra dessa ingångar vid intrrupt (ANO och AN1), AN0 körs först, värdes räknas om till hundra, tio och ental.

Därefter körs AN1, värdes räknas även det om till hundra, tio och ental.
Timer1 startas sen om!

Värdena skrivs hela tiden ut på en display!

Problemet är att när en av ingångarna börjar gå mot min eller max så drar den även med det andra värdet. EX; AN1 ställs på 2,5V och visar 128 på displayen, drar jag sen ner AN0 till 0V så följer AN1 med och ger vissar kanske 60 istället. Samma tvärt om, och även när man närmar sig 5V.

Beräkningarna är helt skilda från varandra, delar inte på något register eller någon anna rutin!

Nån som har en idee, eller vart med om liknande? De analoga spänningarna ligget stabilt hela tiden!
Säkert skit bakomtangentbordet, men nu kan jag inte hitta exakt vart skitet sitter!
Användarvisningsbild
Icecap
Inlägg: 26612
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag har en idé iaf: ange vilken processor det rör sig om och kanske hur trigningen och avläsningen ser ut i mjukvara, det brukar hjälpa på svarsfrekvensen ATT sådant anges.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Eftersom det totalt saknas info om vad du gör, så kan det bara bli en gissning.
Acquisition time.
mr_fatise
Inlägg: 93
Blev medlem: 22 september 2004, 03:24:49

Inlägg av mr_fatise »

>Jag har en idé iaf: ange vilken processor det rör sig ...

Hmm, dåligt av mig! Försökte beskriva problemet så nära som möjligt men glömde de viktigaste! Sorry boys!

>Eftersom det totalt saknas info om vad du gör, så kan det bara bli en gissning.

Lite allmänlabb ska man nog kalla det. Totalt sätt så försöker jag få till en enkel P regulator, efter mottot "Trail and Error", med "Step by step"! Två analoga in och en PWM ut! och min ELFA TN display :D

Lite mer info!

Pic16F877A (gammal, javisst! även den från Elfa!) :D


>Acquisition time.

Tackar, inte helt omöjligt! SKa kika i databladet. Eftersom att beräkningen av hundra, tio och ental kommer direkt efter AN0, och sedan körs AN1, vid låga värden så blir de ju inte så många instruktioner mellan! Ska räkna o läsa på lite!

Postar upp en kod snutt senare, ska snygga till kommentarerna bara så fler än jag förstår!

Tackar så länge!
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Eftersom att beräkningen av hundra, tio och ental kommer direkt efter AN0,

Du kan byta ADC-kanal direkt efter avläsningen av AN0 (innan beräkningen
av 100/10/1 tal) så spar du en del tid senare.
mr_fatise
Inlägg: 93
Blev medlem: 22 september 2004, 03:24:49

Inlägg av mr_fatise »

Hmm, Acquisition time var ju rätt så intressant!

Räknade ut att den kunde variera i mitt fall från 10,58us, till 19,72us.
RS= 10kohm
Vdd= 5V ger RSS, ca 7kohm
Max.temp= 50C

Slår man om dessa tider i cykler, så blir de ju!
F*t1=42,32 Cykler
F*t2=78,88 Cykler

Som det ser ut nu så är de minsta möjliga 21 instruktioner mellan de båda AD körningarna, vilket borde ta F^-1*Cykler=5,25us

Känns som 78,88 instruktioner är väldigt mycke, men de kanske stämmer! Får börja med det!

Däremot är det en mening som jag inte lyckas tolka!
The source impedance (RS) and the internal sampling switch (RSS) impedance
directly affect the time required to charge the capacitor CHOLD (Ref. PICmicro MID-RANGE MCU FAMILY 21.4)
Som jag förståt det är "RS" den impedans, jag har på ingången, kopplar jag ingången direkt till 5Volt borde impedansen bli noll, eller hur?
Kan jag då direkt efter den första AD körningen, lägga över omvandlaren till en ledig analogingång som jag kopplar till 5Volt och får därmed en snabbare uppladdning för nästa körning?

EDIT:
>Du kan byta ADC-kanal direkt efter avläsningen av AN0 (innan beräkningen
av 100/10/1 tal) så spar du en del tid senare.

Nu känns de nästan som att du är inne lite på samma spår, angående de sista i mitt senaste inlägg! Eller missförstod jag?
Användarvisningsbild
Henrik
Inlägg: 661
Blev medlem: 26 maj 2003, 23:39:14
Ort: Göteborg
Kontakt:

Inlägg av Henrik »

Du har sett ljuset :)
(sen sket det sig när du säger att impedansen på din 5V-källa blir noll :wink: men visst, den blir låg iallafall)

En identisk tråd gick för några dagar sedan.
http://elektronikforumet.com/forum/view ... highlight=
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> till en ledig analogingång som jag kopplar till 5Volt och får därmed en snabbare uppladdning för nästa körning?

Hur vet du att det är just *5* volt som du ska "mäta" nästa gång ?
Annars har du ingen fördel med att ladda ADC-kondingen till just 5 volt...
mr_fatise
Inlägg: 93
Blev medlem: 22 september 2004, 03:24:49

Inlägg av mr_fatise »

>Hur vet du att det är just *5* volt som du ska "mäta" nästa gång ?

Kände att jag bet mig själv lite i svansen! Nu är jag helt med på resonemanget,

Lägga över till till den andra ingången direkt för att öka tiden för ADC-kondingen!

>Du har sett ljuset
E man som mig vass på o avrunda, så e Låg=0 :D

Nu känns de som man fått lite kött på benen angående detta, har ändrat så man slår om till den andra ingången direkt efter körning, funkar inte detta så blir det till att bygga om koden så de blir fler instruktioner mellan varje körning! Ska även ändra om kopplingen lite så impedansen blir så låg som möjligt på de ingångar som används!

Återkommer med resultat!
mr_fatise
Inlägg: 93
Blev medlem: 22 september 2004, 03:24:49

Inlägg av mr_fatise »

Kanske e dax för en update....

>Hmm, Acquisition time var ju rätt så intressant!

Stämmde rätt bra, sätta nästa "ingång" direkt efter körning gjorde susen, nu ligger värdet helt stabilt!
Och allt funkar! Nästan så man blir rädd!
Bild

Nu blev de idee torka däremot vad man ska hitta på här näst, har plöjt igenom de flesta funktionerna nu känns de som!

Nån som har ett labbtips eller behöver assembler kod till något speciellt? Känns som man har brist på nåt o göra!

EDIT: Smiter även in med en liten fråga: OM jag har ett binärt värde på ex PortA, finns det något kommande för att kopiera det till ett annat register? Just nu kör jag med att dra av 1binärt och sen öka två register med 1vardera och fortsätta så tills de blir 0, känns inte så optimalt!
bos
Inlägg: 2306
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

>OM jag har ett binärt värde på ex PortA, finns det något kommande för att kopiera det till ett annat register?

Jag missförstår antagligen frågan, men för att kopiera PORTA till annat ställe så är det bara att göra såhär:

Kod: Markera allt

movfw PORTA
movwf ANNAT_REGISTER
mr_fatise
Inlägg: 93
Blev medlem: 22 september 2004, 03:24:49

Inlägg av mr_fatise »

>Jag missförstår antagligen frågan, men för att kopiera PORTA till annat ställe så är det bara att göra såhär:

Problemet är ju då att jag tömmer Porta och inte kan läsa det igen!
Kanske va dåligt att ta PortA som exempel eftersom de kan va en ingång.

Exempel...

Kod: Markera allt


movfw Register1            ;Flyttar Register1 till W
movwf Register2            ;Flyttar W till Register2 
Problemet blir att jag vill ha kvar värdet i Register1 och få en kopia av de i Register2, med ovanstående kod så blir Register1 tomt!
mr_fatise
Inlägg: 93
Blev medlem: 22 september 2004, 03:24:49

Inlägg av mr_fatise »

Så då har jag löst mitt problem aldeles själv! Står om man bara läser databladet!
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> med ovanstående kod så blir Register1 tomt!

Vad är "tomt" ? Vad innehåller ett "tomt" register ?

> Så då har jag löst mitt problem aldeles själv!

Vilket "problem" ? Och vad är det du har löst "själv" ?
mr_fatise
Inlägg: 93
Blev medlem: 22 september 2004, 03:24:49

Inlägg av mr_fatise »

>Vad är "tomt" ? Vad innehåller ett "tomt" register ?

=Min definition av h'00', Ex. Clrf,F ---> Töm,F (F blir tomt)

>Vilket "problem" ? Och vad är det du har löst "själv" ?

Kod: Markera allt

;VI antar att Reg1 är D'8'
movfw   Reg1             ;--->W=D'8' Reg1=D '0'
movwf   Reg2             ;--->W=D'0' Reg2=D'8'
Problemet var, kort förklarat min tolkning av "move F to W" i "movfw" att man "flyttar" något från en plats, alltså försvinner det man har i F till W. (Vilket ger Reg1=D'0' i det här fallet!)

Men att det i själva verket ligger till så här

Kod: Markera allt

;VI antar att Reg1 är D'8'
movfw   Reg1             ;--->W=D'8' Reg1="D '8'"
movwf   Reg2             ;--->W="D'8'" Reg2=D'8'
Skriv svar