An dem ADC ist eine ganze menge einzustellen. Lies dir das mal durch, kann ich dir nur raten. mfg robert
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
der kopf ist rund damit das denken seine richtung ändern kann...
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.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Ich hab's jetzt mal so probiert:
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.Code:$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
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 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.
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: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).Code:$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
Gruß
Uwe
Ach, auch hier
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
Lesezeichen