Hallo Forengemeinde, ich arbeite zur Zeit mit einem ATtiny26 und versuche ein PWM-Signal mit einstellbaren Frequenz zu erzeugen. Klappt leider nicht. Aus dem Datenblatt habe ich folgendes herausgesucht: - Timer 1 benutzen - PWM-Signal an PB1 ausgeben, PWM-Mode einschalten TCCR1A |= (1<<COM1A1) | (1<<PWM1A); - Timer wird bei erreichen der Compare-Referenz (CTC) gelöscht, Vorteiler CK/8 TCCR1B |= (1<<CTC1) | (1<<CS12); Mit Timer0 erzegue ich einen periodischen Interrupt und verändere den Wert von OCR1C. Dieser Interrupt funktioniert auch. Außerdem verstehe ich nicht, was ich in das OCR1A-Register schreiben muss. Wäre schön, wenn mir jemand einen hilfreichen Tipp geben kann. Danke und Gruß. Paul
PWM verändert nicht die Frequenz sonder die Puls-BREITE. Wenn du wirklich ein PWM Signal erzeugen willst bei dem du auch die Frequenz verändern kannst (also zusätzlich zur Pulsbreite), dann mußt du zusätzlich noch ne Frequenz erzeugen die du verändern kannst. Dies könnte man z.B. mit dem Timer0 Ausgang machen der als Clock Eingang für Timer1 fungiert (also PIN am IC verdrahten. (kann man schöne sachen mit machen wenn man zusätzlich noch nen PLD zwischenschaltet und das PLD mit noch nen PAR PINS verbindet ;-))
Hi >willst bei dem du auch die >Frequenz verändern kannst (also zusätzlich zur Pulsbreite), dann mußt du >zusätzlich noch ne Frequenz erzeugen die du verändern kannst. Dies >könnte man z.B. mit dem Timer0 Ausgang machen der als Clock Eingang für >Timer1 fungiert (also PIN am IC verdrahten. (kann man schöne sachen mit >machen wenn man zusätzlich noch nen PLD zwischenschaltet und das PLD mit >noch nen PAR PINS verbindet ;-)) Die Frequenz der PWM kann bei Timern mit einstellbarem Topwert leicht verändert werden. Beim Timer1 vom ATTiny26 ist das OCR1C. Allerdings verringert sich auch die Auflösung der PWM. MfG Spess
Danke Spess für deine Antwort. Genau diese Funktion des Timer1 meine ich und möchte ich auch benutzen, nur klappt das leider nicht. Mit den Registern TCCR1A und TCCR1B habe ich versucht dem Timer1 die gewünschte Funktion zu zuweisen. Zusätzlich habe ich den Output Compare Interrupt aktiviert (OCIE1A) und die entsprechende ISR (TIMER1_COMPA_vect ? ) eingebunden. Ich dachte eigentlich, dass die Funktion des Pins PB1 schon über die Register TCCR1A und B eingestellt wird. Oder muss ich dies in der ISR machen? In meinem 16ms Interrupt wird dann die Frequenz ausgegeben (wird ins OCR1C-Register geschrieben) und erhöht. Leider passiert am Pin nichts. Gruß Paul
Hi >Genau diese Funktion des Timer1 meine ich und möchte ich auch benutzen, >nur klappt das leider nicht. Um eine PWM zu erhalten (bei PWM1A=1) müssen OCR1A und OCR1C Werte >0 enthalten und OCR1A sollte <= OCR1C sein. OCR1C besimmt die Frequenz der PWM und OCR1A die Einschaltzeit. Aber bist du dir sicher, das du PWM willst? In deinem Programm lese ich etwas von Lauflicht. MfG Spess
Also das Lauflicht habe ich als erstes programmiert, um mit dem Timer0 etwas zu machen. Außerdem hab ich so immer einen Anhaltspunkt, ob mein Programm überhaupt läuft :-) Mit dem Timer1 und dem CTC-Modus möchte ich einen Ton über eunen kleinen Lautsprecher ausgeben. Deshalb möchte ich eine veränderbare Frequens, wie anfangs erwähnt. Also das OCR1A-register habe ich ja nicht beschrieben, deshalb müsste ja als Default 0 drin stehen und kein Veränderung am Pin hervorrufen. Werd ich gleich mal ändern. Könntest du mir sagen, ob meine Interrupts richtig eingestellt sind? Danke and Gruß
Hi >Könntest du mir sagen, ob meine Interrupts richtig eingestellt sind? Kommt darauf an, was du mit dem OC1A-Interrupt willst. >Mit dem Timer1 und dem CTC-Modus möchte ich einen Ton über eunen kleinen >Lautsprecher ausgeben. Deshalb möchte ich eine veränderbare Frequens, >wie anfangs erwähnt. Da hast du (wenn ich das Datenblatt richtig intrpretiere) zwei Möglichkeiten: 1. Du nutzt PWM und setzt immer OCR1A auf OCR1C/2 2. Du benutzt nur OCR1C mit CTC1 und Togglest den Pin im Overflow-Interrupt. Warum hast du dir eigentlich den ATTiny26 ausgesucht? Die Timer von den meisten anderen AVRs sind wesentlich universeller. MfG Spess
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.