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
:
Verschoben durch Moderator
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..
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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.