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
An dem ADC ist eine ganze menge einzustellen. Lies dir das mal durch, kann ich dir nur raten. mfg robert
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!
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.
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.
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).
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?!
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
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 ;)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.