-
Wenn du nix angibst, wird die interne Referenz verwendet, deswegen kann nicht mehr als ca. 256 rauskommen !
probier einfach mal diese Zeile aus: [-o<
Code:
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Das nennt man ausserdem nicht 256 Bit, sondern 8 Bit !
Mit 8 Bit gibt es 256 möglichkeiten.
Der ADC kann aber 10 Bit was einen max. Wert von 1023 ergibt, wenn man aber nur eine Referenzspannung von 1,1V verwendet, ist das in etwa, je nach Genauigkeit, 256 bei angelegten 5V !
-
Wow, habs nochmal getestet jetzt gehts (muss mich voll verschrieben haben). Die Anzeige spring garnicht mehr sinnlos rum. Danke ;)
Mfg
Stefan
-
Hi, so, nun melde ich mich nochmal zu Wort ;-)
Also passt auf. Mein Sensor funktioniert soweit, nurhab ich wohl noch das gleiche Problem wie Lenox, dass meine Werte Springen, und auch über 256 hinausgehen. Eigendlich hab ich ja die Zeile so angegeben, wieso er das nicht macht ist mir eigendlich unklar. Ich werde es einfach nochmal aufspielen, vielleicht hab ich was falsch gemacht.
Nun habe ich aber noch ein anderes Problem.
Ich möchte, dass mir die Gradanzahl ausgegeben wird, d.h. ich benötige eine Kleine Rechnung in meinem Code, die er jedoch als falsch erkennt.
Als Fehlermeldung bekomm ich "Source variable does not match the target variable" das bezieht sich auf die Zeile: Grad = Sensor *(360 / 1024)
Schaut es euch einfach mal an
Code:
'Erster Test des Displays Wintek 27 * 4 von Pollin
'Besondere Lernleistung von Felix König
$regfile = "m168def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
'$hwstack = 32
'$framesize = 32
'$swstack = 32
'Die üblichen Definitionen bei Standardprogrammen auf Miniboard
Config Lcd = 40 * 4 'Bascom kennt keine Display mit 27 * 4 Zeichen,
'daher 40 * 4 verwenden
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , E2 = Portc.3 , Rs = Portd.3 , 'Rw = Portc.2
'man achte auf die Ergänzung E2
Dim ___lcdno As Byte ' Systemvariable der LCD-Bibliothek
___lcdno = 0 ' wählt den ersten Chip aus
Initlcd 'die beiden oberen Zeilen initialisieren
Cls 'die beiden oberen Zeilen löschen
___lcdno = 1 'auf Chip 2 schalten
Initlcd 'die beiden unteren Zeilen initialisieren
Cls 'die beiden unteren Zeilen löschen
___lcdno = 0 ' wählt die obere Zeile aus
Locate 1 , 1 ' schreibt in die erste Zeile an Position 1
Lcd " Besondere Lernleistung "; ' den Text in Anführungszeichen
Locate 2 , 1 ' schreibt in die zweite Zeile an Position 1
Lcd " von Felix Koenig 13 BGD"
Cursor Off ' unterdrückt den Cursor
___lcdno = 1 ' wählt die beiden unteren Zeilen aus
Locate 1 , 1
Lcd "Windrichtung : ";
Locate 2 , 1
Lcd "Grad : "
Cursor Off ' unterdrückt den Cursor
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Konfiguriert den AD Wandler
Start Adc 'Startet den AD Wandler
Config Pinc.2 = Input 'ADC 2 an Ctrl
Dim Sensor As Byte 'Deklariert "Sensor" als Byte
Dim Grad As Byte 'Deklariert die Gradvariable "Grad" als Byte
Do ' Beginnt die Abfrageschleife zur Werteerfassung
Sensor = Getadc(2) ' Der AD Wert wird am Pin C2 abgelesen und in die Veriable "Sensor" geschrieben
Grad = Sensor *(360 / 1024)
'Print "Sensor " ; Sensor
___lcdno = 1 'wählt die unteren 2 Zeilen aus
If Grad = 0 Then '
Locate 2 , 8
Lcd "0° / 360°"
Else
Locate 2 , 8
Lcd Grad ; "°"
End If
Waitms 500 '500 ms Wartezeit zwischen der Abfragewiederholung
Loop 'Ende der Abfrageschleife, Sprung zum Anfang der Schleife
End 'Programmende
Vieleicht könnt ihr mir ja noch so einen wunderbaren und hilfreichen tipp geben.
Viele Grüße Felix
-
Hi,
schau ma mal,
als erstes würde ich meinen, das Grad als Byte nicht ganz ausreichend dimensioniert ist, weil das dann nur 0 bis 255 geht !
Sensor ist auch nur ein Byte, beim ADC kommt aber ein Word raus, deswegen gehen deine Werte wohl nur bis 255 :-k
Ja, und Basom kann immer nur eine Aufgabe pro Zeile durchführen, Du musst die Formel aufteilen.
-
Jo, seh ich auch so, machs am besten so:
Dim Sensor As Integer
Dim Grad As Integer
Das mit der einen Aufgabe pro zeile wusste ich auch noch nicht!
-
Danke! Hat mir gut weitergeholfen :-) Jedoch springen die Werte immernoch sehr verrückt umher und halten sich nicht auf einem Niveau. Ich muss mal versuchen diese Sprünge mit einem Kondensator in den Griff zu bekommen.... Ich meld mich bald wieder
Gruß und guten Rutsch
-
Kannst du mal die Spannung messen, die beim Sensor raus kommt?
Wenn die ungenau ist, also schwankt, dann kanst du nur versuchen das über einen Kondensator zu lösen (würde ich als etwas unpraktisch bezeichnen). Wenn die Ausgangsspannung des Sensors nicht schwankt musst du mal schauen, ob AVCC stabil ist.
jon
-
So, also ich hab mal die Spannung meines Netzteils überprüft.
Das Computernetzteil ist soweit stabil. Ich vermute eher, dass das Signal des Senors schwankt. Leider sind diese Schwankungen mit bloßem Auge wohl nicht erkennbar, sonst hätte ich sie ja an der LED die Zwischengeschalten ist, gesehen. Ich werde demnächst mal mit einem Oszilloskop nachmessen. Ich erhoffe mir dass ich was finde ;-)
So, also ich melde mich später mit Oszilloskop wieder :-)
Gruß Felix
-
Lasse mal die LED raus.
Solche LEDs haben bei mir auch schon für Probleme gesorgt.
jon
-
Also ich denke nicht, dass eine LED so Schwankungen erzeugt.
Ich meine die LED's an dem Adapterboard. Ich habe sie mal ausgeschalten, aber da hat sich nichts verändert.
Wie gesagt, entweder verrät mir das Oszilloskop mehr, oder ich versuch dann nochmal einen anderen AD-Port
Gruß