Forum: Mikrocontroller und Digitale Elektronik 60 LEDs mit AT89S8252 ansteuern.


von Lars B (Gast)


Lesenswert?

Ja und zwar haben wir bei uns auf der Berufsschule schon seid längerem
das Fach µController Technik und wir haben auch schon ne
Grundbestückung fertig , jetzt sollte sich halt jeder mal nen Projekt
überlegen und das dann versuchen umzusetzen und ich hatte halt die Idee
ne Uhr mit Datums und Temperatur anzeige zu machen und halt um das
Display verteilt 60 LEDs anzubringen so das jede sekunde eine mehr
aufblinkt , ich habe nur leider noch keine Ahnung wie genau ich das am
besten mache , hat wer vieleicht ein paar links die sich mti der
ansteuerung von mehreren LEDs beschäftigen ? Ich habe bei google nichts
passendes gefunden...

MFG
Lars

von Bernhard S (Gast)


Lesenswert?

Ich kenn mich zwar mit dem Zeug auch nicht gut aus aber ich glaube mit
ein paar hintereinandergehängten Schieberegistern währe es möglich
immer eine LED mehr aufleuchten zu lassen.

von Lars B (Gast)


Lesenswert?

das hört sich ja schonmal nach was brauchbarem an was mich etwas weiter
bringt :) dankeschön ich werde mich mal überschieberegister informieren
(hatte bis jetzt nichts mit ihnen zu tun ^^)

von bob (Gast)


Lesenswert?

wie sind die 60 leds angeordnet?

habe hier im forum irgendwo schonmal von jmd ne schaltung gesehen, der
das komplett ohne kontroller gemacht hat. da kam das alles aus nem
eeprom. du koenntest zb die zeit in nem sram speichern und dann von
externer hardware (binaerzaehler etc) die leds ansteuern lassen.

von fabian (Gast)


Lesenswert?

Hi
nimm doch einfach ein paar 74hc595 und einfach über SPI ausgeben.

von Lars B (Gast)


Lesenswert?

Danke erstmal für die zahlreichen Antowrten , aber ich habe noch nie mit
den sogenannten Schieberegistern gearbeitet, habt irh vieleicht nen paar
Infos mehr dazu ? Währe auch cool wenn jemand ne Schaltung hätte die man
sich mal als Beispiel nachbauen kann oder zumindest mal angucken kann um
die Sache zu verstehen !!

von Lars B (Gast)


Angehängte Dateien:

Lesenswert?

brauch ich eigentlich für jede LED nen eigenen 1 kOhm Widerstand ?

Ich habe mal als Anhang auch noch ne PDF mit dem Platinen Layout
angehängt !!!

von Manuel B. (Gast)


Lesenswert?

(entfernt)

von Florian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Lars.

Wenn du es wirklich mit Schieberegistern machen willst, dann kannst du
dir die Schaltung, die ich dazugelegt habe, mal anschauen.

Ist mit 60 Leds und 60 Stück 470 Ohm Widerständen.

Dazu brauchst du 8 Schieberegister... Es gibt auch welche, die 16
Ausgänge für die Leds haben...dann würdest du nur mehr 4 brauchen. Die
bekommt man aber eher schwerer.

Wenn du jede Led einzeln mit einem Widerstand versorgst, dann kannst du
viel mehr muster generieren...Dann sind keine Grenzen mehr gesetzt.

z.B. Du macht dir ein Lauflicht, das einmal in der Sekunde um deine
Digitaluhr läuft, und dazu noch, das die Leds durchaus leuchten, wenn
sie einmal angegangen sind...

Wenn du das mit dem Mikrocontroller machen willst, dann am besten mit
dem Hardware SPI. Da brauchst du dann nur noch 5 Leitungen zu deiner
Schaltung.. Eine Clockleitung,Signalleitung,Output Enableleitung, Plus
und minus.

Wie du siehst, geht bei der Schaltung immer eine Leitung raus, und beim
nächsten IC wieder rein... Du schiebst also ein byte rein z.B.
0b10000000 und die bits die sich im 74HC595 befinden, die schiebt er
hinten wieder raus und in den nächsten ic rein...

Am besten könntest du das mit Tabellen lösen...

Du schiebst 8 bytes rein, und machst dann eine Sekunde pause und dann
das nächste Muster...

Hier ein Beispiel:

Lauflicht:
.db 128,0,0,0,0,0,0,0
.db 64,0,0,0,0,0,0,0
.db 32.0.0.0.0.0.0.0
.db 16.0.0.0.0.0.0.0
.db 8,0,0,0,0,0,0,0
.db 4,0,0,0,0,0,0,0
.db 2,0,0,0,0,0,0,0
.db 1,0,0,0,0,0,0,0
;das waren die Daten vom ersten Schieberegister für die ersten 8 Leds
.db 0,128,0,0,0,0,0,0
.db 0,64,0,0,0,0,0,0
.db 0,32.0.0.0.0.0.0
.db 0,16.0.0.0.0.0.0
.db 0,8,0,0,0,0,0,0
.db 0,4,0,0,0,0,0,0
.db 0,2,0,0,0,0,0,0
.db 0,1,0,0,0,0,0,0
;das waren die Daten vom zweiten Schieberegister für die zweiten 8
Leds


usw.......
Du schiebst immer alle 8 bytes rein, und last sie dann eine Sekunde
ausgeben..

Das gute ist, SPI ist so schnell, man erkennt nicht, wenn man die leds
mit output enable ausschaltet, und dann die neuen Daten reinschiebt.

Ich hoffe, ich konnte Dir ein bisschen weiterhelfen...

Gruß Florian

von Heiner B. (karadur)


Lesenswert?

Hallo

Schau dir doch mal den MAX6956 an. Der ist für sowas gedacht.

von Rahul D. (rahul)


Lesenswert?

Man könnte es auch als Matrix im Multiplex-Betrieb auslegen... (da gibt
es auch fertige Chips u.a. von Maxim)

von Lars B (Gast)


Lesenswert?

Die Idee mit dem Lauflicht ist garnicht mal schlecht vieleicht versuch
ich es dann so zu lösen das man das per Taster druck umstellen kann
also das man entweder mit Lauflicht oder halt ohne Lauflicht die Uhr
betreiben kann , aber ich danke schonmal dafür die Schaltung von
Florian hat mich wieder nen Stück weiter gerbacht :) und ich danke
allen die mir geantwortet haben :) , also wenn ich noch ne frage haben
sollte frag ich nochmal nach aber soweit war es das erstmal :), also
thx @ all

Gruß
Lars

von MartinS (Gast)


Lesenswert?

Der Multiplexbetrieb spart dir eine Menge ICs und Widerstände, egal ob
mit speziel IC oder auch ohne. Ist aber ein wenig mehr Softwareaufwand.

von Florian (Gast)


Lesenswert?

Oder du machst die eine 8x8 Matrix und steuerst die mit Dem Controller
ohne zusätzlichen Ic's an. Es wäre gut, wenn es low Current Leds
wären, damit du deinen Atmel nicht zerstörst..

Folgendes Beispliel:

eine 8x8 Matrix kennst du hoffe ich...

Du Brauchst dabei 2 Ports: z.B. Port P1 und Port P3.

So. Nun schließt du die ganzen Anoden am Port P1 und die ganzen
Kathoden an Port P3 an.

Das Porgramm sollte dann folgendermaßen aussehen:

lade Register 2 mit dem Wert 0b00000001
lade Register 3 mit dem Wert 0b11111110

gib Register 2 an Port P1 und Register 3 an Port P3 aus...
So,die erste Led leuchtet...
call pause ;eine Sekunde Pause
jetzt mach eine Schleife:


schleife:
lade register 2 in den accu
rolle den accu einmal nach links (rl a)
lade den accu wieder in register 2
gib accu an Port P1 aus
vergleiche accu mit wert 0b00000001
wenn gleich, dann springe zu schleife 2
call pause<--- Mach eine Sekunde Pause
jmp schleife

schleife2:
lade register 3 in den accu
rolle den accu einmal nach links (rl a)
lade den accu wieder in Register 3
gib accu an Port P3 aus
call pause
jmp schleife

pause:...1 Sekunde pause
ret
jmp schleife

Meine Assemblerbefehle für die '51 Serie sind nichtmehr die besten.

Ich wollte dir auch kein Programm schreiben, sondern nur eine Aufgabe
für dich, wie du es eventuell realisieren könntest.

Da du ja in der Schule Assembler lernst, dürfte es kein Problem für
dich sein.

Gruß Florian

Ach ja, ich würde nie mehr als eine Led so ansteuern, da ich nicht
weiß, ob der Controller mehrere verträgt..

von Thomas Biehl (Gast)


Lesenswert?

Hallo Lars,
ich würde nen Max7219 bzw. Max7221 nehmen.
Mit dem kann man 64 Led's ansteuern.

Gruß Thomas

von Basti (Gast)


Lesenswert?

@thomas: aber das multiplex geflacker macht es für emv nicht gerade
einfacher (auch wenn das nicht von relevanz ist) ausserdem ist der
maxim ic viel zu teuer. da kannst de auch nen mega16 nehmen, und dir so
ne ansteuerung selber programmieren.

von Philipp B. (philipp_burch)


Lesenswert?

Hi,

mein Vater hat mal eine Funkuhr auf diese Weise gebaut (60 LEDs für
Sekunden und Minuten plus 12 LEDs für die Stunden). Da hat er sich ein
8x8 Matrix gebaut und an den Zeilen jeweils einen SN74HC138 (3 zu 8
Decoder) mit nachgeschaltetem Widerstand angeschlossen. Die Spalten hat
er dann mit einem weiteren SN74HC138 und nachgeschaltetem Inverter mit
Strom versorgt. So hat das ohne Probleme funktioniert und du brauchst
vom Controller nur 6 Ausgänge. Dafür würde ich einen 8 Bit Port nehmen
und dann im Low-Nibble die Zeilen und im High-Nibble die Spalten
ausgeben. So kannst du es am einfachsten zerlegen (Swap bei den AVRs,
swapf bei PICs) und zusammenfügen. Per Multiplex kannst du da auch
jedes beliebige Muster anzeigen.

von kitesurfer1404 (Gast)


Lesenswert?

hi, wollte auch so ein uhr bauen, leider klappen die ersten versuche mit
dem hc595 schon nicht.
hier mein aufbau: (hc595 + atmega8)

hc595:
pin 8 (GND) : GND (ach was....)
pin 16 (vcc) : 5 V
pin 10 (sclr) : 5 V
pin 13 (g) : GND

pin 14 (SI) : pin 2 ( PD0 ) am mega8
pin 12 (RCK) : pin 4 ( PD2 ) am mega8
pin 11 (SCK) : pin 3 ( PD1 ) am mega8

an den ausgängen ( Qa - Qh ) LEDs mit vorwiderständen (200 ohm) gegen
GND

mein programm:

8x
{
bit für PD0 setzen (oder auch nicht, je nach gewünschtem
schaltzustand)

bit für PD1 setzen ( steigende flanke erzeugen )
PD1 zurück setzen
}

dann steigende flanke an PD2


habe die schaltung aus der c't (roboter projekt) übernommen und alles
mögliche aus dem datenblatt versucht.

leider hat nie was geklappt. hab auch die bauteile ausetauscht, aber
das hats auch nicht gerichtet.

wäre euch für eine anfänger-freundliche antwort (wann muss ich wo was
an/aus schalten ;) ) sehr verbunden.

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.