Forum: Mikrocontroller und Digitale Elektronik Binäruhr selbstbau


von Alex (Gast)


Lesenswert?

Hallo,

ich probier gerade ein wenig mit AVR-GCC rum. Vorher hab ich mit Bascom 
gespielt. Nun will ich mich an mein erstes Projekt machen.

Es soll eine Binäruhr werden, die von einem AVR MEGA 8 gesteuert wird. 
Schaltplan siehe Anhang( bitte nicht böse nehmen ich hab ihn nicht 
fertig gemalt).

Mit ihr will ich die Uhrzeit, das Datum und den Wochentag darstellen.
Insgesamt komme ich so auf 46 LEDs(wenn ich die unnötigen 
rausschmeise)(HH:6 + MM:7 + SS:7 + DD:6 + MM:5 + YY:8 + Wotag:7 = 46 
LEDs).
Wenn ich das ganze nun in einer 4x7 Matrix aufbaue (siehe Anhang)müsste 
ich die LEDs Multiplexen. Die Vorwiderstände der Spalten werden gemäß 
der SpaltenLEDs angepasst. Spalte1 stellt die Stunden dar, Spalte2 die 
Minuten... .

Der Mega8 soll mit Timer2 im RTC Modus betrieben werden.

Ich nutze also

PC[0..3] als Zeilen
PB[0..5] + PD7 als Spalten

dadurch habe ich beide externen Interrupts frei für Taster (und evtl. 
DCF), sowie I2C und RS232 zum "ausbauen".

Nun zu meiner Fragen:

- Schafft der Mega8 das alles zu multiplexen( hab das was von 40Hz 
blinkfrequenz gehört) - wie bestimmt ihr das?
- Gibt es bessere Vorschläge - ich will eigentlich versuchen ohne viel 
extra-Bausteine auszukommen.
- Wieviel Strom dürfen die LEDs benötigen(20mA)?



Vorteile von dieser Schaltung, die ich sehe:
- günstig
- wenig Bauteile
- ausbaufähig

mfg Alex

Danke

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Anhang.

von Matthias (Gast)


Lesenswert?

also diese Multiplexschaltung halte ich nicht für sinnvoll, da ja 
eigentlich jede led einzeln angesteuert werden muss...

von Matthias (Gast)


Lesenswert?

Ich würde dir raten, die LEDs so anzuklemmen:

port x0:       sek(1)       min(1)       stunde(1)    tag(1)   ...

port x1:       sek(2)       min(2)       stunde(2)    tag(2)   ...

port x2:       sek(4)       min(4)       stunde(4)    tag(4)...

port x3:       sek(8)       min(8) ...

port x4:

...

Somit brauchst du nix umrechnen. EInfach die Information min/sek/std.. 
auf den port mit ner zuweisung ausgeben...
Die Multiplexung kann über nen timer erfolgen mittel timer_overflow. das 
ist schnell genug fürs auge..

von Alex (Gast)


Lesenswert?

Danke,

aber so will ichs ja anklemmen. Im Prinzip hab ich dann ein 
"gemultiplextes" BCD Signal.

Wenn ich alle LEDs auf einmal schalte, überlaste ich dann nicht meinen 
Spaltenport ( z.B. Zahl 7 bei Jahr => 3LEDs => 3*x mA = 20mA ). Ich 
wollte eigentlich "helle" LEDs nehmen weil das ganze am Schluss hinter 
ne Milchige scheibe soll.

mfg

von entity (Gast)


Lesenswert?

Hallo!

im Anhang mal eine andere Lösung, die ich gerade baue. Allerdings mit 20 
LEDs. Angesteuert durch ein 20 Bit-Schieberegister aus 3x8 Bit 
Registern.

von entity (Gast)


Angehängte Dateien:

Lesenswert?

so hier aber.

von Fred (Gast)


Lesenswert?

Hi,

nimm Low-Current-LEDs, die brauchen nur etwa 2mA pro Stück und sind auch 
nicht viel teurer als Standard. Ansteuern würde ich über zwei Ports, 
einen zum durchschalten (Stunden, Minuten, Sekunden, Tag, Monat, Jahr, 
evtl Jahr2, Wochentag), der zweite Port gibt das jeweilige Bitmuster 
aus.
Den zweiten Port kann man dann direkt mit den entsprechenden Bitwerten 
füttern, den ersten Port über einen Timer mit genügen großem Vorteiler 
laufen lassen. Ich würde eine Frequenz von etwa 50Hz anstreben, das 
wären 2,5ms pro Reihe. Da die LEDs nur kurze Zeit an sind, müssen die 
auch mit höherem Strom betrieben werden (sonst sieht sie keiner mehr), 
das müßte man vorher im Datenblatt checken was die aushalten.
Wenn Du nicht noch mehr Bits in die Anzeige pressen willst, dann sollten 
zwei Ports des Mega8 ausreichen, den Rest kannste dann für Schalter, 
Taster oder was Dir grad einfällt verwenden. Bei der oben genannten 
Frequenz für die Anzeige sollte der µC auch noch genug Reserven haben, 
um alle Berechnungen, die Dir zur Zeit einfallen, ausführen zu können.
Gruß

Fred

von Matthias (Gast)


Lesenswert?

@entity:
Warum nimmst nicht die eingebaute SPI-Schnittstelle??

@Alex:
Ja, das muss beachtet werden. Ich würde dir npn-Transistoren in 
Kollektorschaltung empfehlen, als Spaltenschalter. Aber du brauchst in 
jeder Zeile einen Vorwiderstand.

PS: erfahrungsgemäß reichen meist 10mA pro LED. Da du multiplext, kannst 
du den Strom verfielfachen, dass der Mittelwert wieder 10..20mA wird...

von Matthias (Gast)


Lesenswert?

ich würde aber >>100Hz, besser einige kHz gehen..

von Alex (Gast)


Lesenswert?

Wenn ich das jetzt richtig verstanden habe Fred willst du "auch" alle 
LEDs auf einmal schalten. => Du würdest also in die Zeilen die 
Vorwiderstände einbauen? Wenn er auf der Spalte ist, sind die LEDs immer 
unterschiedlich hell oder evtl. gar nicht an.

Mit "meiner Methode" würde das ganze so gehen C-Code:
//Hier mal vorausgesetzt, dass nur eine Spalte angeschlossen wird.

void ledout(uint8_h data){
  PORTC = data & (1 << PC0);
  PORTC = data & (1 << PC1);
  PORTC = data & (1 << PC2);
  PORTC = data & (1 << PC3);
}
main (){ ...
  // erste Stelle schreiben
  // hier: Spalte 1 high
  ledout( ... );  // Parameter für erste Stelle
  // hier: Spalte 1 low
  // zweite Stelle schreiben
  ledout( ~... ); // Parameter für zweite Stelle invertiert übergeben

Vorteil des Algorithmuses er dauert immer gleich lange

von entity (Gast)


Lesenswert?

@Matthias
Du meinst so hier?:
http://www.mikrocontroller.net/articles/Porterweiterung_mit_SPI

Davon wußte ich noch nichts, vielen Dank für den Tipp. Die 
Programmierung vereinfacht sich dadurch ja sicher erheblich!



von Matthias (Gast)


Lesenswert?

bei mir es etwa so gehen:

(pseudocode)
{
port_anderer = 1, 2, 4, 8, ..    // ausgabe der aktiven spalte
portc = data;   // entweder min, sek oder std, oder..
}

Das packst du in eine timer-overflow-ISR und tust bei jedem aufruf den 
port_anderer weiterschalten (1=>2=>4=>..) und die nächsten daten 
ausgeben..

Vorteil des Algorithmuses:
 er dauert immer gleich lange & ist ist einfacher..

und es sind ja nur paar widerstände und trans. notwendig...


@entity:
geht bis quartzfreq/2..., bitte schön

von Alex (Gast)


Lesenswert?

Hallo,

nochmal. Den Pseudocode von Matthias hab ich verstanden, ist soweit auch 
kein Problem. Sowas in der Art hab ich das gestern Nachmittag auch mal 
geschrieben.

Wenn ich euch alle richtig verstehe würdet ihr Low-Current LEDs nehmen. 
Und alle Ports auf einmal schalten. Aber was ist wenn ich "MEHR" Strom 
will? Nur darum bin ich ja auf die Idee mit dem getakteten Zeilensignal 
gekommen.

Meine Problem momentan ist, dass ich nicht einfach einen Transistor zum 
Schalten der Spalten nehmen kann, da ja Strom in beide Richtungen 
fließen können muss.

Zu meinem zweiten Problem gehört noch folgendes:
Wenn ich z.B. folgendes Mache:

PORTB = (1<<PB0);
PORTB = (1<<PB1);

und an PB0 und PB1 ne LED angeschlossen habe fließt dann überhaupt mal 
auf PB0 ein Strom? Wenn mein AVR mit 4Mhz läuft, kann dann das I/O 
Register überhaupt so schnell schalten? Oder ist dann die LED an PB0 
"für wenige µs ein"? Ich denke nämlich nicht, dass das reichen wird.

Oder müsste ich nach jedem schalten einige µs Delay geben?
Mit der Timermethode von Matthias ist mir das erst richtig bewusst 
geworden.

mfg

von Rahul, der Trollige (Gast)


Lesenswert?

>also diese Multiplexschaltung halte ich nicht für sinnvoll, da ja
>eigentlich jede led einzeln angesteuert werden muss...

>4x7 Matrix

Irgendwie erinnert mich der Aufbau an "Chalieplexing"*.

>Wenn mein AVR mit 4Mhz läuft, kann dann das I/O
>Register überhaupt so schnell schalten? Oder ist dann die LED an PB0
>"für wenige µs ein"?

Die Register schaffen es auf jeden Fall. Die Frage ist eher: Schaffen es 
die LEDs in der kurzen Zeit hell genug zu leuchten?

>Das packst du in eine timer-overflow-ISR und tust bei jedem aufruf den
>port_anderer weiterschalten (1=>2=>4=>..) und die nächsten daten
>ausgeben..

Naja, ob es unbedingt ein Overflow sein muß, sei dahingestellt.

Schlisslich gibt es so Sachen wie CTC-Modus, womit man sich auch 
gleichzeitig noch eine Zeitbasis für die Uhr basteln kann.


*http://www.maxim-ic.com/an1880
http://en.wikipedia.org/wiki/Charlieplexing

von Falk (Gast)


Lesenswert?

@Rahul, der Trollige (Gast)

>Register überhaupt so schnell schalten? Oder ist dann die LED an PB0
>"für wenige µs ein"?

>Die Register schaffen es auf jeden Fall. Die Frage ist eher: Schaffen es
>die LEDs in der kurzen Zeit hell genug zu leuchten?

Sicher. 0815 LEDs schalten in 50ns und weniger.

MfG
Falk

von twede (Gast)


Lesenswert?

> Sicher. 0815 LEDs schalten in 50ns und weniger.

Naja, schalten tun die LEDs schon, aber wirklich Ihre volle Leuchtstärke 
erreichen sie so nicht. Prinzipiell würde ich die Umschaltung der 
LED-Matrix immer nur so schnell machen, dass sich für die gesamte 
Anzeige eine Wiederholrate zwischen 60 .. 100Hz ergibt. Damit ist die 
Anzeige schnell genug um "für die meisten Betrachter" nicht zu flackern, 
aber die LEDs sind solange wie möglich an.

Eventuell ist es auch sinnvoll den Strom für die LEDs etwas über den 
angegebenen Nennstrom festzulegen. Die LEDs vertragen im allgemeinen 
eine sehr viel höheren Peakstrom (Das Datenblatt der LEDs ist da immer 
hilfreich.). Allerdings muss bei dieser Ansteuerung sichergestellt sein, 
dass die Ansteuerungssoftware wirklich funktioniert. Denn wenn dann mal 
die SW stehen bleibt oder anstürzt, dann ist die aktuell angesteuerte 
LED-Spalte sicher hin...

Ansonsten sollte man bei der Auswahl der LEDs nach Möglichkeit keine 
LowCurrent-Modelle für die Matrix-Ansteuerung verwenden, weil diese 
Typen generell nicht so hell sind und außerdem in der Ansteuerung auch 
relativ langsam. Dann lieber eine richtig schöne Leistungsstufe für die 
LEDs einplanen. Pläne für Matix-Treiber findet man den den 
unterschiedlichsten Varianten zu hauf im Internet. Eine Variante, so wie 
ich sie benutze findet man z.B. unter 
http://www.thomas-wedemeyer.de/elektronik/AVR/avr-dcf-clock.html

So weit!
Thomas

von Falk (Gast)


Lesenswert?

@twede

>Naja, schalten tun die LEDs schon, aber wirklich Ihre volle Leuchtstärke
>erreichen sie so nicht.

??? Woher weisst du das? Gemessen?

>LED-Matrix immer nur so schnell machen, dass sich für die gesamte
>Anzeige eine Wiederholrate zwischen 60 .. 100Hz ergibt. Damit ist die
>Anzeige schnell genug um "für die meisten Betrachter" nicht zu flackern,
>aber die LEDs sind solange wie möglich an.

[ ] Du hast PWM verstanden.

>Eventuell ist es auch sinnvoll den Strom für die LEDs etwas über den
>angegebenen Nennstrom festzulegen. Die LEDs vertragen im allgemeinen

Der Pulsstrom MUSS höher als der Nennstrom bei normaler 
Gelichstromansteuerung sein, mämlich um den Multiplexfaktor höher. 
Arithmetischer Mittelwert und so.

>LowCurrent-Modelle für die Matrix-Ansteuerung verwenden, weil diese
>Typen generell nicht so hell sind und außerdem in der Ansteuerung auch
>relativ langsam. Dann lieber eine richtig schöne Leistungsstufe für die

Langsam? Wie langsam denn? Die sind garantiert schneller als es für die 
schnellste PWM notwenig ist. Als "Leistungsendstufe" tuns ein paar 0815 
Transistoren oder ein ULN2003.

MFG
Falk

von Rahul D. (rahul)


Lesenswert?

>[ ] Du hast PWM verstanden.

Eher das "multiplexen von Anzeigen"...

von Peter D. (peda)


Lesenswert?

twede wrote:

> Anzeige eine Wiederholrate zwischen 60 .. 100Hz ergibt. Damit ist die
> Anzeige schnell genug um "für die meisten Betrachter" nicht zu flackern,
> aber die LEDs sind solange wie möglich an.


Das ist Mumpitz mit Soße.

Wenn Du ne 8*8 Matrix hast, ist jede LED genau 12,5% der Zeit an. Wie 
lange das ist, spielt keine Geige.

Lediglich bei über 1MHz kann es leicht dunkler werden, durch die 
Befehlsausführungszeit (2 * OUT = 100ns). Dann bist Du aber nur noch am 
Interrupten.

Ich hab auch mal 20kHz genommen, weil ich grad so nen Timerinterrupt 
brauchte.
In der Regel nehme ich etwa 1,6kHz (1,6kHz / 8 = 200Hz Bildfrequenz).


Peter


P.S.:
Bei hohen Frequenzen sollte man die Treiber in Kollektorschaltung 
benutzen, weil sonst die Miller-Kapazität stören kann 
(Nachleuchteffekt).

von twede (Gast)


Lesenswert?

@falk

>??? Woher weisst du das? Gemessen?

Ne, habe ich nicht. Aber eine "normale" Diode schaltet ja irgendwann 
auch nicht mehr richtig durch, u.a. bedingt durch die Kapazität. 
Entsprechendes müsste auch für LEDs gelten. Ob das jetzt bei eine 
Ansteuerfrequenz von 1MHz oder 20MHz (->50ns) ist, keine Ahnung. Hängt 
sicher von der Bauform, der  Kapazität und der Leuchtfarbe (-> 
unterschiedliche Halbleitermaterialien) der LED ab.

> Der Pulsstrom MUSS höher als der Nennstrom bei normaler
> Gelichstromansteuerung sein, mämlich um den Multiplexfaktor höher.

Für die gleiche Leuchtstärke ist das auf jeden Fall. Der begrenzende 
Faktor ist dabei allerdings der im Datenblatt angegebene Pulsstrom und 
eventuell Pulsdauer. Wenn man allerdings als Anfänger gerade anfängt mit 
der Programmierung in C würde ich die Stromwerte so definieren, das auch 
bei einem SW Absturz alles heile bleibt. Dann ärgert man sich nicht so, 
wenn mal wieder die SW hängenbleibt.

Zum Thema Low Current-LEDs: Das letzte Mal als ich ein paar 
LowCurrent-LEDs eingesetzt habe, waren sie bei hoher Frequenz definitiv 
dunkler als "normale" LEDs. Das ist aber auch sicher schon 15 Jahre her. 
Ich gehe deshalb davon aus, dass das tendenziell immer noch so ist. 
Vielleicht liegt dieses Verhalten einfach daran, dass man bei einem um 
Faktor 10 reduzierten Strom entsprechend 10 mal solange benötigt, um die 
in etwa gleiche Kapazität der LEDs umzuladen.

@Peter
Ob man jetzt mit 100Hz oder 200Hz Wiederholrate arbeitet ist wirklich 
total egal. Allerdings 20kHz würde ich wahrscheinlich nie benutzen. Was 
macht es für einen Sinn die Frequenz höher zu setzen als notwendig? 
Dadurch hat man doch nur unnötige Verluste in der Treiberstufe. Da würde 
ich, wenn es die SW zulässt in der TimerIRQ-Routine einen Zähler 
einbauen, der nur bei jedem x-ten Aufruf der ISR eine Umschaltung der 
LEDs durchführt.

So dann!
Thomas

von Falk (Gast)


Lesenswert?

@ twede
>>??? Woher weisst du das? Gemessen?

>Ne, habe ich nicht. Aber eine "normale" Diode schaltet ja irgendwann
>auch nicht mehr richtig durch, u.a. bedingt durch die Kapazität.

Also alles wieder mal nur Vermutingen, basierend auf bruchstückhaftem 
Wissen ohne Substanz. Ganz toll . . .

>eventuell Pulsdauer. Wenn man allerdings als Anfänger gerade anfängt mit
>der Programmierung in C würde ich die Stromwerte so definieren, das auch
>bei einem SW Absturz alles heile bleibt. Dann ärgert man sich nicht so,
>wenn mal wieder die SW hängenbleibt.

Sicher, das ändert aber erstmal nix an dem grundsätzlichem Problem. Vor 
allem sollte amn icht zwei Sachen in einen topf werfen. a) LEDs sind im 
MUX -Betrieb genauso hell wie bei Gleichstrom (bei richtiger 
Dimensionierung) und b) abstürzende Software im Entwicklungsstadium

>dunkler als "normale" LEDs. Das ist aber auch sicher schon 15 Jahre her.
>Ich gehe deshalb davon aus, dass das tendenziell immer noch so ist.

Du hast 15 Jahre sehr dynamische LED-Entwicklung verschlafen. Guten 
Morgen.
Vor 15 Jahren wahren LEDs teure Halbleiterglimmlämpchen mit wenig 
Lichtausbeute. Schau dir mal normale LEDs an, vobn den ultrahellen und 
Power LEDs mal ganz zu schweigen.

MfG
Falk

von Horst (Gast)


Lesenswert?

Achtung Leute, Falk hat wieder schlechte Laune...

von Roland Praml (Gast)


Lesenswert?

Machs mit low-current LED's,
PNP-Transistoren als Spaltentreiber (je einen für T,M,J, H,M,S) und 
einen Port als Zeilentreiber (damit du nur das entsprechende Byte raus 
schreiben musst und nicht umrechnen)

Den Vorwiderstand der einzelnen Zeilen dimensionierst auf ca. 10 mA (das 
macht dann bei nem Multiple von 1:6 knapp 2 mA)

Die 10 mA kann der Port auch leicht "sinken" (gegen GND ableidten).
Dan PNP-Transistor kannst auch weg lassen, allerdings wirst dann nur 
noch auf 4-5 mA kommen, da ein AVR-Port meist nicht mehr Strom "sourcen" 
kann.

Hab mal eine 7-Segement-MPX Anzeige (low-current) so angesteuert mit ca 
400 Hz (macht dann bei 4 Segmentenn 100 "Frames" pro sekunde)
Die Helligkeit könnte (ohne Transistor) zwar höher sein, zum Ablesen 
reicht es jedenfalls.

Falls du vorhast die Uhr bei Nacht im Schlafzimmer oder dgl zu 
betreiben: Bau unbedingt ne Dimmfunktion ein, z.B. nach dem 
"Durchmultiplexen" ein Paar Takte Pause machen, der Multiplextimer 
sollte dann natürlich ausreichend schnell sein (z.B. 10000 Hz oder mehr) 
damit es beim Dimmen nicht flimmert. Bei 6 Spalten + 94 Pausen hast ca. 
1% Helligkeit (dies ist bei Nacht ausreichend) und noch 100 Fps

Gruß
Roland

von twede (Gast)


Lesenswert?

@falk
>Also alles wieder mal nur Vermutingen, basierend auf bruchstückhaftem
>Wissen ohne Substanz. Ganz toll . . .

Naja, eine gesundes Halbwissen ist doch besser als nichts, oder?! 
Vielleicht kannst Du mir ja ein Paar schöne Links zu Applicationnotes 
oder Datenblättern von 0815-LEDs schicken, wo das Verhältnis zwischen 
Ansteuerfrequenz und Helligkeit aufgeführt wird und die Grenzfrequenz 
von LEDs dargestellt wird.

>Sicher, das ändert aber erstmal nix an dem grundsätzlichem Problem. Vor
>allem sollte amn icht zwei Sachen in einen topf werfen. a) LEDs sind im
>MUX -Betrieb genauso hell wie bei Gleichstrom (bei richtiger
>Dimensionierung) und b) abstürzende Software im Entwicklungsstadium

Stimmt die beiden Punkte haben nichts miteinander zu tun, außer das sich 
meine Aussagen direkt auf die Fragestellung am Anfang des Threads 
beziehen. Ich würde immer einem Anfänger erst raten eine sicher 
funktionierende unkritische Schaltung aufzubauen. Optimieren kann man 
sie dann immer noch, wenn das alles sicher funktioniert.

So weit.
Thomas

von Falk (Gast)


Angehängte Dateien:

Lesenswert?

@twede

>Naja, eine gesundes Halbwissen ist doch besser als nichts, oder?!

IRRTUM!

Das ist gefährlicher als Unwissenheit. Und kann SEHR nervtötend und 
kontraproduktiv sein, wenn so einer in einem Team drinsteckt, vor allem 
wenn er gewisse Führungspositionen inehält. Been there, sufferd that.

>Vielleicht kannst Du mir ja ein Paar schöne Links zu Applicationnotes
>oder Datenblättern von 0815-LEDs schicken, wo das Verhältnis zwischen
>Ansteuerfrequenz und Helligkeit aufgeführt wird und die Grenzfrequenz
>von LEDs dargestellt wird.

Kann ich. Siehe Anhang.

MfG
Falk

von Hubertus von der Weide (Gast)


Lesenswert?

Ganz ehrlich, dich wollte ich nicht als Chef haben.

von Rahul D. (rahul)


Lesenswert?

>Achtung Leute, Falk hat wieder schlechte Laune...

Das hat gar nichts mit schlechter oder guter Laune zu tun.
Halbwissen ist gefährlicher als Unwissen (wie Falk schon schrieb).
Halbwissen und andere sprituelle Sachen haben nicht, aber auch gar 
nichts mit Sachen zu tun, die man sehr einfach beweisen kann, aufgrund 
der Tatsache, dass Elektronik doch sehr deterministisch ist.
Sowas gehört in die Kirche (in andere Glaubenshäuser oder in die 
Politik)...

von Salmonellenbekämpfer (Gast)


Lesenswert?

Ist schon richtig, nur der Ton machts halt!!

von Rahul D. (rahul)


Lesenswert?

>Ist schon richtig, nur der Ton machts halt!!

Da käme dann wieder nur padagogisches Geschwätz bei raus.
Und es würde wieder jemand mit seinem (gefährlichen) Halbwissen 
"amoklaufen". ("Mein UART funktioniert auch mit dem integrierten 
Quarzoszillator.")

von Salmonellenbekämpfer (Gast)


Lesenswert?

> "Mein UART funktioniert auch mit dem integrierten Quarzoszillator."

Ohne genauen Bezug ist an diesem Satz nichts falsch.

von Peter D. (peda)


Lesenswert?

Salmonellenbekämpfer wrote:
>> "Mein UART funktioniert auch mit dem integrierten Quarzoszillator."


Meine auch.
Die Oszillatorschaltung ist ja intern, bloß den Quarz muß man noch außen 
ranpappen.


Allerdings setzen 99,99% der Leute, die den obigen Satz sagen, nicht den 
Quarzoszillator sondern den RC-Oszillator. Sie lügen also.


Peter

von Rahul D. (rahul)


Lesenswert?

>Ohne genauen Bezug ist an diesem Satz nichts falsch.

Nenn mir bitte einen Mikrcontroller, der einen integrierten Quarz hat.

>Die Oszillatorschaltung ist ja intern, bloß den Quarz muß man noch außen
>ranpappen.
Hmmm....

>Allerdings setzen 99,99% der Leute, die den obigen Satz sagen, nicht den
>Quarzoszillator sondern den RC-Oszillator. Sie lügen also.
Eben.

Weiterhin ist nicht gesagt, dass der Oszillator bei jedem so 
funktioniert (Bauteilstreuung, unterschiedliche Umgebugen etc).
Diese "Es gibt ..."-Definitionen sind nicht gleich zu setzen mit "Es 
gilt für alle...". Wird aber gerne so angenommen. (DSB-Informatiker 
mögen mir jetzt verzeihen, wenn ich die falsche Nomenklatur benutzt 
haben sollte).

von Salmonellenbekämpfer (Gast)


Lesenswert?

> Nenn mir bitte einen Mikrcontroller, der einen integrierten Quarz hat.

Da jetzt ein Bezug da ist, natürlich kein µC hat ihn integriert. Du hast 
halt den Satz so einfach in den Raum gestellt. Ich dachte, du meinst 
einen speziellen UART-Controller, der seinen Takt von einem externen 
Quarzoszillator bekommt. Dieses Oszillator hat, wenn man so will, einen 
Quarz integriert. Aber ist antürlich alles auch Ansichtssache.

von Rahul D. (rahul)


Lesenswert?

>Dieses Oszillator hat, wenn man so will, einen Quarz integriert.

Der wird aber auch extern angepappt.

Übrigens: Genug der Fred-Entführung. (Vorschlag meinerseits)

von OlFi (Gast)


Lesenswert?

Hi,

könnte Alex jetzt vielleicht kurz zusammenfassen wie er die Binäruhr 
jetzt aufbauen wird?

Das macht es für den Anfänger leichter den Überblick zu behalten und ist 
ein guter Tip für den Anfang falls jemand sich entschließt das ganze 
nachzubauen.

von twede (Gast)


Lesenswert?

@falk

Tja, tut mir leid, aber scheinbar bin ich doch zu blöd die 
Applicationnote zu lesen. Jedenfalls habe ich in der Applicationnote 
nichts zum Thema Schaltzeiten in Bezug auf Helligkeit und 
Grenzfrequenzen von LEDs gefunden.

Interessant fand ich allerdings Absatz auf der letzten Seite der 
Überschrieben ist, mit "DC Opertation is Better than Pulsed Operation 
for Light Output".

Naja, wenn Du noch weitere spannende Applicationnotes hast immer man her 
damit. Vielleicht steht da ja was drin, was ich noch nicht weiß.

Bis dann!
Thomas

von Falk (Gast)


Lesenswert?

@twede

>nichts zum Thema Schaltzeiten in Bezug auf Helligkeit und
>Grenzfrequenzen von LEDs gefunden.

Dazu steht nix drin. ICh finde auf die schnelle auch kein Datenblat, wo 
Schaltzeiten aufgeführ sind. Muss mal in meinen PDFs suchen.

>Interessant fand ich allerdings Absatz auf der letzten Seite der
>Überschrieben ist, mit "DC Opertation is Better than Pulsed Operation
>for Light Output".

Naja, wobei "Better" auch nur im Sinne einer maximalen Lichtausbeute in 
Bezug auf die maximale Verlustleistung zu sehen ist.

MFG
Falk

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Servus,

bin seit gestern wieder online scheiß Studiengebühren und habe die 
bewegung in diesem Beitrag gesehen.

Momentaner Stand:

Ich hab mal eine Spalte auf nem Steckbrett zusammengebastelt. Mit der 
Methode aus meinem ersten Beitrag funktioniert das ganze schon recht 
gut. Software im Anhang.

Getestet hab ich es mit Low-Current LEDs 5mm von Reichelt. Strom auf 5mA 
DC berechnet und klappt recht gut.

Das ganze Funktioniert auch mit ner blauen LOW-COST LED von Reichelt, 
allerdings komm ich nicht auf die normale Helligkeit selbst mit kleinem 
Vorwiderstand.

Bei hellen LEDs bekomme ich nur ein Aufleuchten das nicht besonders hell 
ist.


Ich benötige eigentlich helle bis ultrahelle LEDs da das ganze später 
hinter ner matten Plexiglasscheibe eingebaut werden soll(*als 
Schranktür*) G.

OK, die Methode von Thomas Wedemeyer ist schon nicht schlecht, 
allerdings reichen bei mir die Ports nicht beim Mega8. Also bleibt für 
mich übrig:

Methode 1: Anderer Controller z.B. Mega8535
Methode 2: PORTerweiterung durch nen 4auf16 decoder vgl. 74*4514 nur 
invertiert und dann mit pnp-Transistoren die Spalten treiben und mit nem 
ULN 2803 die Zeilen

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Habe noch ne andere Idee, so spare ich mir die Transistoren.

von Falk (Gast)


Angehängte Dateien:

Lesenswert?

@Alex

>Habe noch ne andere Idee, so spare ich mir die Transistoren.

Du tauschst IO-Ports, die locker 20mA schaffen gegen lausige OPVs, die 
weiger Strom liefern und langsamer sind? Schlechter Deal.

Wie bereits jemand vorgeschlagen hat, sollte man die Daten als 6x7 
Matrix aufbauen, da kannst du direkt die Daten ausgeben, ohne rumfummeln 
zu müssen (wobei nicht jede Spalte voll sein muss).

Etwa so. Siehe Anhang.

>Das ganze Funktioniert auch mit ner blauen LOW-COST LED von Reichelt,
>allerdings komm ich nicht auf die normale Helligkeit selbst mit kleinem
>Vorwiderstand.

Mit welcher Spannung läuft dein uC? Die blauen LEDs brauchen ca. 3,5V 
Flusspannung, dein AVR muss also mit 5V laufen.

>Ich benötige eigentlich helle bis ultrahelle LEDs da das ganze später
>hinter ner matten Plexiglasscheibe eingebaut werden soll(*als
>Schranktür*) G.

Kein Problem, die meisten brauchen auch nur 20mA.

>Methode 1: Anderer Controller z.B. Mega8535
>Methode 2: PORTerweiterung durch nen 4auf16 decoder vgl. 74*4514 nur
>invertiert und dann mit pnp-Transistoren die Spalten treiben und mit nem
>ULN 2803 die Zeilen

Weder noch. Die Pins reichen. Siehe Anhang.

Dein Program ist, naja, ausbaufähig und bedürftig.

>ISR(TIMER1_COMPA_vect){
>  static uint8_t i=(uint8_t)(-1);

??? Entweder signed oder unsigned.

>
>  // TRI-STATE weiterschieben, bis letzte LED einmal an war
>  if (DDRC < (1 << PC3)){
>    DDRC = (DDRC << 1);
>  }

Ähhh, das scheint mir ein wenig seltsam. Wenn ich das richtig verstehe, 
willst du 12 BCD Zahlen MUXen (1:12). Das heisst doch aber, dass du bei 
jedem Interrupt eine neue Zahl ausgeben musst. Und nicht jede einzelne 
LED innerhalb der BCD Zahl nochmal MUXen, das wäre ja dann ein 1:48 MUX 
und damit äusserst kritisch (weil entweder lichtschwach oder zu hohe 
Pulsströme).

MfG
Falk


von Alex (Gast)


Lesenswert?

ISR(TIMER1_COMPA_vect){
  static uint8_t i=(uint8_t)(-1);

Ganz einfach, denk mal an den ersten aufruf des Programms.
Durch i++ bin ich dann bei null. Ich hätte natürlich auch 255 schreiben 
können.

Durch tatic bleibt mir die Variable über jeden Aufruf des Programms 
erhalten.

Durch das weiterschieben des Tri-State liefert mir immer nur ein PIN 
Strom.

http://www.mikrocontroller.net/attachment/20936/untitled.sch__1_.pdf

Es ist richtig, ich muxe jede Ziffer der BCD-Zahl extra.

mfg

von Falk (Gast)


Lesenswert?

@Alex

>ISR(TIMER1_COMPA_vect){
>  static uint8_t i=(uint8_t)(-1);

>Ganz einfach, denk mal an den ersten aufruf des Programms.
>Durch i++ bin ich dann bei null. Ich hätte natürlich auch 255 schreiben
>können.

Dann schreib auch 255. Ist solide und weniger Tipperei.

>Durch tatic bleibt mir die Variable über jeden Aufruf des Programms
>erhalten.

Schon klar.

>Durch das weiterschieben des Tri-State liefert mir immer nur ein PIN
>Strom.

Auch klar, aber dennoch baust du dir dadurch einen 48:1 MUX, obwohl du 
einen 12:1 Mux willst. Es ist doch recht einfach. Dein Zyklus soll so 
aussehen.

1.BCD an (postive Logik)
2.BCD an (negative Logik)
3.BCD an (postive Logik)
4.BCD an (negative Logik)
5.BCD an (postive Logik)
6.BCD an (negative Logik)
7.BCD an (postive Logik)
8.BCD an (negative Logik)
9.BCD an (postive Logik)
10.BCD an (negative Logik)
11.BCD an (postive Logik)
12.BCD an (negative Logik)

Dazu musst du aber bei jedem Interrupt deine PC=..3 neu schreiben (und 
damit i erhöhen, um den Index auf die neuen Daten zu bekommen) und bei 
jeden 2. Interrupt PB0..PB7 um eine Stelle weiterschieben.
Du machst aber was anderes. Du schiebst die Daten in DDRC solange nach 
links, bis das Egebnis grösser oder gleich 0x8 ist. Kann es ein, dass du 
ausserdem DDRC mit DDRB verwechselt hast?

>http://www.mikrocontroller.net/attachment/20936/un...

Der Widerstand ist an der falschen Stelle. Du musst den in deiner 
Schaltung in die Zeilen einfügen (PC0..3, je 1 Widerstand).

MFG
Falk


von Alex (Gast)


Lesenswert?

Du hast hier absolut recht.

Durch das einzelne Einschalten der LEDs ist immer nur eine LED an. Wenn 
mehrere Anwähren würde sich ja bei der oben genannten Methode abhängig 
von der Anzahl der einzelnen LEDs unterschiedliche Helligkeiten ergeben.

Die gepostete Software war ja auch nur ein Versuch "helle" LEDs direkt 
an den Ports zu betreiben.

Wenn ich alle LEDs gleichzeitig schalten will (BCD-Signal direkt auf den 
PORT) ist mir schon klar, dass die Widerstände in den Zeilen sein 
müssen.
Ich werde nun wohl auch die Methode mit den pnp Transistoren und dem ULN 
Baustein verwenden, weil damit viel höhere Ströme möglich sind.

Danke nochmal.

P.S. Die Software funktioniert übrigens schon, ob du es glaubst oder 
nicht.

Funktionsweise:

Pseudecode:

- Spalte auswählen, alle andere Spalten auf TRI-State
- Daten ins PORT-REGISTER
- binäre 1er Stelle ein(auf Ausgang, andere auf Eingang 
TRI-STATE)*DDR*
- binäre 2er Stelle ein(auf Ausgang, andere auf Eingang 
TRI-STATE)*DDR*
- binäre 4er Stelle ein(auf Ausgang, andere auf Eingang 
TRI-STATE)*DDR*
- binäre 8er Stelle ein(auf Ausgang, andere auf Eingang 
TRI-STATE)*DDR*
- nächste Spalte auswählen
...

mfg

Alex

von Falk (Gast)


Lesenswert?

@Alex

>P.S. Die Software funktioniert übrigens schon, ob du es glaubst oder
>nicht.

Das glaub ich schon, aber ein 48:1 MUX ist nun mal alles andere als 
praktikabel, vor allem wenns hell sein soll.

MfG
Falk

von Alex (Gast)


Lesenswert?

Das hab ich auch schon bemerkt, dass die Methode in Sachen Helligkeit 
nicht sehr "toll" ist.


Ich lese mich gerade in die Arbeitspunkteinstellung von Transistoren 
ein, hab sowas ja noch nie gemacht!?! Warum habt ihr denn da nen 
Spannungsteiler an der Basis drin???

Bitte bitte vergebt mir, das ich solche Fragen stelle, hat sicher nen 
Hintergrund, dass ihr das macht.

mfg

von Falk (Gast)


Lesenswert?

@Alex

>ein, hab sowas ja noch nie gemacht!?! Warum habt ihr denn da nen
>Spannungsteiler an der Basis drin???

Wenn du meine Schaltung meinst, das sind Konstantstromquellen. Der 
Spannngsteiler (1k/2.7K) schaltet die Basis auf eine halbwegs konstante 
Spannung (hier ca. 4V, die Spannung ist NICHT ganz so, wie es das 
Widerstandsverhältnis ergeben würde, weil der relativ hochohmige 
(=schwache) Spannungseiler durch die Basis belastet wird). Ca. 0,7V 
fallen zwischen Emitter und Basis ab, bleibt der Rest (ca. 0,3V) über 
dem Emitterwiderstand von 4.7 Ohm. Dadurch stellt sich ein Strom von ca. 
0,3/4.7 ~65 mA. Durch Variation des Emitterwiderstands kannst du den 
Strom einstellen.

>Bitte bitte vergebt mir, das ich solche Fragen stelle, hat sicher nen
>Hintergrund, dass ihr das macht.

Wie, Weshalb, Warum, wer nicht fragt bleibt dumm. (Sesamstrasse)

Hey, dazu ist dieses Forum da. Der entscheidende Punkt ist immer, wie 
die Leute rüberkommen. Faul, "Macht mal meine Hausaufgaben", oder 
lernwillig.

MFG
Falk

von Alex (Gast)


Lesenswert?

OK,

mit nem FET hatte ich die Konstantstromquelle schon verstanden, jetzt 
nach etwas suchen im Netz auch mit Bipolartransistor, juhu.

Ist an sich keine schlechte Idee den Strom zu begrenzen, ich hätte halt 
die BAUERNMETHODE verwandt und den Transistor als Schalter eingesetzt.

Dann werd ich die neuen Bauteile bestellen und mal schauen.

mfg

Alex

P.S. Ich meld mich wenn ich die Sachen habe und das ganze mal läuft.

    warten

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.