-
Warum fragst du dann auf "<130" ab?
Wenn kein Taster gedrückt ist, soll sich doch gar nichts ändern, oder?
Im Moment wird er mit etwa 50Hz runterzählen, wenn kein Taster gedrückt ist. Dann sind alle LEDs nur schwach an.
Ich würde das dann so machen:
Code:
$regfile = "m32def.dat"
$crystal = 16000000
Config Adc = Single , Prescaler = Auto
Config Portc = Output
Portc = 30 'LED 1 ist an PORTC=00011110
Start Adc
Dim I As Byte
Dim X As Word
X = 1
I = 1
Do
X = Getadc(7)
If X > 0 Then
If X < 130 Then 'Taster für runter gedrückt
I = I - 1
If I = 255 Then I = 4 'dann hat es einen Überlauf gegeben, I ist Byte, also 0-255
Else 'Taster für rauf gedrückt
I = I + 1
If I = 6 Then I = 0
End If
Portc = 31 'Alle LEDs aus
Portc.i = 0 'LED Nr. i an
End If
Waitms 20 'das ganze etwa 50 mal pro Sekunde
Loop
End
Gruß
Rolf
-
hallo rolf,
auch dein code funzt genau wie die andern nicht :-(
vielleicht ist meine platine (oder der atmega) kaputt?!?!
könnte vielleicht jemand freundlicherweise das prog mal mit seinem rn-control ausprobieren??
mfg
chris
-
Was passiert denn jetzt?
Ist die erste LED an, wenn kein Taster gedrückt ist?
Und wenn du einen Taster drückst, bleibt danach die LED an?
Erklär mal etwas genauer, was nicht geht.
Gruß
Rolf
-
am anfang, nach anlegen der spannung leuchtet led1.
wenn kein taster gedrückt ist, ist das ganze wie ein lauflicht!! wahnsinnig schnell, könnte vielleicht 50hz sein (wegen waitms 20??).
wenn man eine taste drückt, ändert sich überhauptnichts!!
habe jetzt auch schon den atmega32 gegen einen anderen atmega32 ausgetauscht, ohne erfolg!! :-(
-
Bist du dir ganz sicher, dass immer x=0 ist, wenn kein Taster gedrückt ist? Das Programm sollte bei X=0 nicht in den Bereich laufen, wo die Ausgänge geändert werden. Ist X aber >0, dann wird der erste Teil der IF-Abfrage dauernd durchlaufen und du bekommst ein Lauflicht.
Hast du vielleicht noch eine LED, die du an PORTC.5 klemmen kannst?
Die könnte man dann benutzen um anzuzeigen, dass tatsächlich x=0 ist.
Oder du gibst den Wert von X über Print an den PC, wenn du eine Verbindung hast. Oder auf ein Display.
Im Moment denke ich jedenfalls, ist der Wert von X das Problem.
Gruß
Rolf
-
Um das Mysterium zu lüften:
Lt. RnControl Test Programm ist die korrekte Tastenabfrage folgendermassen:
Code:
Start Adc
Ws = Getadc(7)
If Ws < 1010 Then
Select Case Ws
Case 410 To 450 'TASTE 1 gedrückt
Case 340 To 380 'TASTE 2 gedrückt
Case 265 To 305 'TASTE 3 gedrückt
Case 180 To 220 'TASTE 4 gedrückt
Case 100 To 130 'TASTE 5 gedrückt
End Select
End If
Also ist KEINE Taste ist offenbar >= 1010
ANderes Problem:
Code:
If X < 130 Then
I = I - 1
Waitms 20
If I = 1 Then ....
Elseif I > 5 Then ....
Beim Runterzählen macht man üblicherweise
Elseif I < 1 Then ....
Die Zahl kann ja nur kleiner werden und nicht grösser
Noch was :
bei I > 5 oder < 1 setzt du immer I=1
da du aber sofort +1 oder -1 rechnest, kommt also entweder 2 oder 0 raus, die "1" kommt NIE
-
kann mir den niemand helfen??
ich habe schon oft gelesen, wie ein paar leute die geschwindigkeit stufenweise mit zwei tastern geregelt haben! wie funktioniert das?? kann sich bitte jemand melden??
das müsste doch das gleiche sein, oder???
mfg
chris