PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM Tiny24



walterk
25.12.2012, 09:50
Hallo Forum!

Möchte auf einem Tiny24, Timer0 und/oder Timer1 ein PWM-Signal auf Port B2, A7 oder A6 ausgeben, testweise mit möglichst langsamen Blinken, ~1,9Hz. Die betreffenden LED bleiben dunkel.

Die Umgebung: Win7, MKII, selbstgelötete Testplatine mit LEDs an den Ausgängen.

Alle LEDs auf der Testplatine blinken, sowohl mit dem delay-Befehl, als auch mit einem Timer Overflow Interrupt, in dem eine Variable mitgezählt wird.

Die Originalprogrammierung, wie im Tiny24 verwendet, ist im Anhang.

Was habe ich übersehen?

Noch frohe Weihnachten

Walter

021aet04
25.12.2012, 10:07
Wo ist die gesamte Interruptprogrammierung?

Die TIMSK (Timer Interrupt Mask Register) fehlen bei beiden Timern. Es fehlt die generelle Interruptfreigabe ("sei();") und die eigentliche ISR.

MfG Hannes

walterk
25.12.2012, 11:06
Die Interruptprogrammierung ist wieder rausgelöscht.

Das Ziel ist eine funktionierende PWM, Die Interruptroutine hatte lediglich die Testaufgabe, zu ermitteln, ob der Timer überhaupt funktionert - hat er getan.

Für das Forum habe ich nun alles rausgelöscht, was nicht zur PWM-Frage gehört und den Code am Tiny24 nochmals getestet.

Mfg Walter

MagicWSmoke
25.12.2012, 11:59
Eine schöne Sammlung aller möglicher Fehler :D
Timer1 läuft im PWM, Phase Correct, 10-bit Modus, zählt also bis 1023, ein Comparewert von 10000 ist da zweckfrei, COM1A..Bx auch falsch zum Modus gesetzt.
Timer0 wird im PWM, Phase Correct Modus betrieben, OCRA ist der Top-Wert, OCRB identisch, da kommt erstens an PA6 nichts raus, höchstens an PA5, wenn er denn Ausgang konfiguriert wäre.
Com0Bx ist auch falsch entsprechend des Modus.
Wie wär's denn mal mit Datenblatt lesen ?

walterk
27.12.2012, 18:53
Danke für die rasche Antwort, beide Register richtig gesetzt, jetzt funktionierts.