- LiTime Speicher und Akkus         
Ergebnis 1 bis 6 von 6

Thema: PWM mit TCA auf Attiny 806

  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.055

    PWM mit TCA auf Attiny 806

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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
    Geändert von 021aet04 (07.11.2021 um 20:56 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.702
    Blog-Einträge
    133
    Zitat Zitat von 021aet04 Beitrag anzeigen
    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/e...-90003217A.pdf

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

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.055
    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
    Geändert von 021aet04 (09.11.2021 um 11:44 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.702
    Blog-Einträge
    133
    Zitat Zitat von 021aet04 Beitrag anzeigen
    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!
    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.055
    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

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.055
    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.
    Klicke auf die Grafik für eine größere Ansicht

Name:	Bild_2021-11-13_172112.jpg
Hits:	3
Größe:	84,4 KB
ID:	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

Ähnliche Themen

  1. [ERLEDIGT] UART bei ATTINY AVR 1 Serie (ATTINY 412)
    Von Gnom67 im Forum C - Programmierung (GCC u.a.)
    Antworten: 19
    Letzter Beitrag: 27.12.2018, 23:17
  2. Attiny PCB
    Von moritz31 im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 29.04.2016, 16:10
  3. AtTiny 12L + 1*16 LCD ?
    Von Robin1508 im Forum AVR Hardwarethemen
    Antworten: 10
    Letzter Beitrag: 27.12.2007, 15:55
  4. ATtiny 13 mit Stk 500
    Von AVRboy im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 01.10.2006, 17:36
  5. ATtiny 13 bzw. 85
    Von MrQu im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 16.05.2005, 16:51

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus