PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AD-Wandler Phänomen



Lincolnmhkn
31.01.2005, 19:36
Moin!

Habe ein Problem bei dem ich nicht weiterkomme. Habe ein Programm geschrieben, mit dem der 8-Bit Wert der am AD-Port anliegenden Spannung auf ein LCD-Disply ausgegeben wird. Aref und AVCC sind an 5V angeschlossen. Das funktioniert auch soweit ganz gut, nur die 8-Bit Werte sind komisch:
U [V] AD-Wert
0,283V 57
0,581V 119
0,895V 183
1,201V 246
1,471V 46
1,765V 106
2,102V 175
2,354V 228
2,749V 53
3,013V 107
3,31V 170
3,71V 252

Wie kann das sein, daß die Werte immer wieder bei 0 zu starten scheinen? Wird momentan nur mit der internen Spannungsreferenz gemessen, bzw. muss ich die externe im Programm aktivieren?

Danke und Gruß, Martin

PicNick
31.01.2005, 20:07
An dem ADC ist eine ganze menge einzustellen. Lies dir das mal durch, kann ich dir nur raten. mfg robert

harryup
31.01.2005, 21:22
hi,
sieht verdächtig danach aus, als ob du den adc in eine byte-variable einliest.
der adc liefert von haus aus aber 'nen word-wert, zwar nur max. 1023, aber bei einlesen in byte säbelt alles über 255 hirn- und gnadenlos wech.
der adc löst halt nunmal 10bit auf.

probier mal:
dim wert as word
wert = getadc(nummer)
print (oder) lcd wert

grüssens, harry

Lincolnmhkn
01.02.2005, 18:48
Genau das war das Problem! Jetzt funktionierts!
Vielen Dank!

Marco78
10.03.2005, 23:25
Mein Problem ist ähnlich aber bezieht sich auf die Lösung von harryup deshlab schreib ich es mal hier mit rein.

Ich kann 'Word' nicht aufs LCD ausgeben. (Integer auch nicht, größeres habe ich noch nicht probiert)

BASCOM meldet dann:

Error: 61 Line: xy Label not found [_PRINTWORD ], in blablabla

Los geht es mit Line xy. Es ist die Zeile nach der letzten Zeile. Also schon da ja schonmal ein Befehl zu fehlen, oder?
Wenn ich die Variable als Byte deklariere geht es (so wie oben immer bis 255 und dann mit 0 weiter bis Byte wieder voll ist) ohne Fehlermeldung.

Kann mir jemand sagen was ich da falsch gemacht habe?

Um die Frage noch zu erweitern: Für was stehen Single und Free beim ADC?
Außer Runningmode konnte ich aus der Hilfe nichts weiter entnehmen.

PicNick
11.03.2005, 09:41
SO ein Bascom is ja auch nur ein Mensch.
Wenn der einen Label nicht findet, sucht er in der ganzen Source, und dann steht er halt ganz hinten und weint dort.

Du weißt ja, daß du solche Felder mit STR(nn) ausgeben solltest ?

Single heißt, einzelne ADC-Abfragen
Free fragt er autom. permanent ab.

Marco78
11.03.2005, 10:32
Ich hab's jetzt mal so probiert:



$regfile = "at26def.dat"
$crystal = 6000000
$lib "mcsbyte.lbx"
Config Adc = Single , Prescaler = Auto

Enable Interrupts
Dim Ldr As Word

Start Adc

Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.4 , Rs = Porta.5
Config Lcd = 20 * 4
Cls
Wait 1
Lcd " * Test * "
Wait 1

Cls

_printword:

Ldr = Getadc(6)
Lcd "adc " ; Str(ldr)

Goto _printword
End


Und auf dem LCD erscheint erst * Test *, dann ganz viele adc aber ohne Zahl auf den LCD und dann wird anscheind ein Reset ausgeführt.

Bei adc 0 free passiert nichts weiter nach * Test * und cls. Das LCD zeigt nur den Cursor

Im Simulator hängt sich das Programm in der Schleife nach ein paar Durchläufen bei LCD "adc " ; Str(ldr) auf

Mit Byte ging es ohne Probleme, außer halt das er nach 255 wieder bei 0 angefangen hat (is ja auch logisch).

Marco78
11.03.2005, 13:38
Oder anders ausgedrückt, warum braucht Word ein Label und Byte nicht?
Und was darf/muss da im Label stehen und wann wird es angesprungen?
Ich habe jetzt schon einiges ausprobiert aber keine Lösung gefunden.

PS: den Artikel (http://www.cwnet.de/html/modules.php?op=modload&name=News&file=article&sid=10&mode=thread&order=0&thold=0) von Clemens Wagner habe ich schon gestern gelesen.
Ich kann mir aber nicht vorstellen das dass Problem ist das er die Werte über RS232 ausgibt?!

uwe2
11.03.2005, 17:08
Hi,
na wo du dich überall rumtreibst. O:)
Der Fehler wird von der mcsbyte.lbx verursacht. Die brauchst du hier aber nicht.
Las die mal weg und nutze ein anderes Label als _printword.
So funktionierts auf dem M8:
$regfile = "m8def.dat"
$crystal = 6000000
'$lib "mcsbyte.lbx"
Config Adc = Single , Prescaler = Auto

Enable Interrupts
Dim Ldr As Word

Start Adc

Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portc.2 , Rs = Portc.4
Config Lcd = 16 * 4
Cls
Wait 1
Lcd " * Test * "
Wait 1
Cls

Zeigs_an:
Ldr = Getadc(0)
Lcd "adc " ; Str(ldr)
Wait 1
Cls
Goto Zeigs_an

End

Die Wandleroptionen hat ja PicNick schon erklärt. Mit Free läuft der AD-Wandler ständig und Single startet erst bei der Abfrage eine AD-Wandlung (dauert etwas länger, spart aber Strom).

Gruß
Uwe

Marco78
11.03.2005, 17:15
Ach, auch hier :D

Du kannst die ja vorstellen, das dass nur ein Ausschnitt des Codes ist. RC5 usw ist da auch schon mit drin. (Verursacht aber nicht den Fehler, hatte ich alles schon auf ' )

Das Label _printword wollte BASCOM ja nur haben.

Also werd ich wohl Free nehmen für die Anwendung.

Zur Not kann ich dich ja anmailen ;)