Hallo, Ich stelle mir schon seit zwei Tagen die Frage, ob es möglich wäre, den Timer1 eines Mega16 sowohl als Timer/Counter als auch dessen Pwm-Kanäle (wenigstens Fast Pwm) gleichzeitig zu benutzen? Das Wälzen von Büchern und Google brachte mir keine Erkenntnisse... Habt ihr eine Antwort? Danke, Kay
Lies das Datenblatt und verstehe was die OCR Register tun. Wenn Du genau Dein Problem erläuterst kann Dir sicherlich direkt geholfen werden. Also entweder genau beschreiben was Du erreichen willst oder den Code der nicht geht hier einstellen ...
Kay H. schrieb: > Ich stelle mir schon seit zwei Tagen die Frage, ob es möglich wäre, den > Timer1 eines Mega16 sowohl als Timer/Counter als auch dessen Pwm-Kanäle > (wenigstens Fast Pwm) gleichzeitig zu benutzen? > Habt ihr eine Antwort? Natürlich, die Antwort ist ein eindeutiges jain. Es hängt schlicht von den Randbedingungen der geplanten Nutzung ab, über die du ja in deiner unermeßlichen Weisheit komplett den Schleier des Schweigens gebreitet hast.
Prinzipiell kann man einen Timer/Counter immer als Timer/Counter benutzen. ;)
Ich benötige wenigstens 2 Timer als Timer. Timer 0 soll eine Ablaufsteuerung übernehmen. Alle 2ms einen Überlauf, damit möchte ich ein Quasi-Multitasking realisieren. Timer 1 soll im Capture-mode laufen und Pulslängen messen. Zusätzlich möchte ich ein LCD über Pwm im Kontrast steuern als auch dessen Helligkeit. Und einen dritten Pwm- Kanal möchte ich haben, um noch eine weitere Led unabhängig davon in der Helligkeit zu steuern. Der Code steht noch nicht, deswegen kann ich keinen veröffentlichten...
Man kann z.B. auch die UART oder den ADC als Timer nehmen, also in einem konstanten Intervall einen Interrupt erzeugen. Oder den pinkompatiben ATmega1284 nehmen, der hat 4 Timer.
Du kannst mit einem Timer/Counter ein PWM-Signal ausgeben. Die Hardware toggelt den Pin selbstständig und vollautomatisch. Zusätzlich kannst du die Interrupts aktivieren und synchon! zur PWM Software ausführen lassen. Beispielsweise kannst du deine "Systemuhr" fürs Multitasking bei jedem Overflow-Interrupt des LCD-Timers einen "Klick" machen lassen, zuzätzlich zum Pin-toggle der Hardware.
Was immer wieder vergessen wird ist, man kann einen Timer auch sehr einfach, für verschiedenen Zeiten, und zwar gleichzeitig, verwenden. Das Schema dafür ist recht einfach: Begin ISR (alle 1 ms aufgerufen) if (PrellZeit) --PrellZeit; // Genutzt zur Tastenentprellung if (BlinkZeit) --BlinkZeit; // Blinkzeitgeber if (BeepZeit) --BeepZeit; // Für einen Piepser Ende ISR In der Hauptschleife können die Variablen jederzeit gesetzt werden z.B. eine Tastaturentprellung und ein Blinker durch: ... // Taste betätigt If (...) { PrellZeit = 300; // 300 ms } // Taster immer noch betätigt und Prellzeit abgelaufen? If (... && !PrellZeit) { } ... // Blinker If (...) { BlinkZeit = 2000; // 2 s } // Blinkzeit abgelaufen? If ( ... && !BlinkZeit ) { } ... // weiter in der Hauptschleife
Eine weitere Methode ist Soft-PWM die reicht mehr als aus für LED und LCD. Schau Dir den Artikel hier darüber an.
Die Kontraststeuerung über PWM ist Quatsch, den Kontrast optimiert man mit einem Poti, oder einem Trimmer. Was hat man davon, den LCD-Kontrast abzuschwächen? Ansonsten sehe ich kein Hindernis, den Timer1 frei laufen zu lassen (NORMAL-Mode): - Kommt ein Capture-Event, liest du im Capture-IRQ den Zählerstand aus. - Nebenbei schalten sich die Ports OC1A und OC1B ein und aus, je nachdem wie du nach Table 44 die COM1A1/COM1B1 und COM1A0/COM1B0 Bits setzt - wobei du die Ein-, oder Ausschaltdauer mit den Registern OCR1AH/OCR1AL und OCR1BH/OCR1BL vorgibst. Wenn die Zykluszeit von Timer1 kleiner, als 10 ms ist, gibt das zwei brauchbare Helligkeitssteuerungen. :-)
Danke für die vielen konstruktiven Beiträge. Dem Hinweis mit dem OCR bin ich nachgegangen um herauszufinden, dass der Timer im FastPWM-Mode bei einem Überlauf auch das TOV-Flag setzt. @Peter: Den Ansatz mit der UART finde ich interessant. Wie funktioniert das?
Die Soft-Pwm aus dem Tutorial möchte ich in dieser Form nicht anwenden. Es macht für mich keinen wirklichen Sinn, IN einer ISR einen weiteren Timer laufen zu lassen. Allerdings hat es mich auf eine andere Idee gebracht. Ich denke, es dürfte für die Steuerung der Helligkeit eines Displays ausreichend sein, wenn man diese 10%-weise einstellen kann. Also pro Überlauf des Timer 1 (alle 2 ms) eine Variable von 0-9 und wieder von 0 beginnend hochzählen zu lassen und abhängig von den Zählerständen dieser Variablen die Beleuchtungs-LED ein- und auszuschalten. Und ja- möglicherweise ist die Kontraststeuerung des Displays über Software recht sinnfrei. Ich hatte mir allerdings davon versprochen, evtl. automatisch auf die Umgebungstemperatur reagieren zu können.
:
Bearbeitet durch User
Bernie schrieb: > Die Kontraststeuerung über PWM ist Quatsch Ist es nicht. > den Kontrast > optimiert man mit einem Poti, oder einem Trimmer. Ja. Das klappt für genau eine Umgebungstemperatur. Dann trägst du das Gerät an einem kalten Wintertag nach draußen und siehst nach zwei, drei Minuten garnix mehr auf dem Display. Dann schraubst du wieder an deinem blöden Poti rum, ggf. nach Zerlegung des Gehäuses... Wie praktisch wäre es doch, einfach mit einem Sensor die Umgebungstemperatur zu erfassen und die Kontrastspannung abhängig davon auf den optimalen Wert für diese Temperatur zu bringen. Oops... Jetzt wäre PWM doch ganz praktisch...
Kay H. schrieb: > Ich benötige wenigstens 2 Timer als Timer. Timer 0 soll eine > Ablaufsteuerung übernehmen. Alle 2ms einen Überlauf, damit möchte ich > ein Quasi-Multitasking realisieren. Timer 1 soll im Capture-mode laufen > und Pulslängen messen. OK. Damit eignet sich Timer1 schonmal prinzipiell dazu, nebenbei den dritten PWM-Kanal auf OC1B zu liefern. Von den drei geplante PWM-Nutzungen wäre am besten die Konstraststeuerung geeignet, an diesem PWM-Kanal zu laufen, denn die muß sich mit Sicherheit nur vergleichsweise langsam ändern, da stört also die lange Zykluszeit durch den für die Capture-Funktion idealerweise anzustrebenden vollen Zählumfang des Timers nicht weiter.
So, kleiner Zwischenstand- es funktioniert prinzipiell, ich bin aber dennoch davon abgekommen, OC1A/B zu benutzen. Dadurch, dass ich die Capturefunktion noch brauche und die benötigte maximale Periodenlänge im Mehrere-100-ms-Bereich liegen wird, ist eine Dimmung mit Timer1 ungeeignet. Die Kontraststeuerung habe ich vorerst über Soft-PWM realisiert, fraglich ist aber, ob ich sie wirklich brauche: Der Kontrast hat beim Test im Kühlfach keine für mich merkliche Verschlechterung ergeben. Das Display wurde lediglich sehr träge. Danke an alle...
:
Bearbeitet durch User
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.