Hallo kann mir einer bei dem Programm helfen? ich hänge schon seit 3 Wochen daran und finde nicht wirklich Hilfe wenn ich danach google. Auch die Tuts gehen nicht wirklich auf meine gewollten Funktionen ein. Hier ist das Problem, dass die Led an portb.0 immer leuchtet. $regfile = "m16def.dat" $framesize = 16 $swstack = 16 $hwstack = 16 $crystal = 1000000 Config Portb.0 = Output Config Pind.7 = Input Portd.7 = 1 Config Pinc.1 = Input Portc.1 = 1 Do If Pind.7 = 1 Or Pinc.1 = 0 Then Portb.0 = 1 If Pind.7 = 1 Or Pinc.1 = 1 Then Portb.0 = 0 Loop End Also passieren tut das hier: portb.0 leuchtet schon am Anfang schwach ohne dass ich überhaupt was getätigt habe, aber WARUM??? und wenn ich pind.7 alleine schalte leuchtet die led stärker. und wenn ich beide schalte geht die lampe aus. ist ja richtig, wobei das ja nicht die Funktion eines "Or" ist, oder ist das normal? Und hier wollte ich die LED setzen und dann irgendwann Rücksetzen. $regfile = "m16def.dat" $framesize = 16 $swstack = 16 $hwstack = 16 $crystal = 1000000 Config Portb.0 = Output Config Pind.7 = Input Portd.7 = 1 Config Pinc.1 = Input Portc.1 = 1 Do If Pind.7 = 1 Or Pinc.1 = 0 Then Set Portb.0 If Pind.7 = 1 Or Pinc.1 = 1 Then Reset Portb.0 Loop End hier passiert das selbe wie oben. Wie kann man denn ein Ausgang dauerhaft setzen und dann irgendwann wieder rücksetzen?? Und warum ist die Funktion von dem "Or" wie das von einem Und. weil die Lampe geht ja aus, wenn ich Pind.7 und Pinc.1 schalte, aber das sollte doch eigentlich bei nen UND passieren, oder? MfG Fred
du frägst den Taster ab und setzt entsprechend den Ausgang, wenn du jetzt nicht wieder eine neue Abfrage startest bleibt der erste Zustand bestehen, da deine Schleife nicht die Abfrage wiederholt.
Wie hast du die Tasten geschalten? Wenn die Tasten nicht gedrückt sind Pind.7 und Pinc.1 immer 1 Also sind im nicht gedrückten zustand beide Bedingung wahr.
ja aber wieso leuchtet die LED immer. Außer wenn ich beide Taster betätige. Und der Zustand ist immer nur so lange wie die Bedingung erfüllt sind Sprich, die LED ist nur solange aus wie ich beide Taster betätigt halte. Im übrigen ist die Schaltung so wie im Tutorial dieser Seite aufgebaut. Und wenn ich nur dieses hier übertrage leuchtet die Led nicht. ist ja richtig: $regfile = "m16def.dat" $framesize = 16 $swstack = 16 $hwstack = 16 $crystal = 1000000 Config Portb.0 = Output Config Pind.7 = Input Portd.7 = 1 Config Pinc.1 = Input Portc.1 = 1 Do Loop End Ich komm einfach nicht weiter. Ich will doch blos das die LED leuchtet, wenn ich 1 Taster drücke und dann aus geht wenn ich beide zusammen drücke. Danke erstmal für die Hilfffffe
> Config Pind.7 = Input > Portd.7 = 1 Klassiche Konfiguration für einen active-low Taster an Pind.7 mit internem Pullup-Widerstand Portd.7. Active-low heisst Drücken des Tasters erzeugt einen Kurzschluß von Pind.7 nach GND. > Config Pinc.1 = Input > Portc.1 = 1 Dito für Pinc.1 > If Pind.7 = 1 Or Pinc.1 = 0 Then Portb.0 = 1 Fall #1 Wenn Taster Pind.7 NICHT gedrückt ist ODER Taster Pinc.1 gedrückt ist, dann schalte Ausgang Portb.0 auf 1 > If Pind.7 = 1 Or Pinc.1 = 1 Then Portb.0 = 0 Fall #2 Wenn Taster Pind.7 NICHT gedrückt ist ODER Taster Pinc.1 NICHT gedrückt ist, dann schalte Ausgang Portb.0 auf 0 > portb.0 leuchtet schon am Anfang schwach ohne dass ich überhaupt was > getätigt habe, aber WARUM??? Ich weiss nicht, wie du die LED angeschlossen hast, gegen GND (active high) oder gegen Vcc (active low). Ist aber auch egal. Durch das ODER Fall #1 schaltet sich die LED auch in jeder Schleife ab oder an (Taster Taster Pind.7 ist NICHT gedrückt). Durch den Fall #2 macht die LED in der nächsten Anweisung dann das umgekehrte. Im Mittel hast du ein sehr schnelles Flackern AN/AUS. Daher das schwache Leuchten > If Pind.7 = 1 Or Pinc.1 = 0 Then Set Portb.0 > If Pind.7 = 1 Or Pinc.1 = 1 Then Reset Portb.0 SET PORTB.0 ist gleichbedeutend mit Portb.0 = 1 RESET PORTB.0 ist gleichbedeutend mit Portb.0 = 0 > hier passiert das selbe wie oben. Es wäre schlimm (für BASCOM) wenn nicht. > Wie kann man denn ein Ausgang dauerhaft setzen und dann irgendwann > wieder rücksetzen?? Klaro. So wie du es oben machst. SET PORTB.0 ist gleichbedeutend mit Portb.0 = 1 RESET PORTB.0 ist gleichbedeutend mit Portb.0 = 0 > Und warum ist die Funktion von dem "Or" wie das von einem Und. Ist es nicht. Dir ist nur nicht klar, was die eingelesenen Werte deiner Taster sind, wenn die Taster nicht gedrückt sind. Mach dir eine Wahrheitstabelle: Taster 1 Taster 2 ============================== nicht 1 1 gedrückt nur Taster 1 gedrückt 0 1 Nur Taster 2 1 0 gedrückt Beide 0 0 gedrückt Dann machst du die IF-Abfragen mit Prüfung auf Wert und der UND Verknüpfung für jeden der möglichen vier Werte. Wenn dann immer noch komische Sachen passieren, kümmerst du dich um die Entprellung mit dem DEBOUNCE Befehl > "m16def.dat" > Pinc.1 Die Sache mit der JTAGEN Fuse im Datenblatt hast du gelesen?
DAAAAAANKE, echt riesen DANK. Ich hänge hier schon seit 3 Wochenenden dran. Dabei hatte ich bloß nicht verstanden, dass die Taster genau anders rum arbeiten. Und die LED leuchtet auch nicht, wenn ich den Ausgang setze, sondern rücksetze. Darauf muss man erstmal kommen. Ich werd bekloppt. DANNNKKKKKKEE an alle >> Und warum ist die Funktion von dem "Or" wie das von einem Und. > > Ist es nicht. Dir ist nur nicht klar, was die eingelesenen Werte deiner > Taster sind, wenn die Taster nicht gedrückt sind. Mach dir eine > Wahrheitstabelle: > > Taster 1 Taster 2 > ============================== > nicht 1 1 > gedrückt > > nur > Taster 1 > gedrückt 0 1 > > Nur > Taster 2 1 0 > gedrückt > > Beide 0 0 > gedrückt > > Dann machst du die IF-Abfragen mit Prüfung auf Wert und der UND > Verknüpfung für jeden der möglichen vier Werte.
Achso, jetzt wo ich schonmal Frage, weis einer wie ich ne positive Flanke erzeuge. Ich möchte das die LED nur beim Wechsel eines Tasters von 0 auf 1, an geht. grazie
Du willst keine Flanke erzeugen, du willst eine erkennen. Und das Werkzeug dazu wurde schon genannt: debounce Mehr Details dazu in der BASCOM Hilfe.
Wie wäre es damit: If Pind.7 = 0 Or Pinc.1 = 0 Then Reset Portb.0 Du musst allerdings auch die Bedingung einfügen das Portb.0 wieder 1 wird wenn keine Taste gedrückt ist.
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.