mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8 x 24 PWM Kanäle mit Atmega 8


Autor: Martin H. (martin_h85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

aktuell arbeite ich an einer RGB-LED Matrix. Dazu habe ich drei 
Schieberegister, 74HC595, am SPI des Atmels, also Hardware SPI.
zusätzlich habe ich einen PORT am Atmel, also 8 IOs. Der Atmel ist ein 
ATmega8 und hat einen 20 MHz Quarz, was auch problemlos läuft. Als 
Treiber habe ich noch drei ULNs und ein paar Transistoren im Einsatz.

Nun möchte ich ein PWM mit 100-200Hz, und 256 Schritten erzeugen. Dazu 
habe ich aktuell schon etwas herumprobiert, aber leider bekomme ich ab 
zwei Spalten und nur einem Schieberegister schon ein Flimmern.

Ich Update aktuell im Timer ISR das SPI nun denke ich das das zu dem 
Problem führt. Wie wäre ein sinnvoller Aufbau dabei ?


Leider bin ich noch am Anfang mit Interupt Programmierung und habe noch 
kein wirkliches Gefühl dafür, wie Kritisch ist so ein Timer ISR ?


Gruß Martin

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> PWM mit 100-200Hz, und 256 Schritten erzeugen
Das sind also dann 200 Hz * 256 = ca. 50 kHz PWM-Frequenz.
Also mußt du den Timerinterrupt alle 20 us aufrufen und hast dann wieder 
maximal diese Zeit, um den SPI abzuhandeln. Bei entsprechender Taktrate 
auf dem SPI sollte das für die 3 Bytes eigentlich reichen.

Oder willst du in einer kompletten Matrix mit 200 LEDs jede einzelne in 
der Helligkeit einstellbar machen?

Zeig doch mal deinen Code (und am besten auch noch den Schaltplan)...

Autor: Shuzz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich tippe auf eine 8x8 RGB-Matrix in der er jede LED einzeln einstellen 
möchte, ergibt rechnerisch dann quasi das Gleiche wie lkmiller's 200 
einzeln dimmbare LEDs.

Wenn wir mal bei 100Hz PWM-Frequenz bleiben ergibt das unterm Strich:

20.000.000MHz / (100Hz  256  8) = ca. 97 Takte um das Bitmuster für 
die nächste Zeile zu berechnen und per SPI rauszuschieben. Dann 
natürlich noch Zeile umschalten und SRs latchen.

Kann schon klappen bei cleverer Programmierung, aber dann ist der 
Controller auch voll und macht sonst nix mehr, d.h. für die Berechnung 
der eigentlichen Effekte (Farbverläufe, HSV->RGB Konvertierung usw.) 
bleibt nicht mehr wirklich viel Zeit übrig.

Evtl. sollte man da auch über ISRs in Assembler nachdenken.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Martin H. (martin_h85)

>aktuell arbeite ich an einer RGB-LED Matrix. Dazu habe ich drei
>Schieberegister, 74HC595, am SPI des Atmels, also Hardware SPI.

Also 8x24 LEDs bzw. 8x8 RGB LEDs.

zusätzlich habe ich einen PORT am Atmel, also 8 IOs. Der Atmel ist ein

>Nun möchte ich ein PWM mit 100-200Hz, und 256 Schritten erzeugen. Dazu
>habe ich aktuell schon etwas herumprobiert, aber leider bekomme ich ab
>zwei Spalten und nur einem Schieberegister schon ein Flimmern.

Was nur logisch ist. Schon mal nachgerechnet? Bei einer 8:1 
gemultiplexten LED-Matrix braucht man für 100 Hz 
Bildwiederholfreqeunz 800 Hz Zeilenfrequenz. Und wenn man die mit 256 
Stufen machen will ist man bei 204,8 kHz PWM-Takt, sprich 5us. Das sind 
100 Takte bei 20 MHz. Sportlich.

>Ich Update aktuell im Timer ISR das SPI nun denke ich das das zu dem
>Problem führt. Wie wäre ein sinnvoller Aufbau dabei ?

Soft-PWM ohne Multiplexen.

>Leider bin ich noch am Anfang mit Interupt Programmierung und habe noch
>kein wirkliches Gefühl dafür, wie Kritisch ist so ein Timer ISR ?

Wenn die Zahl im einstelligen Mikrosekundenbereich landet, sollte man 
mal nachrechnen . . .

MFG
Falk

Autor: Martin H. (martin_h85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit,

ja das es knapp wird dachte ich mir auch schon, aber es ist ja wirklich 
sehr knapp geworden.

Dann werde ich mich wohl mal mit Assembler Programmierung auseinander 
setzen müssen.

es ist im übrigen eine 8x8 RGB Matrix. Die Daten wollte ich mit der 
USART einlesen, das sind relativ wenig Takte. Aber bei den aktuellen 
Tests habe ich dies aber noch nicht drin.

Ich habe zum Testen auch einen kleinen Prototypen auf Lochraster 
aufgebaut, ca. eine Euro groß, Hardwaremäßig funktioniert es auch ganz 
gut. Nur wie gesagt läuft die Software noch nicht. Aber ich werde wohl 
mal weiter Ausprobieren müssen.

Für Soft-PWM fehlen mir leider die IOs. Aber ich werde mal drüber 
nachdenken.


Gruß Martin

Autor: Martin H. (martin_h85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

ich habe mir gerade Gedanken dazu gemacht. Wäre es vom Timing her 
sinnvoller einen z.B. Mega32 zu nehmen, 24 IOs und ein 74HC164 um nur 
die Zeilen durchzuzählen ?


Gruß Martin

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin H. schrieb:
> Guten Tag,
>
> ich habe mir gerade Gedanken dazu gemacht. Wäre es vom Timing her
> sinnvoller einen z.B. Mega32 zu nehmen, 24 IOs und ein 74HC164 um nur
> die Zeilen durchzuzählen ?

Damit bist du aber dieses Problem

> Schon mal nachgerechnet? Bei einer 8:1
> gemultiplexten LED-Matrix braucht man für 100 Hz
> Bildwiederholfreqeunz 800 Hz Zeilenfrequenz. Und wenn man die mit 256
> Stufen machen will ist man bei 204,8 kHz PWM-Takt, sprich 5us. Das sind
> 100 Takte bei 20 MHz. Sportlich.

immer noch nicht los.

Dein 74HC164 realisiert genau das 8:1 Multiplexing

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Martin H. (martin_h85)

>ich habe mir gerade Gedanken dazu gemacht. Wäre es vom Timing her
>sinnvoller einen z.B. Mega32 zu nehmen, 24 IOs und ein 74HC164 um nur
>die Zeilen durchzuzählen ?

Nein. Sinnvoll wäre die Nutzung von 3x TLC5922 oder ähnlichem anstatt 
der Schieberegister. Dann klappt das auch mit der Dimmung, denn die 
macht der TLC fast allein. Siehe LED-Matrix.

MFG
Falk

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Thema Assembler würde ich folgendes sagen; wenns mit C nicht mehr 
geht, dann muss ein schnellerer Controller her.
Bringt ja nichts, es allenfalls mit Müh und Not in Assembler gerade noch 
so hinzukriegen das es läuft nur um festzustellen, dass man später halt 
doch noch ein Feature mehr braucht, dass dann gerade nicht mehr geht und 
man dann eh auf eine schnellere Maschine umsteigen muss.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau dir mal dieen IC an: TLC5940

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.