www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sieben-Segmentanzeige: Problem mit "6"


Autor: Michael Niemand (atmelbrooks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute.
ich hab ein sonderbares Problem. Ich habe eine Testschaltung aufgebaut 
mit einer Siebensegmentanzeige, einem ATtiny2313 und einem 4511 zur 
Ansteuerung der Anzeige.
Alle Zahlen werden super angezeigt, ausser der 6. wenn ich die 6 
anzeigen will, sind alle Segmente an, die eigentlich zur 6 gehören aber 
schwächer als die anderen. Ich habe es mit dem 4511 probiert, ohne 
(Segmente direkt von Controller angesteuert), mit einer Common Anode und 
Common Cathode Anzeige. Beide Varianten auch mit und ohne 4511 (bei gem. 
Anode entsprechend mit Transistoren) - überall das gleiche Resultat!

Ich habe meines Erachtens alles probiert und bin kurz vorm verzweifeln!
Ich muss allerdings gestehen, dass ich die Vorwiderstände vor den 
Segmenten weg gelassen habe, kann mir allerdings nicht vorstellen, das 
die was damit zu tun haben könnten.

Autor: LP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eventuell hast du einen nichtgewollte Verbindung zwischen dem Anschluss 
für die oberste LED zur LED oben rechts. Bei allen anderen Ziffern fällt 
dies nicht auf, da mit ausnahme der 6 sonst immer beide an sein müssen.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den 4511 sollte man - unabhängig von Deinem Problem - aber nie ohne 
Vorwiderstände betreiben, das mag der nicht (lange).

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du den Dezimalpunkt vervendet? Ich kenne den 4511 nicht auswendig, 
aber bei vielen Anzeigen ist der als normale low-current-LED ausgeführt, 
das führt zu dem Effekt den du hast.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@Sonic: der 4511 steuert doch den Dezimalpunkt garnicht an?
Wenn man, wie es nötig ist, die passenden Vorwiderstände benutzt, spielt 
der LED-Typ nur beim Wert des Vorwiderstandes eine Rolle.

Anmerkung: man sollte Beiträge kennzeichnen können, in denen es um:

"ich benutze LED ohne Vorwiderstand, daran kann es aber wohl nicht 
liegen"

in irgendeiner Form vorkommt. ;-))

Gruß aus Berlin
Michael

Autor: ch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja du hast sicher ein KO... also messe erstmal ob die entsprechenden 
ausgänge alle schalten wie sie sollen... ist dies der fall, hast du's 
mit nem hardwarefehler zu tun.... hatte das auch mal, bei mir wars ne 
unsaubere lötstelle... wird wohl was ähnliches sein...

Autor: Michael Niemand (atmelbrooks)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe leider nicht genügend gleiche Widerstände für alle Segmente - 
habe es dann mit nur 5 Segmenten MIT Vorwiderständen probiert, same shit 
here. Deswegen kanns meiner Meinung nach nicht daran liegen.
Ich habe mittlerweile auch alle Bauteile mal gewechselt, sowohl die 
Anzeige, als auch den Controller und habs auch schon mit verschiedenen 
4511 und ohne (direkt am Controller). Ich schließe also einen 
Hardwarefehler aus.

Das mit dem messen der Anschlüsse hab ich auch schon gemacht. Die 
Anschlüsse geben ein Signal aus. Das mysteriöse ist aber, dass das 
sowohl bei Verwendung  mit 4511 als auch ohne der Fall ist, obwohl ich 
die Software entsprechend angepasst habe.

hier mal die Funktion zur Anzeige der Zahlen via 4511, vielleicht bin 
ich ja betiebsblind... (läuft mittlerweile auf einem Atmega8), das 
Datenblatt zu einem 4511 habe ich angehängt, da ist auch die 
entsprechende Warheitstabelle drin. Dezimalpunkt wird nicht verwendet 
und kann mit einem 4511 auch nicht angesteuert werden.

#define A    _BV(PC0) //4511 Eingang DA 0001 1
#define B    _BV(PC1) //4511 Eingang DB 0010 2
#define C    _BV(PC2) //4511 Eingang DC 0100 4
#define D    _BV(PC3) //4511 Eingang DD 1000 8

//Prototypen
void displaynumber(int);

int main(void) ...

//Funktion zur Anzeige der Ziffern
void displaynumber(int number){

  switch (number){

    case 1:
      PORTC = A;
      break;
    case 2:
      PORTC = B;
      break;
    case 3:
      PORTC = A+B;
      break;
    case 4:
      PORTC = C;
      break;
    case 5:
      PORTC = A+C;
      break;
    case 6:
      PORTC = B+C;
    case 7:
      PORTC = A+B+C;
      break;
    case 8:
      PORTC = D;
      break;
    case 9:
      PORTC = A+D;
      break;
    default:
      PORTC = 0x00;
      break;
      }
  }

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe grade ein ähnliches Projekt, habe 7-seg. Jumbo-Anzeigen 
anzusteuern. Ich mache das mit mehreren 74HC164 (8  bit 
Schieberegister), die Anzeige mittels Dioden an der gemeinsamen Kathode 
gegen Masse auf Betriebsspannung gebracht, dann brauche ich kein 
einzelnen Vorwiderstände. Die Schieberegister braucht man nur zu 
kaskadieren, gemeinsamer Takt und Reset - fertig. Die Ansteuerung ist 
auch pipi-einfach.

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

Bewertung
0 lesenswert
nicht lesenswert
Warum so kompliziert?
Wenn sicher gestellt ist, dass in number nur Ziffern von
0 bis 9 kommen, kannst du auch einfach

//Funktion zur Anzeige der Ziffern
void displaynumber(int number){
  PORTC = number;
}

machen.
Macht genau das gleiche

> Ich habe mittlerweile auch alle Bauteile mal gewechselt, sowohl die
> Anzeige, als auch den Controller und habs auch schon mit verschiedenen
> 4511 und ohne (direkt am Controller). Ich schließe also einen
> Hardwarefehler aus.

Hast du mal gemessen, ob du nicht einen Schluss von einer
Leitung zu anderen Leitungen hast?

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> die Anzeige mittels Dioden an der gemeinsamen Kathode
> gegen Masse auf Betriebsspannung gebracht, dann brauche ich
> kein einzelnen Vorwiderstände.

Das ist blanker Murks.



Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der 'Murks' funktioniert aber zuverlässig! Wenn die Segmente eine 
Spannung von 4V brauchen, kriegen sie die auch, nicht mehr und nicht 
weniger!

Autor: Michael Böhner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

@Michael Niemand: Füge mal hinter der case-Anweisung für die 6 noch ein 
break ein.
C++ verhält sich hier etwas anders als andere Programmiersprachen. Ohne 
break wird die switch-Anweisung nicht verlassen und somit die 
default-Anweisung auch noch ausgeführt (was zum Löschen der Anzeige 
führen würde).
Die Ansteuerzeit wird somit sehr kurz und dadurch natürlich im Vergleich 
zu den anderen Zahlen (die mit break abgeschlossen sind) dunkler.

Propier's einfach mal - vielleicht funktioniert's.

Autor: Michael Niemand (atmelbrooks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Böhner wrote:
> Hallo
>
> @Michael Niemand: Füge mal hinter der case-Anweisung für die 6 noch ein
> break ein.
> C++ verhält sich hier etwas anders als andere Programmiersprachen. Ohne
> break wird die switch-Anweisung nicht verlassen und somit die
> default-Anweisung auch noch ausgeführt (was zum Löschen der Anzeige
> führen würde).
> Die Ansteuerzeit wird somit sehr kurz und dadurch natürlich im Vergleich
> zu den anderen Zahlen (die mit break abgeschlossen sind) dunkler.
>
> Propier's einfach mal - vielleicht funktioniert's.

Boah, ich krieg die Krise. Genau das meinte ich mit "betriebsblind". Das 
wars. Ich suche Stunden nach dem Problem und dann isses ne vergessene 
break Anweisung. Sehr lustig.
Danke! Das mit dem PORTC = number is ntürlich noch ne Ecke feiner als 
mit switch-case. Vielen Dank auch dafür!

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.