LED-Matrix ansteuern (je nur eine LED)

OP #2165564
Hallo,

ich möchte eine 7x5 LED-Matrix mit einem ATmega8 ansteuern.

Wie ich das grundsätzlich zu verkabeln habe, ist mir klar.

Allerdings habe ich mir überlegt, dass ich gleichzeitig immer nur eine 
einzige LED leuchten lassen möchte.

Meine erste Überlegung war, dass ich einfach alle Spalten und Zeilen 
z.B. auf Low schalte und dann nur eine Zeile auf High.
Allerdings kann ich ja nicht gleichzeitig auch die nicht benötigten 
Spalten auch auf High setzen (und selbst wenn das gehen würde, dann 
wären die anderen LEDs ja falsch beschaltet)

Bräuchte noch einen kleinen Dankanstoß, wie ich das hinbekommen könnte 
(oder kann ich einfach irgendwie die nicht benötigten Pins am Atmega 
"deaktivieren")?!

Vielen Dank schonmal
mfg
Michael
Gast
Wenn dir die Schaltung grundsätzlich klar ist, versteh ich die Frage 
nicht.

du musst nur jeweile 1 Spalte und 1 Zeile ansteuern und schon leuchtet 
die LED an dem Schnittpunkt.
Hallo Michael,

dazu reichen 7 Leitungen.
Damit kann man Anzahl der LED = n * (n-1) ansteuern.

Lies dazu bitte diese beiden PDF

PIC microprocessor drives 20-LED dot- or bar-graph display:

http://www.edn.com/contents/images/6363906.pdf

und

AVR Microcontroller drives logarithmic/linear dot/bar 20-LED display

http://www.edn.com/contents/images/6406730.pdf

dort sind die Ideen und auch die Programmierung zu finden..
OP
Also die beiden Ideen aus den PDFs sind echt super.
Die helfen mir auf jeden Fall weiter

Zum ersten PDF fällt mir aber folgendes ein: Ich dachte immer, dass die 
maximale Sperrspannung einer LED meist knapp unter der Flussspannung 
liegt?!
Naja gut, der Strom kann ja durch die andersherumgeschaltete LED (sobald 
aber eine kaputt geht, ist die andere auch kaputt, oder?)


Vielleicht sollte ich mein eigentliches Problem etwas konkretisieren:

Und zwar hab ich keine Ahnung, wie ich einen Ausgang am ATmega einach 
auf "nix" (also halt keine 5V und kein GND) schalte.

Habe erst eine Schaltung mit nem Mikrocontroller gebaut, deshalb weiß 
ich leider selbst für diese einfache Problematik keine Lösung (wird aber 
ja relativ einfach zu machen sein oder?).
Habe mein erste Programm mit C programmiert und würde gerne dabei 
bleiben (aber dort kann ich ja normal nur die Ausgangspins auf high oder 
low setzen)

Vielen Dank für die guten Links, mit dem neuen Wissen werde ich meinen 
Plan noch etwas anpassen und verbessern. Jetzt muss ich nurnoch wissen 
wie ich den Pin auf "nix" schalte :)

Noch einen schönen Abend
Oliver schrieb:
> Hallo Michael,
>
> wenn Du den Pin mittels DDRx als Eingang schaltest, dann wird er
> hochohmig. Da ist genau das, was Du als "nix" bezeichnet hast.

Hallo zusammen;

Da gibts aber noch ne kleine Falle:
"Eingang" ist nicht automatisch "nix".

Die meisten AVR haben die Möglichkeit interne PULL-UP's Bitweise zu 
aktiviern.
Diese werden dann über PORTx & DDRx in Kombination gesteuert:

---------------------------------------
Port als Ausgang - kräftige Treiber:
---------------------------------------
DDRx = 1  --> Port = AUSGANG
PORTx = 0 --> alle Pins = Low


DDRx = 1     --> Port = AUSGANG
PORTx = 0xFF --> alle Pins = High

----------------------------------------------
Port als Eingang - schwacher Pull-Up möglich:
----------------------------------------------
DDRx = 0     --> Port = EINGANG
PORTx = 0xFF --> alle PULL-UP = EIN

--> FALLE !
Hier sind ca 10-50 KOhm von VCC zum Pin aktiv,
das kann von Logik-Eingängen als High erkannt werden;
die Led's könnten leicht glimmen.


DDRx = 0  --> Port = EINGANG
PORTx = 0 --> alle PULL-UP = AUS, Port ist wirklich Tristate.

--> das ist das nötige "nix"


MFG:MBP
Markus

PS:
Noch ne Falle, was die IO's angeht:

Lesen von PORTx und DDRx liefert immer,
was an der entsprechenden Speicherstelle IM CONTROLLER steht.
Nur "PINx" gibt das her, was von AUSSEN kommt.

Das verwechselt man gerade am Anfang gerne mal und dann wundert man 
sich, warum sich an den Eingängen scheinbar nichts ändert...
Michael N. schrieb:
> Meine erste Überlegung war, dass ich einfach alle Spalten und Zeilen
> z.B. auf Low schalte und dann nur eine Zeile auf High.
> Allerdings kann ich ja nicht gleichzeitig auch die nicht benötigten
> Spalten auch auf High setzen (und selbst wenn das gehen würde, dann
> wären die anderen LEDs ja falsch beschaltet)

Ich gehe nicht davon aus, dass du das Prinzip hinter einer LED-Matrix 
verstanden hast. http://www.mikrocontroller.net/articles/LED-Matrix
Da ist alles beschrieben ...

mfG
...den Eindruck habe ich auch.

Wenn du wirklich zu einem Zeitpunkt immer nur eine LED einschalten 
möchtest, wofür auch immer man das brauchen kann, dann kann man eine 
Matrix aus LEDs natürlich dafür benutzen und muss den Muktiplexgedanken 
dann nicht zwingend softwaremässig implementieren, aber meistens möchte 
man ja etwas darstellen.

T.
OP
Markus B. p. schrieb:
> DDRx = 0  --> Port = EINGANG
> PORTx = 0 --> alle PULL-UP = AUS, Port ist wirklich Tristate.
>
> --> das ist das nötige "nix"

Genau das ist der nötige Teil der gefehlt hat.
Ok dann schalte ich einfach alle Bit auf 0, damit erstmal alles Eingänge 
sind und dann halt in jedem Durchlauf einen pro Seite auf 1 und eine 
Seite halt High und die andere Low. Dann sollte das ganze funktionieren.


Vielen Dank für die Hilfe, ich denke den Rest bekomme ich hin.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 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.