Probleme bei Realisierung vom Sterhimmel mit Atmega8

Fragen zu Schaltungen, Elektronik, Elektrik usw.

Moderator: T.Hoffmann

Antworten
Abbamania
User
User
Beiträge: 34
Registriert: Di, 23.01.07, 21:23

Di, 01.01.08, 21:14

Vor zwei Monaten habe ich mir ein Evaluationsboard von Atmel und nen Atmega8 zugelegt. Nun wollte ich auch damit etwas sinnvolles machen.

Einen Sternhimmel aus ca. 45 LEDs wollte ich mir bauen. Die einzelnen LEDs sollen dann langsam ein und ausgehen.

Jetzt weiß ich nicht genau wie ich dabei anfangen soll. Die Grundlagen für Mikrocontroller habe ich mir bereits durchgelesen.

23 Ausgänge habe ich ja glaube am Microcontroller.

Wie soll ich das am besten anstellen mit dem Anschluss und der Ansteuerung der 45 LEDs?


Für Tipps wär ich sehr dankbar.
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

Di, 01.01.08, 21:39

Willst du alle 45 Leds einzeln angesteuern können?

Wenn ja, dann könntest du das ganze über ein Matrix von 7 x 7 lösen, mit einem Matrix kannst du dann 49 Leds ansteuern. Du benötigst 14 Ausgänge, ( 7 für Pluspol und 7 Minuspol für die Leds) und 7 x NPN-Transistoren, am besten noch 7 x PNP-Transistoren um die Leds mit mehr als 20 mA betreiben zu können. Denn durch die Matrixansteuerung leuchtet jede Led nur für eine kurze Zeit auf und die Leds leuchten natürlich dunkler, damit kann man es kompensieren. Die Ansteuerung des Matrixs ist natürlich deutlich komplizierter. Da nicht jede Led an einem Ausgang hängt...

Wenn du nicht alle 45 Leds einzeln ansteuern möchtest, könntest du mehrere Leds über einen Transistor zusammenfassen.

Du könntest auch einen Atmega16 einsetzen, der hat mehr I/Os als der Atmega8.
synvox
Mega-User
Mega-User
Beiträge: 147
Registriert: Fr, 27.04.07, 04:40
Wohnort: Schweiz

Mi, 02.01.08, 02:32

Wenn die LEDs wirklich faden sollen, d.h. nicht einfach ein- und ausgehen, sondern langsam ein- und ausgeblendet werden, dann würde ich dir von einer Matrix-Ansteuerung dringend abraten. Damit würde die Ansteuerung äusserst komplex werden und für einen Anfänger kaum in den Griff zu bekommen sein. Auch für einen Profi gestaltet es sich extrem schwierig, bei Matrix-Ansteuerungen zusätzlich noch PWM für jede LED einzubeziehen, und damit ein zufriedenstellendes Ergebnis hinzubekommen.
Am Einfachsten gestaltet sich das Faden, wenn du dafür die Hardware-PWM-Ausgänge eines Atmel AVR verwendest. Wenn du jede der 45 LEDs einzeln und unabhängig voneinander faden willst, dann könntest du jeweils einen ATtiny25 (8-Pin-DIP) pro 3 LEDs (ein ATtiny25 kann max. drei LEDs unabhängig per Hardware-PWM steuern) verwenden. Damit bräuchtest du bei 45 LEDs 15 ATtiny25. Ab 10 Stück kosten diese bei http://www.farnell.de 'nur' 1,06 €. Damit müsstest du für die 15 Stück ca. 15,90 € auslegen. Die 3 LEDs könntest du bei 20 mA pro LED direkt am ATtiny betreiben (ohne Transistor etc.), natürlich mit entsprechend dimensionierten Widerständen. An sonstiger beschaltung brauchst du pro ATtiny eigentlich nur noch je einen 100 nF Kondensator nahe am µC parallel zur Stromversorgung. Laufen kann er ja dann mit dem internen RC-Taktgenerator.
Wenn du zur Programmierung BASCOM verwendest, dann könntest du zum Beispiel dessen Pseudo-RANDOM-Generator verwenden um zufällige Werte für Zeitpunkt und Dauer des Fadens jeder der drei LEDs zu bestimmen. Wenn du dann noch jeden ATtiny25 mit einem anderen Seed-Wert für den Random-Generator initialisierst, bekommst du ein sehr schön zufälliges Bild des Ein- und Ausblendens deiner 45 LEDs.

Gruss
Neni
Synthy82
Hyper-User
Hyper-User
Beiträge: 1956
Registriert: Do, 05.04.07, 15:15
Wohnort: Hamburg
Kontaktdaten:

Mi, 02.01.08, 13:53

Meinst, PWM ist auf Matrix sehr schwierig? Wenn die Frequenz hoch genug ist, brauchst du doch nur je nach momentaner Helligkeit der entsprechenden LED jeweils entsprechend viele 1en und 0en hintereinander zu senden bzw. diese auf einen "Durchgang", dessen Helligkeitsauflösung die Anzahl der Takte ist, zu verteilen.
Abbamania
User
User
Beiträge: 34
Registriert: Di, 23.01.07, 21:23

Mi, 02.01.08, 23:22

Die einzelne Ansteuerung der Leds ist nicht unbedingt erforderlich. Es ist eigendlich auch kein Problem drei zusammen für einen Ausgang des Microcontrollers zu schalten. Somit ist doch ein Atmega 8 mit seinen verfügbaren Ausgängen ausreichend, oder?

Aber wie sieht dann die Programmierung von dem Baustein aus. Die Pinbelegung ist ja eigendlich klar erkennbar aus dem Datenblatt und aus dem Forum. Aber wie soll ich das dann am besten mit der Programmierung machen, wenn ich jetzt meine 15 Ausgänge (45:3) für diesen zweck ansteuern will?
synvox
Mega-User
Mega-User
Beiträge: 147
Registriert: Fr, 27.04.07, 04:40
Wohnort: Schweiz

Do, 03.01.08, 07:13

@Synthi82:
Du könntest zwar z.Bsp. die sieben Spalten mit je sieben PWM-Ausgängen (bei genügend hoher PWM-Frequenz) ansteuern und dann die 7 Reihen nacheinander Durchschalten (mit entsprechend niedrigerer Zeilenfrequenz, so dass während einer Zeilenansteuerung mindestens ein ganzer PWM-Durchlauf geschieht). Das Problem ist aber die korrekte Synchronisation aller PWM-Ausgänge (pro Zeile genau ein Durchlauf oder ein ganzzaliges Vielfaches der entsprechenden PWM-Periode an jedem PWM-Ausgang), da du ansonsten Jitter- und Überlagerungs-Effekte zuhauf und insgesamt ein sehr flackeriges Leuchtbild bekommst. Wenn du die PWM per Software (Interrupt) erzeugst und die Zeilenumschaltung dazunimmst, wird's kritisch mit der verbleibenden Rechenzeit, die du ja benötigst, um noch einen sinnvollen und unabhängigen Programmablauf für alle LEDs zu erzeugen.

@Abbamania:
Du kannst dir eine Software-PWM-Routine (Interrupt) für 15 Ausgänge (15 PWM-Werte) programmieren (irgendwo gibt's in diesem Forum sogar ein Tutorial für Software-PWM), aber gleich vorweg, 15 PWM-Ausgänge per Interrupt zu generieren kann je nach benötigter PWM-Auflösung und PWM-Frequenz (mind. 100 Hz) von der benötigten Rechenzeit her schon arg ans Limit des ATmega gehen. Und für die Ablaufsteuerung der 15 PWM-Werte, die dann ja im Hauptprogramm implementiert wird, sollte ja auch noch genügend Rechenzeit übrig bleiben. Es wird also nicht einfach werden, auch 'nur' 15 Fade-Abläufe mehr oder weniger unabhängig voneinander mit einem einzigen ATmega8 zu realisieren.

Gruss
Neni
Abbamania
User
User
Beiträge: 34
Registriert: Di, 23.01.07, 21:23

Do, 03.01.08, 10:35

Mkay, wenn das mit den 15 Kanälen faden auch nicht so einfach ist, was kann ich dann tun.
Hast du eine Idee, wie ich mit meinen Mitteln (Atmel Evaluation Board + Atmega8) die 45 LEDs am besten effektvoll faden kann in meinem Sternhimmel?
Andy_KEH
User
User
Beiträge: 22
Registriert: Fr, 14.09.07, 21:33

Sa, 05.01.08, 00:05

Wenn es unbedingt der Mega8 sein muss und dir die Lösung mit ein paar kleinen Tinys nicht gefällt, könntest du es mit Binärzahlen probieren.
Du erzeugst mittels Excel o.ä. eine Spalte mit Binärzahlen (011000111010101101011... so viele wie Ausgänge) und änderst diese in jeder Zeile - ob von Hand oder mit Rechenfunktionen ist deine Sache. Wenn du diese Spalte von angemessener Länge in Datazeilen umwandelst, kannst du diese im Programmablauf einlesen und danach die Ausgänge ein-ausschalten. Bei entsprechender Geschwindigkeit und sinnvollen Änderungen kommt da sicher was brauchbares raus - falls der Speicher langt. Das kann ich allerdings nicht beantworten. Meine Versuche in dieser Richtung haben sich auf pseudozufälliges Flackern einer LED beschränkt :oops:
synvox
Mega-User
Mega-User
Beiträge: 147
Registriert: Fr, 27.04.07, 04:40
Wohnort: Schweiz

Sa, 05.01.08, 06:30

Nun, ich habe nicht gesagt, dass es unmöglich ist, sondern dass es schwierig wird und dass möglicherweise ein paar Einschränkungen nötig sind. Wenn dir zum Bsp. 64 Helligkeitsabstufungen (anstatt 256) ausreichen bei ca. 150 Hz PWM-Frequenz, dann könntest du bei einem Prozessortakt von 8 MHz durchaus in einem Interrupt, den du mittels eines Timers ca. alle 104 µs auslöst, locker die notwendigen 15 Wertevergleiche in weniger als der Hälfte der Interrupt-Zeit schaffen (Software-PWM), so dass dann dem Hauptprogramm auch noch genügend Ausführungszeit bleibt. Im Hauptprogramm könntest du dann z.Bsp. die 15 PWM-Werte (0 - 63) zyklisch und mit jeweils verschiedener Phase und Geschwindigkeit an- und abschwellen lassen. Auch nur das ergibt schon ein schön 'zufälliges' Lichtbild.

Das Programm dazu musst du allerdings schon selbst durchdenken, entwickeln und schreiben, ich gebe hier nur ein paar Denkanstösse, mehr nicht.

Gruss
Neni
Antworten