Forum: Mikrocontroller und Digitale Elektronik 7 Segment Anzeige lässt sich nicht steuern


von Matthias G. (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>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;)

von Matthias G. (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>Natürlich gehen die AN.

Upps;) Eigentlich dürften die tatsächlich nicht angehen.
Alles Eingänge.

  DDRB = 0;
  DDRD = 0;

von Peter D. (peda)


Lesenswert?

Laß die Krümeltaktik.
Zeig das komplette kompilierfähige Programm als Dateianhang.


Peter

von Matthias G. (Gast)


Angehängte Dateien:

Lesenswert?

> Zeig das komplette kompilierfähige Programm als Dateianhang.

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

Gruß, Matthias

von MaWin (Gast)


Lesenswert?

> 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.

von Matthias G. (Gast)


Lesenswert?

Hallo,

die Schaltung ist wie beschrieben.

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

Jedes Segment -> Unterschiedlicher Pin am µC.

von holger (Gast)


Lesenswert?

>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.

von Matthias G. (Gast)


Lesenswert?

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!

von Weingut P. (weinbauer)


Lesenswert?

ein gemeinsamer Widerstand für die ganze Anzeige??

prost Mahlzeit

von Tobias W. (hacker-tobi)


Lesenswert?

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!

von Joe J. (neutrino)


Lesenswert?

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
Noch kein Account? Hier anmelden.