Hallo Leuts, ich habe vor mein LED Programm mit einem Taster zu starten. die Software habe ich in Bascom geschrieben, kann sich das mal jemand an gucken ob das so stimmt mit dem Starten des LED Programmes? $regfile = "m8def.dat" $crystal = 3690000 Config Portb = Output Config Portc = Output Config Pinc.4 = Input Led1 Alias Portb.0 'Benennt die Ports mit der Jeweiligen LED Led2 Alias Portb.1 Led3 Alias Portb.2 Led4 Alias Portb.3 Led5 Alias Portb.4 Led6 Alias Portb.5 Led7 Alias Portc.0 Led8 Alias Portc.1 Led9 Alias Portc.2 Led10 Alias Portc.3 Taster Alias Portc.4 'Einlesen des Tasters Do If Taster = 1 Then 'Led Programm starten Goto Led: End If Led: ' Led Programm Led1 = 1 Waitms 50 Led1 = 0 Waitms 50 Led2 = 1 Waitms 50 Led2 = 0 Waitms 50 Led3 = 1 Waitms 50 Led2 = 0 Loop End
Ich kenn zwar Bascom nicht aber ich vermute das es nicht geht. Denn was passiert denn wenn die IF bedingung nicht war ist, als nächsten kommt er ja immer zu deinem Programm.
Peter schrieb: > Ich kenn zwar Bascom nicht aber ich vermute das es nicht geht. > > Denn was passiert denn wenn die IF bedingung nicht war ist, als nächsten > kommt er ja immer zu deinem Programm. und wie mache ich das.....
1. Dein Pin wird als "Tasters" deklariert, später wird "Taster" abgefragt. 2. So etwas macht man nicht nicht mit GOTO sondern GOSUB, denn so ist dein Label in die Hauptschleife integriert und wird somit in jedem Durchgang aufgerufen, egal ob der Taster gedrückt ist oder nicht. 3. Normalerweise zieht man Taster nicht auf 5V sondern auf GND, denn dann kannst du den internen Pullup aktivieren.
Samuel C. schrieb: > 1. Dein Pin wird als "Tasters" deklariert, später wird "Taster" > abgefragt. > 2. So etwas macht man nicht nicht mit GOTO sondern GOSUB, denn so ist > dein Label in die Hauptschleife integriert und wird somit in jedem > Durchgang aufgerufen, egal ob der Taster gedrückt ist oder nicht. > 3. Normalerweise zieht man Taster nicht auf 5V sondern auf GND, denn > dann kannst du den internen Pullup aktivieren. so jetzt ? $regfile = "m8def.dat" $crystal = 3690000 Config Portb = Output Config Portc = Output Config Pinc.4 = Input Led1 Alias Portb.0 'Benennt die Ports mit der Jeweiligen LED Led2 Alias Portb.1 Led3 Alias Portb.2 Led4 Alias Portb.3 Led5 Alias Portb.4 Led6 Alias Portb.5 Led7 Alias Portc.0 Led8 Alias Portc.1 Led9 Alias Portc.2 Led10 Alias Portc.3 Taster Alias Portc.4 'Einlesen des Tasters Do If Taster = 1 Then Led10 = 0 End If Gosub Sub Sub: Led2 = 1 Waitms 40 Led2 = 0 Waitms 40 Loop End
1 | $regfile = "m8def.dat" |
2 | $crystal = 3690000 |
3 | |
4 | Config Portb = Output |
5 | Config Portc = Output |
6 | Config Pinc.4 = Input |
7 | |
8 | Led1 Alias Portb.0 'Benennt die Ports mit der Jeweiligen LED |
9 | Led2 Alias Portb.1 |
10 | Led3 Alias Portb.2 |
11 | Led4 Alias Portb.3 |
12 | Led5 Alias Portb.4 |
13 | Led6 Alias Portb.5 |
14 | Led7 Alias Portc.0 |
15 | Led8 Alias Portc.1 |
16 | Led9 Alias Portc.2 |
17 | Led10 Alias Portc.3 |
18 | |
19 | Taster Alias Portc.4 'Einlesen des Tasters |
20 | |
21 | Do |
22 | If Taster = 1 Then 'Led Programm starten |
23 | 'Led Programm |
24 | Led1 = 1 |
25 | Waitms 50 |
26 | Led1 = 0 |
27 | Waitms 50 |
28 | |
29 | Led2 = 1 |
30 | Waitms 50 |
31 | Led2 = 0 |
32 | Waitms 50 |
33 | |
34 | Led3 = 1 |
35 | Waitms 50 |
36 | Led2 = 0 |
37 | End If |
38 | Loop |
39 | |
40 | |
41 | End |
Versuch mal möglichst ohne GoTo zu arbeiten. Was ist denn daraus geworden. Beitrag "Untereinander Verknüfen?" Code einrücken. Beim Posten Formatierung "code" benutzen Nach dem Befehl GoSub macht er in der nächsten Zeile weiter.
okay und wie mache ich das wenn ich jetzt den taster ein zweites mal betätigt habe, dass er eine andere led ansteuert ?
Jetzt hast du den Code nur noch verschlimmert. Bei Punkt 1 muss ich mich entschuldigen, da habe ich mich verlesen, der stimmt. GOSUB heißt, dass die Routine außerhalb der Hauptschleife liegt und mit RETURN abgeschlossen wird. Den Taster auf Masse statt auf 5V zu ziehen hat schon seinen Sinn, außer du verwendest einen externen Pulldown, was aber aber dank dem internen Pullup nicht nötig ist. Probiers mal mit folgendem Code und lass den Taster den Pin auf Masse ziehen: $regfile = "m8def.dat" $crystal = 3690000 DDRB = &B11111111 DDRC = &B11101111 Led1 Alias Portb.0 Led2 Alias Portb.1 Led3 Alias Portb.2 Led4 Alias Portb.3 Led5 Alias Portb.4 Led6 Alias Portb.5 Led7 Alias Portc.0 Led8 Alias Portc.1 Led9 Alias Portc.2 Led10 Alias Portc.3 Taster Alias Portc.4 Taster = 1 Do If Taster = 0 Then Led10 = 0 End If Gosub Sub Loop Sub: Led2 = 1 Waitms 40 Led2 = 0 Waitms 40 Return End Edit: Diese Antwort bezieht sich auf Post 5.
> > > Do > > If Taster = 0 Then > Led10 = 0 > End If > Gosub Sub > > Loop > > > Sub: > Led2 = 1 > Waitms 40 > Led2 = 0 > Waitms 40 > Return > > End ich wollte aber das ich einmal den taster betätigen muss und das dann die leds von alleine weiter blinken?! so quasie als start taster
Die Tasterabfrage (If taster == 1...) ist für einen ACTIVE HIGH angeschlossenen Taster gemacht. Hast du den Taster richtig angeschlossen? Vergleiche deine Schaltung mit dem rechten Bild in: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Tasten_und_Schalter Einfacher ist die active low Schaltung, weil man den internen Pull-Up Widerstand des AVRs benutzen kann. Das hatten wir gestern in deiner anderen Frage.
> ich wollte aber das ich einmal den taster betätigen muss und das dann > die leds von alleine weiter blinken?! so quasie als start taster Leg dir einen Merker an und werte dann den Taster oder den Merker aus.
1 | gestartet = 0 |
2 | |
3 | do |
4 | If Taster = 1 Or gestartet = 1 Then 'Led Programm starten |
5 | gestartet = 1 |
6 | Led1 = 1 |
7 | 'usw... |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.