Werbung
Ist eigentlich das was ich Dir vorgeschlagen habe.
Dein Programmierer hat nur gleich die LED toggleroutine mit in die Tastenabfrage eingebaut.
Dein Speicher für den vorherigen Tastendruck ist dabei die Variable readInput.
Was noch fehlt ist die Entprellung.
Ohne die wird's nicht sauber funktionieren.
Guck mal hier im Forum rum, da gibts entprell Routinen jeder coleur.
Eventuell hat ja auch dein Compiler schon eine in ner Lib mit drin.
Die Entprell routine sollte deinen readInput Parameter und anstatt deiner TASTE , !TASTE funktion beeinflussen.
Danke dafür![]()
Ich hab ne neue Frage:
Anschluss an Mega8:
- Taster 1 an PORTD.2 soll bei Tastendruck an PORTB.0 LED 1 zum leuchten bringen
- Taster 2 an PORTD.3 soll bei Tastendruck an PORTB.1 LED 2 zum leuchten bringen
Warum leuchten die LEDs entgegengesetzt?Code:#define F_CPU 3686400 // Taktfrequenz des myAVR-Boards #include <avr\io.h> // AVR Register und Konstantendefinitionen //---------------------------------------------------------------------- main() { DDRB = 0b11111111; // PORTB = Ausgang DDRD = 0b11111111; // PORTD = Eingang PORTD = 0b00001100; // PORTD = PULL-UP do { switch (PIND) { case 0b00000100: PORTB = 0b00000001; break; case 0b00001000: PORTB = 0b00000010; break; default: PORTB = 0b00000000; } } while (true); }
Also bei Tastendruck 1 leuchtet LED 2 und bei Tastendruck 2 leuchtet LED 1?
Was muss ich anders machen?
Gruß Andreas
PS: Bei if funzt alles ohne Probleme![]()
Ein Problem seh ich darin, dass der PortD nicht als Eingang geschalten ist, da hast du wahrscheinlich as verwechselt.
Werden die LEDs durch einen low- oder high-Pegel angeschalten? Bei lowaktiven LEDs müsstest du die Zuweisungen an PortB vertauschen.
Willst du eigentlich auch, dass beide LEDs gleichzeitig leuchten können? Dafür müsstest du nämlich noch ein case mit 0b00001100 einfügen, im Moment dürfte immer nur eine leuchten können. (Obwohl, bei lowaktiven LEDs müssten im Moment bei nicht gedrückten Tasten beide leuchten...)
Das ist das, was mich verwirrt![]()
Das "default" funzt wie es soll, wenn nichts gedrückt ist, dann bleiben beide aus.
Ich könnte am portB die pins tauschen bzw. die bits, das wäre dann aber zu einfach![]()
Die LED's liegen auf GND \/
Was mich stört, dass die LED's unlogisch gegenüber dem Taster leuchten.
Wenn 1 dann sollte auch LED an sein und nicht die im gegenüberliegende LED im anderen case.
Hast du den Port D jetzt eigentlich als Eingang geschalten? Wenn nicht, dann mach das erstmal.
Was passiert, wenn du beide Taster gleichzeitig drückst?
Vorweg, bin grad nicht zu Haus, hab den Code heut früh nur eben hier reingesetzt, kann jetzt jedenfalls nichts testen![]()
PORTD hab ich als Eingang definiert
Wenn ich nun beide Tasten drücke, dann leuchtet nur die erste LED.
Wenn nichts gedrückt wird, dann ist nach "default" alles aus.
Wenn erste taste nach erstem "case" gedrückt wird, dann leuchtet zweite LED nach zweitem "case" und anders herum![]()
Irgendwo hab ich nen Denkfehler.
Ich könnte die Pins vom PORTB in den case tauschen, dann funzt es, wie es soll, jedenfalls nach dem Board (optisch).
Hab ne neue Frage:
Was ist mit den Pins TXD und RXD alles möglich?
Wenn ich zwei Controller miteinander kommunizieren lassen möchte, welche Möglichkeiten hat man darüber zu senden und zu empfangen?
Kann man über diese Leitungen von einem Controller if-Bedingungen des anderen erfüllen?
Hallo copious,
die Pins RXD und TXT sind die Empfangs(receive)- und Sende(transmit)pins des U(S)ARTs. Siehe auch https://www.roboternetz.de/wissen/index.php/UART und http://www.mikrocontroller.net/artic...orial#Der_UART .
Der UART wird meistens dazu benutzt, um Daten mit dem PC auszutauschen. Natürlich kann man es auch zwischen 2 Controllern tun. Man muss nur ein passendes Protokoll festlegen, damit man weiss, wer was wie senden darf.
Das verstehe ich nicht so ganz. Könntest Du es bitte etwas deutlicher formulieren?Kann man über diese Leitungen von einem Controller if-Bedingungen des anderen erfüllen?
MfG Mark
Lesezeichen