mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 7 Segment-Anzeige leuchtet nicht richtig


Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes Problem: ich habe an einem Atmega48 den Decoder 
74LS47 angeschlossen (2 Stück). Die 7 Segment-Anzeige ist eine MAN6610. 
Des weiteren sind 3 Taster über externe Pull-Up-Widerstände 
angeschlossen. Leider leuchten die ausgeschalteten Segmente der Anzeige 
trotzdem schwach, was die Lesbarkeit sehr beeinträchtigt. Die gemeinsame 
Anode der Anzeige liegt auf +5 Volt, als Vorwiderstand habe ich 150 Ohm 
gewählt. Es macht auch keinen Unterschied, ob ich zwischen Atmega und 
Decoder Vorwiderstände und Pull-Down-Widerstände benutze oder nicht. 
Dazu kommt, dass beim betätigen des Tasters die Anzeige auf einmal 
richtig leuchtet. Alle Segmente sind dann richtig eingeschaltet bzw. 
ausgeschaltet (kein schwaches leuchten). Kann mir jemand einen Tipp 
geben, an was das liegen könnte? Die Pegel am Atmega stimmen, aber 
anscheinend sperren die Open-Collector-Ausgänge des 74LS47 nicht 
richtig, auch wenn ein Pegel von 0 Volt anliegt.

Gruß Paul

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
paul schrieb:

> trotzdem schwach, was die Lesbarkeit sehr beeinträchtigt. Die gemeinsame
> Anode der Anzeige liegt auf +5 Volt, als Vorwiderstand habe ich 150 Ohm
> gewählt.

1 Vorwiderstand oder mehrere?

> Es macht auch keinen Unterschied, ob ich zwischen Atmega und
> Decoder Vorwiderstände und Pull-Down-Widerstände benutze oder nicht.

Logisch.
Da laufen Digitalsignale. Durch Widerstände ist alles was du erreichst, 
dass der Decoder nicht mehr 5V als logisch 1 kriegt sondern etwas 
weniger. Der Decoder dürfte sich aber daran nicht sonderlich stören, 
solange der Pegel hoch genug ist um als 1 erkannt zu werden.

> Dazu kommt, dass beim betätigen des Tasters die Anzeige auf einmal
> richtig leuchtet.

Wie ist der Taster verschaltet?

> Alle Segmente sind dann richtig eingeschaltet bzw.
> ausgeschaltet (kein schwaches leuchten). Kann mir jemand einen Tipp
> geben, an was das liegen könnte?

Schaltplan, Programm

> Die Pegel am Atmega stimmen, aber
> anscheinend sperren die Open-Collector-Ausgänge des 74LS47 nicht
> richtig, auch wenn ein Pegel von 0 Volt anliegt.

Unwahrscheinlich.
Du hast irgend einen Fehler gemacht. Der 7447 ist sicherlich in Ordnung 
(auch wenn in Wirklichkeit kein Mensch diesen Baustein an einem µC mehr 
braucht)

Autor: Peter Z. (hangloose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lass mal deinen Code sehen...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dazu kommt, dass beim betätigen des Tasters die Anzeige auf einmal
> richtig leuchtet.
Was macht deine Software in diesem Zustand?

Ich würde sagen, du schaltest die meiste Zeit die LEDs aus und nur immer 
mal kurz ein. Und wenn du die Taste drückst, dann unterbrichst du den 
ganzen Ablauf (und so auch das dauernde Abschalten).

Autor: paul (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So hier mal mein Code. Das mit dem Ein- und Ausschalten könnte natürlich 
sein. Meiner Meinung dürfte dies nicht der Fall sein, ich lass mich aber 
gerne eines besseren belehren :-)
Zum Programm: durch zwei Taster kann ein Spannungswert höher oder 
niedriger eingestellt werden. Dieser wird dann auf insgesamt drei 7 
Segment-Anzeigen dargestellt (die Nachkommastelle wird mit Hilfe von 
zwei Transistoren ohne Decoder angesteuert; funktioniert auch). Beim 
betätgigen des dritten Tasters wird der Spannungswert über UART bzw. 
RS232 gesendet (noch nicht fertig programmiert). Außerdem wird eine LED 
umgeschaltet, was auch funktionert und denke nichts mit dem Problem zu 
tun hat.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
paul schrieb:
> So hier mal mein Code. Das mit dem Ein- und Ausschalten könnte natürlich
> sein. Meiner Meinung dürfte dies nicht der Fall sein, ich lass mich aber
> gerne eines besseren belehren :-)

Doch, genau das tust du.
void  Display_V(uint16_t Voltage){


Hier schaltest du aus (bzw. auf 0)
  K_Port  &=  ~((1<<Komma0)  |  (1<<Komma5)  );
  Z1_Port  = 0;
  Z2_Port = 0;

um kurz drauf wieder einzuschalten :
  switch (Voltage){
    
    case 80:  Z1_Port = 0;
          Z2_Port  = 8;
          K_Port  |=  (1<<Komma0);

        break;

Übrigens.
Du kennst doch Division, oder nicht?

mittels / und % könnte man den ganzen langen switch/case auf <10 Zeilen 
eindampfen.

  /   ... Division
  %   ... Rest bei einer Division.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mann, das ist aber ein starkes Stück SW...

> Das mit dem Ein- und Ausschalten könnte natürlich sein.
Ja, genau so ist es:
  Z1_Port  = 0;  // Ausschalten !!!
  Z2_Port = 0;

  switch (Voltage){
    
    case 80:  Z1_Port = 0;  // Einschalten
        Z2_Port  = 8;
        K_Port  |=  (1<<Komma0);
        break;
Kommentier die ersten beiden Zeilen mal raus.

Wenn du keine Taste drückst, dann wird das nicht ausgeführt:
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
:
    _delay_ms(50);   << nur bei Tastendruck
:
Und das verändert das Zeitverhältnis zwischen Ausschalten und 
Einschalten  :-o

EDIT: Pech, Zweiter... ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.