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
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