PWM mit TCA auf Attiny 806
Hallo Community,
ich versuche schon ein paar Stunden den Timer ans laufen zu bekommen.
Leider bin ich bis jetzt gescheitert.
Ich bin gerade dabei eine von mir geplante Platine etwas zu ändern.
Jetzt möchte ich gleichzeitig den uC von einen Attiny 44 zu einen Attiny 806 tauschen (neuer und mehr I/Os).
Auf dieser Platine benötige ich PWM.
Habe zum Testen einfach einen Attiny auf eine Adapterplatine gelötet und auf ein Breadboard gesteckt.
Ich programmiere mit Atmel Studio 7. Die genaue Version ist 7.0.2389
Das ist "Main", das Programm soll nur die PWM erhöhen (ist ein reines Testprogramm).
Code:
PORTC.DIR = (1<<PIN0_bp);
PORTB.DIR = (1<<PIN0_bp) | (1<<PIN1_bp);
PORTMUX.CTRLC = 0x03;
TCA0.SINGLE.CTRLB = 0x35;
TCA0.SINGLE.EVCTRL &= ~(TCA_SINGLE_CNTEI_bm);
TCA0.SINGLE.PER = 0x00;
TCA0.SINGLE.CTRLA = 0x0f;
volatile uint8_t PWM = 0, PWM_1 = 0;
while (1)
{
PORTC.OUTTGL = (1<<PIN0_bp);
PWM++;
PWM_1 = 255 - PWM;
TCA0.SINGLE.CMP0BUFL = PWM;
_delay_ms(100);
TCA0.SINGLE.CMP1BUFL = PWM_1;
_delay_ms(500);
}
Das delay(100) habe ich zum Test eingefügt, weil die PWM-Variablen in den Buffer geschrieben wurde. Zuerst habe ich CMP0L bzw. CMP1L getestet und danach die BUFL.
Am Anfang habe ich mit 20MHz getestet (20MHz Takt ohne Prescaler), habe danach auf ~3,3MHz verringert. Verschiedene Timer Prescaler habe ich auch schon getestet. Habe noch einiges mehr getestet (z.B. mit und ohne CNTEI), alles ohne Erfolg.
Meine Frage ist, ob sich jemand mit dem uC auskennt und mir einen Tipp geben kann.
Ich habe den Timer eingestellt, so wie es laut DB sein sollte für Single Modus.
Laut Debugger ist der Timer auch aktiv, aber CNT ändert sich nicht (bleibt "0"). Die beiden Ausgänge schalten auch nicht.
MfG Hannes
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt herausgefunden wie der TCA funktioniert.
Im DB gibt es eine Tabelle mit den Anschlüssen und deren Funktion/Sonderfunktion. In meinem DB ist die Tabelle auf S16.
Anhang 35639
Die Standard Anschlüsse für den TCA sind Pin 19, 2, 3 und 9-11 (in meinem Fall, weil ich das SOIC20 Gehäuse habe).
Es gibt aber auch die altenativen Pins 6-8 und 15. Mir war nicht klar wie man das umschaltet. Jetzt weiß ich aber, dass man das mit dem PORTMUX umschaltet.
Ich habe somit die alternativen Pins verwendet und dadurch am falschen Pin geschaut. Ich habe jetzt zum Test das PORTMUX auskommentiert und es funktioniert am gewünschten Anschluss.
Ich muss jetzt noch weiter testen. Ich habe aber bis jetzt nur den Code verwendet so wie er in der Appnote steht.
MfG Hannes