Die neueren AVR (ATmega, ATTiny) können gleich viel Strom sourcen und sinken. Die Meinung LEDs und Sonstiges nach VCC schalten zu müssen hat sich aus der µC-Generation herübergerettet die nur Open-Collektor (OC) Ausgänge hatten.
Die neueren AVR (ATmega, ATTiny) können gleich viel Strom sourcen und sinken. Die Meinung LEDs und Sonstiges nach VCC schalten zu müssen hat sich aus der µC-Generation herübergerettet die nur Open-Collektor (OC) Ausgänge hatten.
@Hubert,
Und wie hat er die LED nun angeschlossen?
MfG Peter(TOO)
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Wenn seine Beschreibung stimmt und er tatsächlich mit "Rot->ein"beginnt, dann nach GND.
Hallo,
vielen Dank an alle die sich die Zeit genommen haben mir zu antworten,
hier die Grafik von der Schaltung:
PC5 ist das original, PC1 und PC2 sind von mir ergenzt:
Gruß
micron
- - - Aktualisiert - - -
Hallo Hubert,
Rot ist die LED die bereits auf dem Board drauf war, da hab ich nichts geändert.
Hab dann versucht nach dem selben "Muster" 2 weitere LEDs zu löten, ob das richtig ist was ich gemacht hab ist die nächste Frage.
Gruß
mircron
Die Led sind schon richtig so, nur die Ansteuerung ist verkehrt.
Du beginnst mit
PORTC = 0b0100000; // Rote LED
Damit setzt du PC5 auf 1 (5V) die Led ist aber auch gegen 5V geschaltet und leuchtet daher nicht.
Infolge läuft deine Ansteuerung verkehrt.
Übersichtlicher ist auch die Schreibweise wie sie "schorsch_76" schon gezeigt hat:
PORTC |= (1<<5); // setzt das 5te Bit und lässt alle anderen so wie sie sind
PORTC &= ~(1<<5); // löscht das Bit 5 und lässt alle anderen so wie sie sind (Hier leuchtet die Led)
Hallo,
so, hab jetzt den code überarbeitet von mikrocontroller.net nochmal das tutorial angeschaut, das funktioniert jetzt so wie gedacht.
Das Problem war meine falsche ansteuerung wie Hubert es gesagt, hab das falsch verstanden -.-.
Hier der code mit Kommentar, falls der falsch ist bitte nimmt euch etwas Zeit nochmal und sagt was ich falsch beschrieben habe, so hab ich das jedenfalls verstanden:
Ich hoffe ich hab das jetzt richtig verstanden, wenn nicht muss die Docu noch mal herCode:int main() { //DDRC |= (1<<PC5); //DDRC |= (1<<PC2); //DDRC |= (1<<PC1); // DDRC |= (1<<PC5)|(1<<PC2)|(1<<PC1); // Pins 5, 2 und 1 auf Ausgang setzen, jetzt leuchten alle LEDs while(1) { //TODO:: Please write your application code // Rote LED brennt PORTC |= (1 << PC1); // Grüne und PORTC |= (1 << PC2);// gelbe deaktivieren _delay_ms(1000); // 1sec warten PORTC |= (1 << PC5); // Bit PC5 setzen->rote LED aus PORTC &= ~(1 << PC2); // Bit 2 auf Port 2 löschen die gelbe LED brennt _delay_ms(1000); PORTC |= (1 << PC2); // das selbe wieder mit Port PC2, Bit setzen gelbe LED ist aus PORTC &= ~(1 << PC1); // Bit löschen grüne LED brennt _delay_ms(1000); PORTC &= ~(1 << PC5); // rot wieder aktivieren } return 0; }
Besten Dank
micron
Geändert von micron (21.09.2014 um 22:10 Uhr)
Ich denke mal du hast es richtig verstanden. Ein kleiner Schönheitsfehler ist aber noch drinnen.
PC1 und PC2 musst du nur einmal aktivieren, gehört daher vor das while(1)Code:while(1) { //TODO:: Please write your application code // Rote LED brennt PORTC |= (1 << PC1); // Grüne und "Diese beiden Zeilen gehören vor das PORTC |= (1 << PC2);// gelbe deaktivieren "while(1) _delay_ms(1000); // 1sec warten
Da ist wohl irgendwie die Formatierung davongelaufen.
Lesezeichen