Problem med Analog in An0 samt AN1
Problem med Analog in An0 samt AN1
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!
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!
>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
Lite mer info!
Pic16F877A (gammal, javisst! även den från Elfa!)
>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!
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

Lite mer info!
Pic16F877A (gammal, javisst! även den från Elfa!)

>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!
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!
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?
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!
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?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)
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?
Du har sett ljuset
(sen sket det sig när du säger att impedansen på din 5V-källa blir noll
men visst, den blir låg iallafall)
En identisk tråd gick för några dagar sedan.
http://elektronikforumet.com/forum/view ... highlight=

(sen sket det sig när du säger att impedansen på din 5V-källa blir noll

En identisk tråd gick för några dagar sedan.
http://elektronikforumet.com/forum/view ... highlight=
>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
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!
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

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!
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!

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!
>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!

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!
>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:
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
>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...
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!
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
>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" ?
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
=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'
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'