Hallo, ich habe ein merkwürdiges Problem mit den Ports des µC ATMega8. Die Schaltung: Ich habe eine 7-Segment-Anzeige (http://www.datasheets.org.uk/dl/Datasheets-16/DSA-306868.pdf , SA03-11 , gemeinsame Anode). Die Anode (Pin 14) habe ich an VCC geklemmt und die Pinnchen für die einzelnen Segmente an die Pins PB0, PB1, PB6, PB7 und PD5-PD7. Mit diesem Code wollte ich alle Segmente dann zunächst erst einmal AUSschalten: DDRB = 0; DDRD = 0; PORTB = 0; PORTD = 0; Aber: Alle Segmente gehen nach der Programmierung AN. Während der Programmierphase sind sie AUS, daher schließe ich auf einen Softwarebug. Ich habe mit einem Trafo testweise mal die Verbindungen einzelnd durchgetestet, funktioniert einwandfrei. Nur wenn der µC im Sockel steckt, gehen alle Segmente an. Kann sich das jemand erklären?! Über Hilfe würde ich mich echt freuen! :-) Gruß, Matthias
>Aber: Alle Segmente gehen nach der Programmierung AN. Natürlich gehen die AN. Die hängen ja mit der Anode an VCC. Wenn die Portpins 0 werden fließt Strom. Ich hoffe du hast Widerstände vor den LEDs;)
Hallo Holger, ich habe mich unvollständig/falsch ausgedruckt: Auch wenn ich folgendes ausführe, bleiben die PINs trotzdem an: DDRB = 0; DDRC = 0; DDRD = 0; PORTB = 0xff; PORTC = 0xff; PORTD = 0xff; Jetzt dürfte ja eigentlich kein Strom fließen. Einen Widerstand habe ich vor VCC geklemmt, weil ich vorhabe immer nur ein Segment gleichzeitig leuchten zu lassen. Gruß, Matthias
>Natürlich gehen die AN.
Upps;) Eigentlich dürften die tatsächlich nicht angehen.
Alles Eingänge.
DDRB = 0;
DDRD = 0;
Laß die Krümeltaktik. Zeig das komplette kompilierfähige Programm als Dateianhang. Peter
> Zeig das komplette kompilierfähige Programm als Dateianhang.
Hier ist es. Ist aber wirklich nicht mehr, als ich bereits geschrieben
habe.
Gruß, Matthias
> Laß die Krümeltaktik. > Zeig das komplette kompilierfähige Programm als Dateianhang. Nützt doch nichts. Hinterher kommt noch raus, daß er extern Transistoren angeschlossen hat, so wie er die Vorwiderständee "vergessen" hat zu beschreiben.
Hallo, die Schaltung ist wie beschrieben. VCC -> Widerstand (180 Ohm) -> Anode der Segmentanzeige. Jedes Segment -> Unterschiedlicher Pin am µC.
>VCC -> Widerstand (180 Ohm) -> Anode der Segmentanzeige. > >Jedes Segment -> Unterschiedlicher Pin am µC. Und wo am uC hast du VCC angeschlossen? Falls gar nicht dann können die LEDs tatsächlich alle leuchten. Also her mit der kompletten Schaltung.
Ok, es hat sich erledigt! :-) Jetzt läuft alles. Es war wohl der Programmer irgendwie falsch eingestellt (habe alles noch einmal resettet und jetzt geht es! Danke für eure Hilfe!
ein gemeinsamer Widerstand für die ganze Anzeige?? prost Mahlzeit
Und bitte definier deine Ports als Ausgang: DDRB = 0xFF; //nicht 0x0 DDRD = 0xFF; //nicht 0x0 Und dann bedenke, dass deine Segmente L-Aktiv sind, eine "0" bedeutet also "an", eine "1" "aus". gruß tobi PS.: Bitte spendiere den LEDs eigene Vorwiderstände. Nur so ist gewährleistet, dass sie stets innerhalb ihrer Spezifikationen arbeiten und sich nicht gegenseitig beeinflussen!
Matthias G. schrieb: > Einen Widerstand habe ich vor VCC geklemmt, weil ich vorhabe immer > nur ein Segment gleichzeitig leuchten zu lassen. @ die beiden Poster über mir: Wenn immer nur ein Segment leuchtet, dann ist ein gemeinsamer Widerstand auch ausreichend.
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.