-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Tiny 2313 wie geht 4 x PWM

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    55
    Beiträge
    534

    Tiny 2313 wie geht 4 x PWM

    Anzeige

    Hallo,
    ich grüble überm Datenblatt - da steht der 2313 kann 4 Hardware 8-Bit PWMs ...
    aber ich bekomm nicht in meinen Kopp, wie ich die Register setzen muß, und an welchen Ports die dann anliegen ...

    Der Tiny hat doch auch nur 1 x 8 Bit - und 1 x 16 Bit - Timer wie komme ich dann auf 4 getrennte PWM-Signale ..

    .. und wenn mir das jemand beantworten kann, was ist das schnellste, was dann möglich ist bei Q=20 MHz ?

    Würde mich sehr über Infos freuen,
    LG
    Vajk
    Ich kann mir keine Signatur leisten - bin selbständig!

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.05.2006
    Ort
    @ Home
    Alter
    29
    Beiträge
    270

    Re: Tiny 2313 wie geht 4 x PWM

    Tach!

    Der Attiny2313 hat zwei Timer mit jeweils zwei "output Compare Units". Zwei mal zwei macht laut Adam Riese und Eva Zwerg 4.
    Für Timer0 miss OCR0A und OCR0B geschrieben werden. Und eben TCNT0.

    Das PWM Signal liegt dann an den Pins OC0A und PC0B für Timer0 und OC1A und OC1b für Timer1 an. Wo die jetzt genau liegen musste halt im Datenblatt nachlesen, aber ich glaube die liegen alle recht dicht beieinander.

    MfG

    Schoko
    Warum bekommen Vegetarier immer eine Extrawurst?

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    55
    Beiträge
    534
    Hmm, daß es die Pins OC0A OC0B OC1A OC1B sein sollten ist mir nun inzwischen klar,
    nur aus dem DB werd ich nicht schlau, wie ich die Register für 4 x PWM setzen muß.
    Auch ob Fast PWM oder Phase Correct ...
    Sidn die 4 Ports dan unabhängig bis auch die selbe PWM-Frequenz?

    Und dann eben, mit welchem Takt ich ohne Vorteiler rechnen kann, daß die Ports geschaltet werden ...
    Ich kann mir keine Signatur leisten - bin selbständig!

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.05.2006
    Ort
    @ Home
    Alter
    29
    Beiträge
    270
    Da nimmste dir jetzt mal das Datenblatt vom ATtiny 2313 zur Hand und ließt da zumindest mal die Kapitel zu Timer0 und Timer1 durch. Da ist alles haargenau beschrieben. Was anderes würde ich auch nicht machen.
    Wenn du dann noch Fragen hast, kannste ja gezielt fragen, was du nicht verstanden hast.

    MfG

    Schoko
    Warum bekommen Vegetarier immer eine Extrawurst?

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    55
    Beiträge
    534
    RTFM hilft mir nicht - ich habe es gelesen.

    Was ich nicht lese ist:
    Wie kann ich auf die 4 PWMS zugreifen. Welche Flags muß ich hierfür setzen.
    4 PWM = Fast PWM oder PhaseCorrect ...

    Es gibt im Netz ein paar Tutorials, alle erklären prima PWM. Aber immer wird nur das englische Handbuch zitiert. Grummel.

    Kein einziges erklärt, wie ich einen 8Bit-Timer und den 16Bit-Timer so initialisiere, daß ich jeweils zwei PWM-Signale bekomme. Und eben 4.

    Und auch finde ich für diesen Fall, keine Information, wie schnell dies dann abgearbeitet werden kann, wieviel Prozessortaktzyklen dazu benötigt werden.
    Ich kann mir keine Signatur leisten - bin selbständig!

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.05.2006
    Ort
    @ Home
    Alter
    29
    Beiträge
    270
    Hallo!

    Also, erstmal glaube ich nicht, dass du das 231-Seitige Datenblatt des ATtiny2313 durchgelesen hast.

    Dann glaub eich auch nicht, dass du die zwei kapitel über Timer0 und Timer1 durchgelesen hast. Da steht nämlich alles haargenau drin. welches Register wie gesetzt werden muss, wann die Output Compare Unit was macht, wie PWM invertiert wird, welches Register die Pulsweite bestimmt, welches Bit für fast PWM oder Phase Correct PWM zuständig ist, was die maximalen PWM Frequenzen sind.
    Woher soll man denn sonst wissen, welche Register für was zuständig sind? Zufall? Göttliche Eingebung? Intuition?? NEIN, aus dem Dateblatt (ist auf Englisch, hat 231 Seiten und ist u.A. bei Atmel als Download erhältlich).

    So... danach haste ne gute Grundlage und 90% verstanden. Die Arbeit musste dir halt mal machen. Ohne Fleiß kein Preis.

    MfG
    Schoko

    P.S.: In welcher Sprache programmierst du?
    Warum bekommen Vegetarier immer eine Extrawurst?

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    55
    Beiträge
    534
    grummel - bin halt zu doof es zu kapieren
    da steht nicht explizit wie es mit 4 PWMs geht
    da steht nicht, was fast und nicht fast bedeutet ...

    wenn Du es so prima alles verstehst, sei doch so lieb und erklärs mir bitte.
    Ich kann mir keine Signatur leisten - bin selbständig!

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.05.2006
    Ort
    @ Home
    Alter
    29
    Beiträge
    270
    So... jetzt mal Schritt für Schritt:

    grummel - bin halt zu doof es zu kapieren
    Vielleicht nicht zu doof, eher zu faul


    da steht nicht explizit wie es mit 4 PWMs geht
    nicht direkt. Aber die verschiedenen Register von Timer0 werden auf Seite 77ff in der "Register Description" beschrieben. Das gleich enochmal auf Seite 108ff für Timer1.

    da steht nicht, was fast und nicht fast bedeutet ...
    Oh doch!! Sogar mit Schaubild!! Und das sogar zweimal!! Einmal Seite 72ff und einmal Seite 100ff (da sieht man mal wieder, dass nicht die Mühe gemacht wurde, auch nur einen Blick ins Datenblatt zu werfen)


    wenn Du es so prima alles verstehst, sei doch so lieb und erklärs mir bitte.
    Also das Bisschen is ja nun wirklich nicht schwer.

    MfG

    Schoko

    P.S.: Nochmal die Frage: In welcher Sprache programmierst du?? Zufällig BASIC?
    Warum bekommen Vegetarier immer eine Extrawurst?

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    55
    Beiträge
    534
    @Schokohoernl
    Oh lieber Lehrer, wir sind da an einer Sackgasse angekommen.
    Meine Bitte: behalten Sie Ihre Mutmaßungen bitte für sich.

    Sie wollen es nicht erklären und ich verstehe das Datenblatt nicht.

    Und nein, ich programmiere nicht in Basic.
    Ich kann mir keine Signatur leisten - bin selbständig!

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Vajk, vielleicht hilft Dir ein bisschen Code weiter (ist für den Mega16. Da werden in den einzelnen Routinen jeweils die 8bit (Timer 0 und 2) sowie der 16bit Timer (Timer 1) gesetzt
    Code:
    void pwmInit( void )
    {
    	// enable PWM outputs
    	DDRD = (1<<6) | (1<<5);
    
    	pwmWidth = 0x10;
    	// initialise time and pwm modes
    	pwmInit0();
    //  pwmInit1();
    //	pwmInit2();
    }
    
    
    
    void pwmInit0( void )
    {
    	// 8 bit phase correct PWM
    	TCCR0A = (1<<COM0A1)|(1<<COM0B1)|(1<<WGM00);
    
    	// set prescaler for PWM frequency
    	TCCR0B = (1<<CS01); // This selects prescaler 8. fPWM = F_CPU/(510*Prescaler) = 4.52kHz@18.432MHz
    
    	// for fast initialisation (OCRxA/B values are taken on the first TCNTx = TOP)
    	TCNT0 = 0xfe;
    	
    	// set initial PWM Width
    	OCR0A = pwmWidth;
    	OCR0B = 0x03;
    }
    
    
    void pwmInit1( void )
    {
    	// 16 bit phase correct PWM
    	TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM10);
    
    	// set prescaler for PWM frequency
    	TCCR1B = (1<<CS11);
    
    	// for fast initialisation (OCRxA/B values are taken on the first TCNTx = TOP)
    	TCNT1 = 0x00fe;
    	
    	// set initial PWM Width
    	OCR1A = (uint16_t)pwmWidth;
    	OCR1B = (uint16_t)0x03;
    }
    
    
    void pwmInit2( void )
    {
    	// 8 bit phase correct PWM
    	TCCR2A = (1<<COM2B1)|(1<<WGM20);
    
    	// set prescaler for PWM frequency
    	TCCR2B = (1<<CS21);
    
    	// for fast initialisation (OCRxA/B values are taken on the first TCNTx = TOP)
    	TCNT2 = 0xfe;
    
    	// set initial PWM Width
    	OCR2B = pwmWidth;
    }
    Durch Umsetzen der entsprechenden OCRxA und OCRxB Register im Programm, kannst Du das Puls-Pausen Verhältnis ändern.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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