PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit TCA auf Attiny 806



021aet04
07.11.2021, 20:30
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).

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

Searcher
08.11.2021, 09:17
Meine Frage ist, ob sich jemand mit dem uC auskennt und mir einen Tipp geben kann.


Hallo Hannes,
ich kenne den Tiny auch nicht aber mir ist aufgefallen, daß im Dual Slope Modus die Periode auf 0 gesetzt ist. Das TCA0.SINGLE.PER hat auch einen Buffer (TCA0.SINGLE.PERBUF)

Zum TCA gibt es eine App Note: http://ww1.microchip.com/downloads/en/AppNotes/TB3217-Getting-Started-with-TCA-90003217A.pdf

Dort ist auch die Reihenfolge von Aktivierung der Outputs und des PORTMUX etwas anders.

Gruß
Searcher

021aet04
09.11.2021, 11:37
Danke für die Antwort, diese PDF habe ich auch schon gefunden.

Ich werde es zum Test genau so machen wie in der PDF. Vielleicht funktioniert es ja.

Ich werde berichten.

Edit: Was mir in dem PDF aufgefallen ist, ist das PORTMUX Register. Das PORTMUX Register ist aufgeteilt in 4 Unterregister.
Die heißen PORTMUX.CTRLA bis PORTMUX.CTRLD, das sollte aber egal sein.

MfG Hannes

Searcher
09.11.2021, 14:51
Edit: Was mir in dem PDF aufgefallen ist, ist das PORTMUX Register. Das PORTMUX Register ist aufgeteilt in 4 Unterregister.
Die heißen PORTMUX.CTRLA bis PORTMUX.CTRLD, das sollte aber egal sein.

Ich kann mangels HW leider nur in der Doku stöbern. Der Timer TCA ist wohl in verschiedenen neuen AVR Serien zu finden. Die zu verwendenden Namen muß man, so scheint es, wieder dem Datenblatt zum konkreten µC entnehmen. Im o.g. pdf zum TCA ist ein "PORTMUX.TCAROUTEA" verwendet. Den Namen TCAROUTEA findet man zB im Datenblatt zum ATmega4808 im Abschnitt "Register Summary - PORTMUX". Beim ATtiny806 gibt es im gleichnamigen Abschnitt dort eben das CTRLA...CTRLD.

Erfolgreiches Testen!:pray:
Gruß
Searcher

021aet04
11.11.2021, 18:24
Vielen Dank für die Antwort. Habe es am gleichen Tag noch ans Laufen gebracht (glaube ich zumindest). Muss erst mit einem Messgerät testen. Bin aber seit dem nicht dazugekommen.

Ich habe es genau so gemacht wie es in der PDF steht. Es hat aber trotzdem nicht gleich funktioniert. Ich habe es mit dem falschen Anschluss probiert. Es gibt die Anschlüsse W00 bis W05 jeweils 2x. W00 bis W05 wird vom TCA angesteuert. Muss aber noch testen wie man das umstellen kann bzw wie das ganze genau funktioniert.

Wenn ich wieder etwas Zeit habe teste ich weiter und melde mich dann.

Mfg Hannes

021aet04
13.11.2021, 17:30
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.
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