Timer im AVR

Hallo Ihr,

Habe Probleme mit dem AT90S2313. Bei einer Quarzfrequenz von 7372800, möchte ich eine Frequenz von 40 kHz an Portd.4 zur Verfügung stellen. Dazu bräuchte ich bei Prescale von 1, ein Reload von 92. Aber erst ab Reload 150 erhalte ich eine Frequenz von ca.25kHz am Ausgang. Sobald ich den Wert verkleinere, passiert nix mehr am Ausgang. Was mache ich falsch, hat jemand ein Tipp?

Mit besten Dank Jürgen

Hier mal der Code (Bascom)

------------------------ Dim X As Byte Config Portd = Output Const Reload = 150 Config Timer1 = Timer , Prescale = 1 Ocr1ah = High(reload) Ocr1al = Low(reload) Tccr1a = 0 Set Tccr1b.3 On Compare1a Timer1_isr Enable Compare1a Enable Interrupts

Do If X = 1 Then Set Portd.4 If X = 2 Then Reset Portd.4 X = 0 End If Loop

End

Timer1_isr: X = X + 1 Return

Reply to
=?iso-8859-1?Q?J=FCrgen_Schulz
Loading thread data ...

Bascom erzeugt offensichtlich dafür einen zu langsamen Code. Selbst ein C-Compiler hat da schon nicht mehr viel Spielraum (ich hatte mal mit dem AVR-GCC bei 10 MHz einen 65kHz-Interrupt generiert).

Statt die 40 kHz "von Hand" zu erzeugen, dürfte es in Deinem Fall besser sein, Du benutzt einen der Timer, um damit den OC1-Pin (Port B3) zu toggeln (schaue Dir mal das Register TCCR1A genauer an). So würdest Du ausschließlich Hardware für die Generierung Deines Rechtecks benutzen und nicht noch unnötig Rechenperformance verbraten.

Thomas.

Reply to
Thomas Rehm

So etwas aehnliches dachte ich mir auch.

Vor allem die Abfrage auf X=1 bzw X=2 ist ungut, wenn X schon groesser als 2 ist (weil isr X moeglicherweise schneller raufzaehlt, als abgefragt wird). Ich haette diese Abfrage in die isr verschoben.

Das ist die eleganteste Loesung.

servus thomas

Reply to
Thomas Mozgan

Hallo,

Thomas Rehm schrieb:

Mit ON werden bei jedem Interrupt die Register 0.11, 16..31 und SREG gesichert, und wieder zurückgeholt. Das dauert entsprechend, frißt Programmspeicher und RAM. Du kannst die NOSAVE - Option benutzen, die das umgeht, siehe dazu die Hilfedatei bzw. die BASCOM-Mailliste. Leider muß man dabei selbst herausfinden, welche Register gesichert werden müssen.

Gruß, Bernhard

Reply to
Bernhard Deny

Dank Dir, das hört sich gut an, werde ich morgen gleich mal machen.

Jürgen

Reply to
=?iso-8859-1?Q?J=FCrgen_Schulz

Es geht, juchhu. Die 40kHz sind kein Problem ...

Danke

Jürgen

Reply to
=?iso-8859-1?Q?J=FCrgen_Schulz

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.