Hallo Leute, ich besuche Euer Forum schon länger, nun habe ich mich angemeldet. Ich habe hier eine Frage zu Bascom und dem Befehl case/select . In Google habe ich nicht so die Lösung gefunden, da die Listings für einen Anfänger sehr umfangreich und manchmal undurchsichtig sind. Bitte nicht andere Lösungen wie if, then else usw. präsentieren. Nur antworten zu case/select! Danke ------------------- Hier mein Programm. Ich möchte jeweils einen Taster an PortC 0, 1, 2 anschliessen. Dieser schaltet gegen GND. Ist Schalter 0 gedrückt leuchtet die LED z.B. 1 Sekunde. Ist Schalter 1 gedrückt leuchtet die LED z.B. 3 Sekunde. Ist Schalter 2 gedrückt leuchtet die LED z.B. 6 Sekunde. ..... Ist Schalter 0 und 1 gedrückt leuchtet die LED z.B. x Sekunden. usw. Die LED leuchtet aber nicht. Entweder habe ich ein Problem beim maskieren oder Do sitzt an der falschen Stelle. Als Anfänger bin ich da ein bisschen verloren. Kann mir bitte jemand behilflich sei? ------------------- $regfile = "m8def.dat" 'ATmega8-Deklarationen $crystal = 3686400 'Quarz: 3,6864 MHz Ddrc = &B00100000 'Pin PC5 Ausgang, 'Rest Eingang Do Portc = &B00001111 'PullUp für Pin PC01/2/3/4 'aktivieren Dim Eingabe As Byte Eingabe = &B00001111 'gesamten Port abfragen 'und maskieren Select Case Eingabe Case &B00000001: Portc.5 = 1 'LED an (Pin PC5) wait 1 Case &B00000011: Portc.5 = 1 'LED an (Pin PC5) wait 3 Case &B00000111: Portc.5 = 1 'LED an (Pin PC5) wait 6 End Select Loop End
Eingabe = Pinc 'gesamten Port abfragen 'und maskieren Eingabe = Eingabe and &B00001111
Würd' mal sagen:
1 | If Eingabe <> PortC Then |
2 | Geht Nicht |
3 | Else |
4 | Nix kapiert |
5 | End If |
Wenn du nur select-case haben willst, brauchst du für alle möglichen Fälle ein case. Case &B00000001: ' Nur Schalter 0 Case &B00000011: ' Schalter 0 und Schalter 1 Case &B00000111: ' Schalter 0, 1 und 2 plus... Case &B00000010: ' Nur Schalter 1 Case &B00000100: ' Nur Schalter 2 Case &B00000101: ' Schalter 0 und Schalter 2 Case &B00000110: ' Schalter 1 und Schalter 2 ADD: Eingabe = PINC and &B00000111
ADD2: Ich sehe gerade, dass du Pullups an PORTC benutzt, d.h. die Schalter sind active low geschaltet. Dann müssen die case invertiert sein, denn 0 bedeutet beträtigter Schalter und 1 nicht betätigter Schalter. Bei Eingabe = PINC and &B00000111 Also Case &B00000110: ' Nur Schalter 0 Case &B00000100: ' Schalter 0 und Schalter 1 usw.
Ist es besser oder einfacher die Taster gegen + zu schalten? wie http://halvar.at/elektronik/kleiner_bascom_avr_kurs/schalter_anschliesen/ Dann würde halt je Taster ein externer R benötigt was ja kein Problem wäre. Das andere probiere ich noch aus. Danke.
Joe Joe schrieb: > Ist es besser oder einfacher die Taster gegen + zu schalten? Nö. Das passt schon wie es ist: Du brauchst keine externen Widerstände und im Code ist es nur eine andere Schreibweise. Der active high Fall (s. AVR-GCC-Tutorial im IO-Kapitel) ist mehr Aufwand.
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.