7 Segment Anzeige lässt sich nicht steuern

Gast #2489235
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
Gast
>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;)
Gast
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
Gast
> Zeig das komplette kompilierfähige Programm als Dateianhang.

Hier ist es. Ist aber wirklich nicht mehr, als ich bereits geschrieben 
habe.

Gruß, Matthias
Angehängte Dateien:
Gast
> 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.
Gast
Hallo,

die Schaltung ist wie beschrieben.

VCC -> Widerstand (180 Ohm) -> Anode der Segmentanzeige.

Jedes Segment -> Unterschiedlicher Pin am µC.
Gast
>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.
Gast
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!
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!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.