Hallo! Habe jetzt mal versucht ein Programm zu erstellen, wo nur der Schalter S0 und S1 am PortA gedrückt werden dürfen und an PortC soll dann NUR eine LED (nennen wir sie H0) leuchten. Habe dazu mal folgendes Programm erstellt. Bitte zerfetzt mich nicht in der Luft, es ist erst mein zweites... .include "4433def.inc" LDI r16, 0xFF OUT DDRC, r16 Anfang: IN r16, PINA ANDI r16, 3 CPI r16, 3 BREQ H0ein CBI PORTA, PA0 RJMP Anfang H0ein: SBI PORTA, PA0 RJMP Anfang Gruß Dominik
Darf man fragen, was genau nicht funktioniert? Tut sich bei der LED gar nichts oder leuchtet eine andere als die gewünschte, oder... Wie ist die LED denn angeschlossen? Wenn sie High-Side am Port hängt, musst Du das entsprechende PORT-Bit löschen, um die LED einzuschalten. Ansonsten siehts OK aus.
Komisches Programm... So wie das jetzt da steht geht das so: PORTC als Ausgang, PORTA einlesen, wenn Eingang 0 UND 1 logisch 1 sind, dann wird der (jetzt kommts) PULL-UP vom Eingang 0 an PORTA aktiviert, wenn nicht, wird der PullUp ausgeschaltet. Verbesserung: PORTA mit PORTC ersetzen.
@David: Hast natürlich recht! Musst natürlich PORTC schalten...
Hallo! Danke erstmal wieder für die super schnellen Antworten. Sorry wenns Programm etwas chaotisch aussieht, aber ich wusel mich gerade so durch.. Hier mein verbessertes Programm... .include "4433def.inc" LDI r16, 0xFF OUT DDRC, r16 Anfang: IN r16, PORTC ANDI r16, 3 CPI r16, 3 BREQ H0ein CBI PORTC, PC0 RJMP Anfang H0ein: SBI PORTC, PC0 RJMP Anfang Das blöde ist nur... jetzt leuchten alle LEDS und ich bekomm se auch nicht durch drücken der taster aus... Gruß Dominik
Du schaltest immer noch den selben Port, von dem Du auch einliest! Das Bit, das Du veränderst, ist eins von denen, die Du vorher eingelesen hast! Du solltest vll. mal posten, an welchem Port Deine Taster hängen und an welchem die LEDs. Entweder hast Du die Taster an Port A (dann muss Port A als Eingang mit Pull-Ups definiert sein) und die LEDs an Port C (dann muss Port C als Ausgang definiert sein), oder umgekehrt...
Schau noch mal dein Programm durch. Und halte immer im Hinterkopf: Am PORT C hängen die LED Am PORT A hängen die Schalter Mit diesem Hintergrundwissen: > Anfang: IN r16, PORTC Warum fragst du die LED ab, ob ein Schalter gedrückt ist? Hinweis: Wenn in deinem Programm (mit der Aussenbeschaltung) entweder nur PORTA (oder PINA) oder nur PORTC (oder PINC) vorkommt, dann kann es nicht funktionieren. Denn: Am PORT C hängen die LED Am PORT A hängen die Schalter
ok,, habs mal nach meinem besten Überlegen verbessert... .include "4433def.inc" LDI r16, 0x01 OUT DDRC, r16 Anfang: IN r16, PIND ANDI r16, 3 CPI r16, 3 BREQ H0ein CBI PORTC, PC0 RJMP Anfang H0ein: SBI PORTC, PC0 RJMP Anfang Das Problem was ich nicht verstehe ist, gebe ich oben bei IN r16, PIND statt PIND, PINA ein bekomme ich eine Fehlermeldung! Mit dem obigen Programm leuchtet LED0 jetzt wenn ich Taster S0 oder S1 drücke... aber es sollte doch eine UND Verknüpfung ergeben... verwirrung
Du hast sicherlich keine PullUp / PullDown-Widerstände an deinen Eingängen? Verkabel die Taster mal mit Masse und schalte die internen PullUps ein. Danach musst du natürlich umgedreht denken (0 = gedrückt).
Habe das STK500 zum Testen... Habe nur die Flachkabel gesteckt.
2 Ding sind wichtig: * wie sind die LED's angeschlossen? meistens sind sie gegen Vcc geschaltet. Das bedeutet, dass der Prozessor-Pin auf 0 gehen muss, damit die LED leuchtet. Ich bin mir jetzt nicht sicher, aber ich glaube das STK500 hat sie gegen Masse geschaltet, d.h. der Prozessor-Pin muss auf 1 gegeben werden, damit die LED leuchtet. Hatte erst einmal ein STK500 für 20 Minuten zu spielen und weiss die Details nicht mehr. * wie sind die Taster angeschlossen? d.h. welchen Pegel kriegst du im Programm (0 oder 1) wenn der Taster nicht gedrückt, bzw. wenn er gedrückt wird. Meistens sind sie gegen Masse angeschlossen. du musst dann den Pullup aktivieren: DDRA = 0x00; // komplette PortA auf Eingang PORTA = 0xFF; // alle Pullup Widerstände einschalten PINA liefert dann den Zustand der Taster: ein nicht gedrückter Taster liefert eine 1, ein gedrückter eine 0 Wie gesagt: meist macht man das so, weil es elektrisch die einfachste Variante ist. Ob das bei dir so ist, musst du entweder nachlesen oder mal im Schaltplan nachschauen.
> ...was ich nicht verstehe ist, gebe ich oben bei IN r16, PIND > statt PIND, PINA ein bekomme ich eine Fehlermeldung! Ist doch klar, der 4433 hat keinen Port A und deshalb auch kein PINA!
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.