-
Hallo! Nun habe ich das programm etwas verändert und es geht immer noch nicht.
Code:
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portc.0 = Output
Dim Analogwert_0 As Byte
Analogwert_0 = Getadc(0)
Start Adc
Do
If Analogwert_0 > 125 Then
Portc.0 = 1
Else
Portc.0 = 0
End If
Loop
Stop Adc
End
ich kann das poti drehen wie ich will aber die led zeigt nichts an, bei compilieren ist auch kein erreo aufgetreten, es müsste doch eigentlich gehen
-
Hi,
pack das "Analogwert_0 = Getadc(0)" in die Do ... Loop schleife und lösch das "Stop ADC" aus der Schleife. Dann funktioniert es. Aber jetzt mal ganz ehrlich. In der Hilfe von Bascom steht das alles so schon drin.
Gruß Blaue Led
-
Nur so zum Verständnis:
Der Befehl "Analogwert_0=Getadc(0)" führt zu einer einzigen AD-Wandlung! Wenn sich danach die Spannung am Eingang ändert, bleibt die Variable Analogwert_0 so lange unverändert, bis der Controller das nächste mal den Getadc-Befehl ausführt.
Und genau deshalb muss dieser Befehl in die Do-Loop-Schleife, wie Blaue LED ja schon geschrieben hat.
Jetzt klarer?
-
OK. So weit habe ich nicht gedacht, ist im nachhinein ganz logisch, das der
Befehl in die Schleife muss. Jetzt gehts. DANKE
Wenn ich die Variable Analogwert_0 nicht als "Word" sondern als "Byte" deklariere passiert etwas komisches: wenn ich das poti drehe egal in welche richtung geht die LED mal AN mal AUS wieder AN und wieder AUS (beim drehen)
Vielen Dank!
-
Du liest einen Wert ein, der von 0 - 1023 geht. Das passt halt nicht mehr in ein Byte ( 0 - 255 ). Wenn Du nur 255 Werte haben willst, dann musst Du den Analog Wert explizit mit nur 8 Bit einlesen. Standardmäßig ist der 10 Bit.
Gruß Blaue Led