Moin,
im Rahmen eines größeren Projektes bin ich auf ein Problem gestoßen,
welches ich nicht lösen kann.
Ich habe daher mein Projekt eingedampft um das Problem zu verdeutlichen.
Dieses Programm soll nun auch nicht einen wissenschaftlichen Anspruch
haben sondern nur das Problem aufzeigen.
Also mit Timer0 sowie zwei Registern erzeuge ich Perioden von ca. 10
Sekunden Länge. Während dieser Zeit werden drei Register hochgezählt.
Dies geschieht in der Schleife loop.
Nach ca. zehn Sekunden werden die Zählerwerte ausgegeben.
Als Taktquelle dient ein eingelaufener OCXO mit 10 MHz (9.99999964 MHz).
HTerm_Output_1.PNG zeigt nun, den Output in HTerm. Nach der vierten
Ausgabe sind die Zählerstände stabil.
Nun zum Problem: Wenn ich diese beiden Zeilen einfüge,
1
;*************************
2
ldi temp0, (1<<CS12)
3
sts TCCR1B, temp0
4
;*************************
dann wird ja lediglich für Timer1 die Taktquelle ausgewählt. Es ist
übrigens egal, welchen Teiler man wählt.
Aber, dann läuft das eigentliche Programm nicht mehr "rund", wie man in
HTerm_Output_2.PNG sehen kann. Schaut man sich das länger an, dann
scheinen die Werte zu oszillieren. Ich meine fast schon sägezahnähnlich
...
Woran kann das liegen?
Gruß
Holger
Hallo,
man muss außerdem noch Fragen, warum auch die verwendeten Register,
neben dem SRRG, in der ISR nicht gesichert werden?
Warum verwendet man keine Hochsprache ?
Dadurch kommt man schneller ans Ziel und kann einen Code besser warten
und verstehen.
Über Datentypen und deren Arithmetik muss man sich auch keine weiteren
Gedanken, hier Programmcode, machen.