Hallo,
Lösch mal das "= 1" in der fraglichen Zeile.
MfG Peter(TOO)
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
und mit And statt AND
Ich weiss nicht ob Bascom casesensitive ist?
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Groß- und Kleinschreibung ist bei Bascom glaube ich ziemlich egal.
Was definitiv ein Problem zu sein scheint, sind die Klammern. Bascom meckert nämlich auch schon bei einer einfachen, unverschachtelten AND-Verknüpfung, wenn man sie in Klammern setzt. Da die Klammern ja aber aufgrund der Verschachtelung nötig wären, kann man das Problem lösen, indem man die beiden Verknüpfungen mit einem Hilfs-Bit nacheinander ausführen lässt:
Code:Dim Taste_old As Bit Dim Taste_new As Bit Dim X As Bit Dim Modus As Byte Do X = Taste_old Xor Taste_new X = X And Taste_new If X = 1 Then Incr Modus Loop
Dieser Code wird bei mir jedenfalls anstandslos kompiliert.
Und @ Bow-Hunter: Ganz einfach kann man einen Tastendruck erkennen, wenn man den Taster einen Interrupt auslösen lässt, indem der Taster einen Pegelwechsel am Interrupt-Eingangspin bewirkt. Dann braucht man die ganze "Merkerei" mit Taste_old und Taste_new nicht...
So Leute, das ist jetzt die Finale Version von mir. Jetzt funktioniert alles.
Bei Stromzufuhr ist alles aus.
Beim ersten und zweiten schalten blinkt es unterschiedlich.
Beim dritten schalten geht alles wieder aus.
So wollte ich das haben.
Jetzt ein paar Fragen zum Code.
Was bedeutet Dim - As Bit?
und Dim - As Integer?
und Xor?
Diese Begriffe sagen mir noch nichts.
Und wieso muss ich ca. ne halbe Sekunde den Taster drücken bis der Attiny13 reagiert?
Code:$regfile = "attiny13.dat" $crystal = 1200000 $hwstack = 10 $swstack = 10 $framesize = 10 Config Portb.1 = Output Config Portb.2 = Output Config Portb.3 = Output Config Portb.4 = Output Config Pinb.0 = Input Dim Modus As Integer Dim Anzahlmodi As Integer Dim Taste_old As Bit Dim Taste_new As Bit Dim X As Bit Modus = 1 Anzahlmodi = 3 Taste_new = 0 Do Taste_old = Taste_new Taste_new = Pinb.0 X = Taste_old Xor Taste_new X = X And Taste_new If X = 1 Then Incr Modus If Modus > Anzahlmodi Then Modus = 1 Select Case Modus Case 1 Gosub Lichteffekt1 Case 2 Gosub Lichteffekt2 Case 3 Gosub Lichteffekt3 End Select Loop End Lichteffekt1: Portb.1 = 0 Portb.2 = 0 Portb.3 = 0 Portb.4 = 0 Return Lichteffekt2: Portb.1 = 1 Portb.2 = 0 Portb.3 = 1 Portb.4 = 0 Waitms 100 Portb.3 = 0 Portb.4 = 1 Waitms 100 Portb.3 = 1 Portb.4 = 0 Waitms 100 Portb.1 = 0 Portb.2 = 1 Portb.3 = 0 Portb.4 = 1 Waitms 100 Portb.3 = 1 Portb.4 = 0 Waitms 100 Portb.3 = 0 Portb.4 = 1 Waitms 100 Return Lichteffekt3: Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Portb.4 = 1 Waitms 100 Portb.1 = 0 Portb.2 = 0 Portb.3 = 0 Portb.4 = 0 Waitms 100 Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Portb.4 = 1 Waitms 100 Portb.1 = 0 Portb.2 = 0 Portb.3 = 0 Portb.4 = 0 Waitms 100 Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Portb.4 = 1 Waitms 100 Portb.1 = 0 Portb.2 = 0 Portb.3 = 0 Portb.4 = 0 Waitms 100 Return
Hallo Bow-Hunter,
das was du in dem Code jetzt tust nennt sich "pollen" - das bedeutet so viel wie : du fragst den Taster im Hauptprogramm in einem Duchlauf der Hauptschleife ab. Der Grund, warum das jetzt ca 500ms oder etwas genauer sogar ca 600ms dauert, der sollte dir bewußt werden wenn du dir mal überlegst was passiert wenn du eine Unterroutione (gosub) anlegst und dann mit dem Tasterinput dort hin verzweigst? Zeit unempfindlicher wäre ein Interrupt der etwas weiter oben schon vorgeschlagen wurde. Ich empfehle einmal mit dem Cursor auf "Dim" zu gehen und dann F1 zu drücken -> Bascom Hilfe. Zusaätzlich verweise ich mal auf diese Seite (klick mich) - hier findest du unter anderem auch was informatives zum Interrupt.
Viele Grüße
Jörg
Lesezeichen