DOCH, wie willst du denn dann den anderen Zustand hinbekommen (1)????Zitat:
Deswegen müssen die Internen pull ups ja nicht an.
ich hab den code editiert, probiers doch nochmal.
Druckbare Version
DOCH, wie willst du denn dann den anderen Zustand hinbekommen (1)????Zitat:
Deswegen müssen die Internen pull ups ja nicht an.
ich hab den code editiert, probiers doch nochmal.
So jetzt hat es den Effekt, das es nur 3 mal piept, dann die Lampe aufleuchtet. Wenn ich den Taster drücke passiert wieder nichts.
hast du den ' vor PORTA.2=1 weggemacht?
ich hab ihn mittlerweile wegeditiert
Also so funktioniert das alles mal garnicht.
Den Pullupwiederstand hab ich erstmal wieder rausgenommen, denn das brachte garnichts.
Ich hab einfach mal den Taster mit dem Minimalcode:
Do
If PINA.2 = 0 Then
PORTA.0 = 1
End if
Loop
angesteuert. Das klappt so alles super. Taster wird gedrückt, lampe leuchtet.
??? ohne pullup???
ok, vlt liegts an den goto- befehlen, mit denen kenn ich mich noch nicht so gut aus.
Code:$regfile = "m16def.dat"
$crystal = 16000000
Config Porta.0 = Output
Config Portd.7 = Output
Config Pina.2 = Input
Porta.2 = 1
Dim Zeit As Byte
Portd.7 = 1
Waitms 300
Portd.7 = 0
Waitms 300
Portd.7 = 1
Waitms 300
Portd.7 = 0
Do
Zeit=0
Porta.0 = 1
If Pina.2 = 0 Then
Porta.0 = 0 ' könnte man auch noch in die While-Schleife schieben, dann braucht man die if-schleife nicht mehr
While Pina.2=0
Zeit = Zeit + 1
If Zeit = 10 Then
Porta.0 = 1
Portd.7 = 1
End If
If Zeit = 15 Then
Porta.0 = 1
Portd.7 = 1
Zeit = 0
End If
Waitms 3000
Porta.0 = 0
Portd.7 = 0
Wend
End If
Loop
Jo ohne Pull Ups gehts schonmal halbwegs. Hab es jetzt nochmal etwas umgestellt:
Jetzt tut sich nur das Problem auf das mein timer nicht mehr will. Wenn ich allerdings Zeit = 5 setze funktioniert es. Nur mit dem hochzählen möchte es noch nicht so ganz.Code:$regfile = "m16def.dat"
$crystal = 16000000
Config Porta.0 = Output
Config Portd.7 = Output
Config Pina.2 = Input
Dim Zeit As Byte
Dim A As Byte
Dim Main2 As Long
Dim Main1 As Long
Dim Main3 As Long
Main1:
Do
Portd.7 = 1
Waitms 300
Portd.7 = 0
Waitms 300
Portd.7 = 1
Waitms 300
Portd.7 = 0
Goto Main2
Loop
Main2:
Do
If Pina.2 = 0 Then Goto Main3
Loop
Main3:
Do
Waitms 100
Zeit = Zeit + 1
If Zeit = 5 Then
Porta.0 = 1
Waitms 3000
Porta.0 = 0
End If
Goto Main2
Loop
End
Edit: quark, bin etwas daneben.Zitat:
Nur mit dem hochzählen möchte es noch nicht so ganz.
du arbeitest ja erst Main1 ab, dann kommt Main2 und dann Main3. dann immer abwechselnd Main2 und Main3. in Main3 incrementierst du Zeit (Zeit+1) nach 100ms, dann kommt wieder Main2 und wieder Main3.
da wird nirgends mit nem "IF Zeit = 5 Then Zeit =0" Zeit zurückgesetzt.
auserdem ist Zeit nirgends ein Wert zugewiesen. du solltest in Main1 "Zeit=0" schreiben.
Die meisten Do-Loops kannst du dir auch spaaren, da das Programm da nie hinkommt (davor wird mit Goto gesprungen)
Code:$regfile = "m16def.dat"
$crystal = 16000000
Config Porta.0 = Output
Config Portd.7 = Output
Config Pina.2 = Input
Dim Zeit As Byte
Dim A As Byte
Dim Main2 As Long
Dim Main1 As Long
Dim Main3 As Long
Main1:
Zeit=0
Portd.7 = 1
Waitms 300
Portd.7 = 0
Waitms 300
Portd.7 = 1
Waitms 300
Portd.7 = 0
Goto Main2
Main2:
Do
If Pina.2 = 0 Then
Goto Main3
Else
Zeit=0
End if
Loop
Main3:
Do
Waitms 100
Zeit = Zeit + 1
If Zeit = 5 Then
Porta.0 = 1
Waitms 3000
Porta.0 = 0
End If
Waitms 3000
Goto Main2
Wie würde sich das Problem denn jetzt lösen lassen ?
hrmpf, ich hab heute schon zuviel gedacht /-)
ich hab nochmal was editiert, wenn das nicht geht, bin ich mit meinem Latein am Ende.
Gibt fehler weil Loop fehlt.