ATMega88 PWMs synchronisieren

Gast #2476005
Lesenswert?

Hallo liebe Gemeinde,

ich versuche gerade, die Ansteuerung für eine RGBW-Anwendung zu 
realisieren und habe nur folgende PINs meines µCs dafür zur Verfügung:

// PD6/PIN12 > OC0A
// PD5/PIN11 > OC0B
// PB1/PIN15 > OC1A
// PD3/PIN5  > OC2B

Ich probiere nun schon seit einiger Zeit herum und hab die 
Registerbeschreibungen dazu jetzt schon unzählige Male durchgeackert, 
bekomme aber keine vier synchrone Ausgangssignale hin. Temporär sieht 
mein Code wie golgt aus:
1
// Konfiguration der I/Os
2
  DDRB = 0xFF;
3
  DDRD = 0xFF;
4
    // Modi-Festlegung der Timer/Counter auf nicht-invertierte 10-Bit PWMs:
5
  // COMnxn = Ausgabeart des PWM-Signals(pro PWM-Kanal)
6
  // WGMnn = Pulsweiten-Modulatorbits, um den PWM-Modus zu aktivieren und einzustellen(pro Timer)
7
  TCCR0A = (1<<COM0A1) | (1<<COM0B1)              | (1<<WGM01) | (1<<WGM00);
8
  TCCR1A = (1<<COM1A1)               | (1<<WGM12) | (1<<WGM11) | (1<<WGM10);
9
  TCCR2A =               (1<<COM2B1)              | (1<<WGM22) | (1<<WGM21) | (1<<WGM20);
10
  // Clock Select Bits(CSnx = Vorteiler):
11
  TCCR0B = (1<<CS02) | (1<<CS00);
12
  TCCR1B = (1<<CS12) | (1<<CS10); // 1024
13
  TCCR2B = (1<<CS22) | (1<<CS21) | (1<<CS20);
14
    // Festlegung der PWM-Startwerte:
15
  // OCRnx = Pulsbreite(pro PWM-Kanal)
16
  OCR0A = OCR0B = OCR2B = 200;
17
    OCR1A = 512;

Viele Grüße
Gast #2476078
Lesenswert?

Hallo Spess,

mit synchron meine ich synchron^^ - also vier Signale in gleichem Takt 
(fester Startpunkt, gleiche Pulsbreite, gleicher Endpunkt).
Der Einfachheit halber würde ich gern von Anfang an im selben Format für 
die Ansteuerung der PWMs arbeiten. Also nicht noch irgendwelche eventl. 
Anpassungen (Rechnungen) zur Laufzeit...
Das müsste doch mit den vorhandenen PWMs leicht gehen, oder?

Viele Grüße
#2476082
Lesenswert?

Newbie schrieb:
> Niemand einen Rat?

1) wie lautet die genaue Fehlerbeschreibung?
   nicht synchrones PWM ist ein wenig sehr schwammig.

2) Wenn du willst, dass das hier
1
  TCCR0A = (1<<COM0A1) | (1<<COM0B1)              | (1<<WGM01) | (1<<WGM00);
2
  TCCR1A = (1<<COM1A1)               | (1<<WGM12) | (1<<WGM11) | (1<<WGM10);
3
  TCCR2A =               (1<<COM2B1)              | (1<<WGM22) | (1<<WGM21) | (1<<WGM20);
4
  // Clock Select Bits(CSnx = Vorteiler):
5
  TCCR0B = (1<<CS02) | (1<<CS00);
6
  TCCR1B = (1<<CS12) | (1<<CS10); // 1024
7
  TCCR2B = (1<<CS22) | (1<<CS21) | (1<<CS20);
jemand für dich überprüft, wäre die Kentniss des Prozessors notwendig. 
Ansonsten ist das nämlich einfach nur toter Code.
#2476087
Lesenswert?

> mit synchron meine ich synchron^^ - also vier Signale in gleichem Takt
(fester Startpunkt, gleiche Pulsbreite, gleicher Endpunkt).

Dazu müsstest du die Timer absolut gleichzeitig starten können. Was dau 
aber nicht kannst. D.h. du wirst immer einen (kleinen) Versatz haben.

Allerdings: Wozu soll es bei einer RGBW (Wofür steht das W?) Ansteuerung 
notwendig sein, dass die einzelnen Farbkanäle exakt gleiche PWM-Pulse 
haben?
Gast #2476101
Lesenswert?

RGBW steht für Rot-Grün-Blau-Weiß. Neueste RGB-LED-Chips haben aus 
Gründen der Effizienz noch zusätzliche Farben eingebaut - mit einem 
zusätzlichen weißen Chip kann man so z.B. die restlichen Farben (die man 
ja für die Erzeugung von weiß benötigt) einsparen und braucht so nur 1/3 
der ursrünglichen Energie.

Ich hab', glaub ich, ein wenig um die Kurve gedacht.^^ Die PWM im 
Hintergrund wird man ja eh niemals optisch sehen können. Hat sich also 
wirklich erledigt...^^ Danke.

LG

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren