Forum: Mikrocontroller und Digitale Elektronik Schaltung für LED-Matrix-Uhr


von Freddy L. (ananas_k)


Angehängte Dateien:

Lesenswert?

Hallo,

vorweg: Ich bin ein Schüler und beschäftige mich noch nicht sehr lange
mit dem Thema Elektronik. Deshalb bitte ich, bei Beschreibungen so genau
wie möglich zu sein und ggf. Quellen zum nachlesen anzufügen.

Zum Projekt:
Ich möchte eine Uhr bauen. Als Mikrocontroller kommt ein Atmega-328P-PU
zum Einsatz. Als Anzeige habe ich jedoch keine 7-Segment-Anzeigen
sondern selber gelötete LED-Matrizen (5x3x1, h x b x l). Diese Anzeigen
sind so aufgebaut, dass ich immer nur die LEDs von der Vertikalen und
der Horizontalen ansteuern kann (ähnlich wie bei einem LED-Cube, falls
den jemand kennt).
Um die Vertikale anzusteuern benutze ich ein Schieberegister, dem ich
einfach jedes 5te mal ein HIGH an den Data-Pin lege, sodass jede Ebene
nacheinander geschaltet wird.
Die Horizontalen sind direkt am Mikrocontroller angeschlossen.
Der 1Hz-Takt, der beim Frequenzteiler herauskommt, soll dann einen 
Interrupt auslösen. Die Interruptfunktion soll dann im µC eine Variable 
hochzählen. Diese Variable stellt quasi meine Uhr da.
Zwischen den Interrupts müsste der Controller nur den Schieberegister 
und die 12 Pins für die 4 Matrizen an/aus schalten. Welche der 12 Pins 
geschaltet werden, muss dann wieder abhängig davon sein, welche Zahlen 
in den Zeit-Variablen stehen.

Meine Frage ist jetzt, ob der Schaltplan, den ich gezeichnet habe ok
ist, oder ob ich noch an manchen Stellen nachbessern muss. Ich würde
mich freuen, wenn man mir dabei helfen könnte!

Gruß,
Freddy

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

AREF nicht an VCC, sondern höchstens an einen 0,1µF gegen Masse. Reset 
des Shiftregisters auf einen Pin führen, damit du definierte Zustände 
heribeiführen kannst - sind ja genug da. VCC direkt am MC mit 0,1µF 
abblocken, und das an allen VCC Pins (auch AVCC).Ein MC Ausgang liefert 
gutwillig nur etwa 15-20mA, ob dir das reicht, weiss ich nicht.

Mit ein bisschen Rechnen und dem Beitrag über die genaue Sekunde kannst 
du dir den Sekundentimer sparen:
https://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC
Alternativ den MC mit dem internen RC Oszillator laufen lassen und einen 
Uhrenquarz an TOSC1 und TOSC2.

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Freddy L. schrieb:
> Meine Frage ist jetzt, ob der Schaltplan, den ich gezeichnet habe ok
> ist,

Völlig überdimensioniert.

Was willst du mit 2 Quarzen ? Beide dazu zu ungenau für eine Uhrzeit.

Was willst du mit einem Frequenzteiler, wenn der ATmega32 sowieso nichts 
zu tun hat und wunderbar Frequenzen teilen kann, der hat sogar Timer 
dazu schon eingebaut.

Was willst du mit einem Schieberegister das aus 3 Anschlüssen 5 
Anschlüsse macht wenn du noch (mehr als) 2 Anschlüsse am uC übrig hast 
(z.B. PB4 und PB5) ?

An welche Bausteine geht +12V als VDD ? (4521 steht daneben, also der 
Frequenzteiler, wieso willst du den mit 12V versorgen, und dann seine 
Ausgangssignal in den uC stopfen der mit 5V läuft ?) Wozu die 12 V ?

Du hast also 4 x 5 x 3 = 60 LEDs, vermutlich normale 5mm Modelle mit 
20mA und 2.1V oder 3.6V. Wie viele sollen davon zur gleichen Zeit 
leuchtend erscheinen ?

Wenn das alles nach 12 x 5 Multiplex aussieht, dann bedenke, daß wenn 
eine LED nur 1/5 der Zeit an sein kann, sie dafür 5 mal mehr Strom 
benötigt um gleich hell zu erscheinen. Und wenn die LED normal mit 20mA 
leuchtet, dann braucht die 100mA, und so viel Strom kann der uC nicht 
liefern. Dafür bietet sich tatsächlich ein Schiebregister an, und zwar 
eines das gleich die LEDs mit Konstanstrom versorgt, damit man sich die 
Vorwiderstände sparen kann, z.B. CAT4016 (16 x 100mA).

Damit besteht die Schaltung aus 2 ICs: Dem uC und dem LED-Treiber, und 
du musst 5 horizontale schalten auf denen 1.2A fliessen, dafür würde ich 
kleine P-Kanal MOSFETs nehmen wie IRLML5203. An den uC kommt eine 
32768HZ Uhrenquartz und er wird auf low frequency oscillator geschaltet 
denn die Rechenleistung reicht auch dann locker. Da der uC bloss 5 
MOSFETs und den CAT4016 mit 3 Leitungen berdienen muss, reicht auch ein 
uC wie ATmega88 im kleinen Gehäuse. Bei Uhren will man noch die Uhrzeit 
stellen, also sind immer noch ein paar Anschlüsse übrig für Tasten. Der 
Schaltplan sieht dann eher so aus:
1
        +-----+
2
 Quartz |  VCC|--+--+--+--+--+-- +5V/1.2A direkt aus USB Netzteil
3
     +--|     |  |  |  |  |  |S
4
     |  |     |--(--(--(--(-|I IRLML5203
5
  32kHz |     |--(--(--(-|I  |  +--------------------------+
6
     |  |     |--(--(-|I  |  +--|A                         |
7
     +--|     |--(-|I  |  +-----|A           5 x 12        |
8
        |     |-|I  |  +--------|A            LEDs         |
9
    +---|     |  |  +-----------|A                         |
10
    |   |     |  +--------------|A K K K K K K K K K K K K |
11
 Stunde | uC  |                 +--------------------------+
12
    |   |     |                    | | | | | | | | | | | |
13
    +---|     |                  +-------------------------+
14
    |   |     |------------------|Sin       CAT4016        | 
15
 Minute |     |------------------|Clock                    |
16
    |   |     |------------------|Latch                    |
17
    +---|     |                  +-------------------------+
18
 Taster |  GND|-----+--680R---------+ Rset
19
        +-----+     |

Grundlagen hier:
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.8.1

: Bearbeitet durch User
von Freddy L. (ananas_k)


Angehängte Dateien:

Lesenswert?

Ich habe mal den Schaltplan angepasst. Zusätzlich habe ich einen 
Schaltplan für eine Matrize angefertigt. Die Hoizontalen werden dann 
zusammengeschaltet.

Michael B. schrieb:
> Was willst du mit 2 Quarzen

Das eine Quarz ist als Taktgeber für den 1Hz-Takt gedacht. Das zweite 
16MHz-Quarz wollte für den Atmega benutzen, da ich den mit der 
Arduino-API programmieren wollte. Um es nicht unnötig zu 
verkomplizieren, dachte ich, ich baue da auch einen 16MHz-Quarz dran.

Michael B. schrieb:
> An welche Bausteine geht +12V als VDD ? (4521 steht daneben, also der
> Frequenzteiler, wieso willst du den mit 12V versorgen, und dann seine
> Ausgangssignal in den uC stopfen der mit 5V läuft ?) Wozu die 12 V ?

Fehler im Schaltplan, sollte jetzt behoben sein.

Michael B. schrieb:
> Was willst du mit einem Frequenzteiler, wenn der ATmega32 sowieso nichts
> zu tun hat und wunderbar Frequenzen teilen kann, der hat sogar Timer
> dazu schon eingebaut.

Ich bin mir nicht sicher, wie viel der Atmega328 schafft. Ich habe ihn 
nicht für schnell genug eingeschätzt, als dass er beide Aufgaben 
(Schalten der Anzeige und Zählen der Frequenz) gleichzeitig schafft.

Michael B. schrieb:
> Wenn das alles nach 12 x 5 Multiplex aussieht, dann bedenke, daß wenn
> eine LED nur 1/5 der Zeit an sein kann, sie dafür 5 mal mehr Strom
> benötigt um gleich hell zu erscheinen. Und wenn die LED normal mit 20mA
> leuchtet, dann braucht die 100mA, und so viel Strom kann der uC nicht
> liefern. Dafür bietet sich tatsächlich ein Schiebregister an, und zwar
> eines das gleich die LEDs mit Konstanstrom versorgt, damit man sich die
> Vorwiderstände sparen kann, z.B. CAT4016 (16 x 100mA).

Das mit der höheren Stromstärke wusste ich bisher noch nicht. Man könnte 
sicherlich den LED-Treiber einsetzen, jedoch würde sich das in meinem 
Fall nicht lohnen, da ich die Transistoren und Vorwiederstände in 
ausreichender Zahl bereits besitze. Damit sollte sich doch das Problem 
gelöst haben?



Danke an alle, die mir bisher geholfen haben, ich schätze das sehr!

Gruß,
Freddy

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Freddy L. schrieb:
> Ich bin mir nicht sicher, wie viel der Atmega328 schafft. Ich habe ihn
> nicht für schnell genug eingeschätzt, als dass er beide Aufgaben
> (Schalten der Anzeige und Zählen der Frequenz) gleichzeitig schafft.

Das macht der kleine Kerl nebenbei und rechnet dir auch noch Primzahlen 
aus. Das ist überhaupt kein Problem.
Wenn dein Programm auch nur einigermassen sinnvoll geschrieben ist, 
langweilt er sich.
Der Timer könnte bspw. ein 10ms Interrupt produzieren, in der sowohl das 
Multiplex als auch das Zeit Getriebe bearbeitet wird.

Freddy L. schrieb:
> LED-Matrix.PNG

Das stimmt aber was nicht. Die oberen Transistoren gehen mit ihren 
Kollektoren auf Plus und nicht auf GND, und die unteren sollten mit den 
Emittern auf GND und mit den Kollektoren an die LED. Du verlierst 2 * 
mal Uce auf dem Weg, was benutzt du für LED?

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Freddy L. schrieb:
> Ich bin mir nicht sicher, wie viel der Atmega328 schafft. Ich habe ihn
> nicht für schnell genug eingeschätzt, als dass er beide Aufgaben
> (Schalten der Anzeige und Zählen der Frequenz) gleichzeitig schafft.

Der wäre mit beiden zusammen nicht mal zu 0.1% ausgelastet, was willst 
du ihn in der übrigen Zeit tun lassen ?

Nach wie vor die als Uhr untauglich ungenauen hochfrequenten Quartze.

Freddy L. schrieb:
> Zusätzlich habe ich einen Schaltplan für eine Matrize angefertigt.

Oje, weitgehend falsch.

Angenommen die 5 BC547 schalten als Emitterfolger, dann bitte von +5V 
und nicht von GND.

Dann wären die 3 BC547 falschrum und rechts GND.

Dann könnte man das 4 mal aufbauen, für jede Zieffer einzeln, macht 32 
Tarnsistoren. Na, wer sonst nichts zu tun hat...

Die 5 würden als 1:5 Multiplex laufen und die 3 müssten 20mA*5=100mA 
schalten, macht 300mA für Q1-Q5 (besser BC337 sonst meckert Wolfgang 
wieder). Die 300mA als Emitterfolger benötigen 3mA Basistrom, auch 4 
davon lassen sich damit aus einem Arduino-Ausgang versorgen.

An der Basis der LED Matrix vertikale Transistoren fehlt mir aber ein 
Basisvorwiderstand für ca. 10mA Basisstrom, also 470 Ohm.

von Karl M. (Gast)


Lesenswert?

Freddy,
man muss auch noch feststellen, dass der AVR µC gar nicht laufen wird, 
denn er erhält keine Spannung, so dass auch ein Strom fließen könnte.

Denke bitte an einen geschlossenen Stromkreis und was Kodensatoren für 
Bauteile sind.

von Freddy L. (ananas_k)


Angehängte Dateien:

Lesenswert?

Vielen, vielen Danke für den bisherigen Input euch allen!

Michael B. schrieb:
> Nach wie vor die als Uhr untauglich ungenauen hochfrequenten Quartze.

Was sollte ich den stattdessen nehmen?

Michael B. schrieb:
> An der Basis der LED Matrix vertikale Transistoren fehlt mir aber ein
> Basisvorwiderstand für ca. 10mA Basisstrom, also 470 Ohm.

Ich habe die Transistoren umgedreht, jetzt sollten sie richtig herum 
verbaut sein. Den Widerstand habe ich auch hinzugefügt. Ist das ok so?

Karl M. schrieb:
> man muss auch noch feststellen, dass der AVR µC gar nicht laufen wird,
> denn er erhält keine Spannung, so dass auch ein Strom fließen könnte.
>
> Denke bitte an einen geschlossenen Stromkreis und was Kodensatoren für
> Bauteile sind.

Ich weiß leider überhaupt nicht was du meinst. Könntest du das 
vielleicht weiter ausführen?


Gruß,
Freddy

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Freddy L. schrieb:
> Ich habe die Transistoren umgedreht, jetzt sollten sie richtig herum
> verbaut sein. Den Widerstand habe ich auch hinzugefügt. Ist das ok so?

 LOL.
 Richtig ja, OK nein.
 Normalerweise ist GND unten und Vcc oben - liest sich leichter.

Freddy L. schrieb:
> Ich weiß leider überhaupt nicht was du meinst. Könntest du das
> vielleicht weiter ausführen?

 Vcc direkt an AVR-Vcc und nicht ein Kondensator dazwischen.


 P.S.
 Und die 3 Transistoren rechts schalten nach wo ?

von Freddy L. (ananas_k)


Angehängte Dateien:

Lesenswert?

Marc V. schrieb:
> Vcc direkt an AVR-Vcc und nicht ein Kondensator dazwischen.

Danke!


Marc V. schrieb:
> Und die 3 Transistoren rechts schalten nach wo ?

Ist irgendwie im Schaltplan verloren gegangen. Da kommen die 12V vom 
Netzteil dran. Die Basis der Transistoren sind mit dem µC verbunden, 
sodass, wenn die Pins vom µC geschaltet werden, die 12V vom Netzteil zu 
den LEDs fließen sollen.

Bei den LEDs handelt es sich um folgendes Produkt.
https://www.amazon.de/Eastlion-orange-wasserklar-Leuchtdioden-Dioden/dp/B00M1LYRB4/ref=pd_sim_201_4/253-6487678-1251207?_encoding=UTF8&psc=1&refRID=FJ2T1RKEA1HS7VEDBTDA

Datenblatt habe ich leider nicht gefunden.

Gruß,
Freddy

von Marc V. (Firma: Vescomp) (logarithmus)


Angehängte Dateien:

Lesenswert?

Freddy L. schrieb:
> Ist irgendwie im Schaltplan verloren gegangen. Da kommen die 12V vom
> Netzteil dran. Die Basis der Transistoren sind mit dem µC verbunden,
> sodass, wenn die Pins vom µC geschaltet werden, die 12V vom Netzteil zu
> den LEDs fließen sollen.

 LOL.
 Dafür stehen die LEDs aber irgendwie verkehrt rum...

 P.S.
 Bild anbei.

: Bearbeitet durch User
von Brummbär (Gast)


Lesenswert?

AVCC (Pin 20) entweder über eine Drossel an VCC oder direkt an VCC (ist 
hier egal, da du den Analogeingang sicherlich nicht verwendest).

von Michael B. (laberkopp)


Lesenswert?

Freddy L. schrieb:
> Was sollte ich den stattdessen nehmen?

Uhrenquarze, wurde doch schon gesagt.

Freddy L. schrieb:
> Ich habe die Transistoren umgedreht,

Sowohl von mir als auch von Matthias S. wurde es andersrum beschrieben.

Du meinst, das amcht keinen Unterschied ?

Erst mal sind nun deine LEDs verkehrtrum, an denn hatten sich Matthias 
und ich orientiert.

Dann sind nun die 5 Spaltentransistoren in Emitterschlatung mit 
Vorwiderstand. Dabei kann man aber nicht auf die Stromverstärkung des 
Emitterfolgers bauen mit ca. 100, sondern braucht 1/10 bis 1/20 des 
Kollektorstroms Sättigungsstrom damit der Spannungsabfall überhaupt 
kleiner wird. Da deine Spalten 300mA fliessen lassen also 15-30mA, also 
so um 220 Ohm statt 470 Ohm. Ausserdem braucht deine Schaltung 20 
Widerstände während die andere nur 12 braucht (für 4 Stellen).

Das wurde doch für die andersrum gebaute Schaltung haarklein 
vorgerechnet, warum baust du um und bist dann so faul deine Änderung 
nicht nachzurechnen ? Allgemeine Phobie vor Mathe ? Es sind 
Grundrechenartken und bloss das ohm'sche Gesatz, nichts schwieriges.

von Freddy L. (ananas_k)


Lesenswert?

Entschuldigung,

ich bin jetzt tatsächlich etwas verwirrt. Ich kann dir nicht ganz 
folgen. In meinem Kopf ist ein Transistor ein einfacher Schalter, der 
die Spannung, die am Emitter anliegt zum Kollektor "durchschaltet", wenn 
an der Basis ein Strom anliegt. Deshalb habe ich die Schaltung so 
aufgebaut, wie ich sie angefügt habe (das die LEDs falsch herum sind, 
lasse ich jetzt außen vor).

Ich weiß jetzt nicht genau, was ihr machen wollt. Mir fehlen wirklich 
die Grundlagen, jedoch scheue ich mich überhaupt nicht vor Mathematik 
oder jeglicher Rechnerei. Ich habe bloß nicht verstanden, was genau du 
versuchst mir zu erklären.

Michael B. schrieb:
> Dann sind nun die 5 Spaltentransistoren in Emitterschlatung mit
> Vorwiderstand. Dabei kann man aber nicht auf die Stromverstärkung des
> Emitterfolgers bauen mit ca. 100, sondern braucht 1/10 bis 1/20 des
> Kollektorstroms Sättigungsstrom damit der Spannungsabfall überhaupt
> kleiner wird. Da deine Spalten 300mA fliessen lassen also 15-30mA, also
> so um 220 Ohm statt 470 Ohm. Ausserdem braucht deine Schaltung 20
> Widerstände während die andere nur 12 braucht (für 4 Stellen).

Diesen Teil verstehe ich nicht.

Trotzdem danke für eure Bemühungen. Vielleicht kann ich ja wenigstens 
etwas hier mit raus nehmen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Freddy L. schrieb:
> Diesen Teil verstehe ich nicht.

Schau dir doch mal die 'Multiplexschaltung mit Schieberegistern' im 
Artikel LED-Matrix an:
https://www.mikrocontroller.net/articles/LED-Matrix

So sollten die Transistoren verschaltet werden. Die Schieberegister 
musst du ja nicht benutzen.
Mit orangen LED hast du genug Reserve, um trotz der 2 Transistoren, mit 
denen die LEDs in Reihe sind, genug Spannung zu haben. Rechne damit, das 
dir etwa 1V verloren geht, und berechne die Vorwiderstände auf so etwa 
80-100mA für Pulsbetrieb.
Teste das Multiplexen, bevor du die LEDs powerst, denn wenn die Matrix 
stillsteht, ist das für eine LED zu viel.

von Michael B. (laberkopp)


Lesenswert?

Freddy L. schrieb:
> Da deine Spalten 300mA fliessen lassen also 15-30mA, also
>> so um 220 Ohm statt 470 Ohm. Ausserdem braucht deine Schaltung 20
>> Widerstände während die andere nur 12 braucht (für 4 Stellen).
>
> Diesen Teil verstehe ich nicht.

Es wurde einfach der ehemals 470 Ohm Widerstand neu berechnet, denn an 
der Stelle braucht man eben einen anderen Widerstandswert von 220 Ohm. 
(Sicher: Vermutlich fällt auch ein falscher nicht auf, so 
unterschiedlich sind die Werte nicht, aber man will ja eine richtig 
dimensionierte Schaltung die immer funktioniert und nicht bloss eine, 
die eventuell je nach Bauteilexemplar zufälligerweise funktioniert).

Und die Anzahl der Widerstände wurde neu durchgezählt, man braucht für 
deine Schaltung 20 statt ehemals 12, also 8 mehr.

Irgendwie fand ich das jetzt nicht zu schwer verständlich...

von Freddy L. (ananas_k)


Lesenswert?

So aufgebröselt ist es dann doch recht einfach.
Tut mir echt leid, mit Schaltplänen hab ich es noch nicht so. Ist aber 
auch die erste richtige, die ich selber entwerfe. Trotzdem danke ich 
euch nochmals für eure Bemühungen!

Gruß,
Freddy

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.