ACsenf
15.12.2005, 11:40
Hallo!
Nun ist es mal wieder soweit und etwas funktioniert nicht.
Kurz worum es geht: Ich bin gerade daran mit dem Atmega 32 einen Frequenz bzw. Pulsmustergenarotor zu programmieren. Der Timer muss verwendet werden, da in der Zwischenzeit auch noch andere Funktionen ausgeführt werden müssen.
Da ich kein Freund von ewigen Tabellen bin, viel zu viel Aufwand O:) , habe ich ein Unterprogramm geschrieben, welches den benötigten Prescalerwert bestimmt und dann den zur Vorgewälten Frequenz passenden Reloadwert berechnet. Das benötigt zwar etwas Zeit macht aber nix, da es im Setupmode abläuft. Dieser Teil funktioniert einwandfrei!
Nun aber zum Problem: Ich hatte das ganze, damals allerdings mit direkten Werten mit einem AT90S8515 getestet und sah so aus:
If A = 0 Then
A = 1
Elseif A = 1 Then
Config Timer1 = Timer , Prescale = 256 'Ausgabe 0,5Hz
Timervorgabe1 = 49911
Elseif A = 2 Then
Config Timer1 = Timer , Prescale = 256 'Ausgabe 1Hz
Timervorgabe1 = 57724
Elseif A = 3 Then
Config Timer1 = Timer , Prescale = 256 'Ausgabe 1,5Hz
Timervorgabe1 = 60328
Elseif A = 4 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 2Hz
Timervorgabe1 = 49911
Elseif A = 5 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 2,5Hz
Timervorgabe1 = 53036
Elseif A = 6 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 3Hz
Timervorgabe1 = 55119 .... usw
Dies klappt auf dem 8515. Nicht aber auf dem Mega32!!!
Das jetzige Programm ist natürlich viel übersichtlicher, da nur noch Verzweigungen für die benötigten Prescale Werte nötig sind.
Allerdings übernimmt der Chip im laufenden Programm den neuen Wert einfach nicht. Da man für Prescale ja keine Variable nehmen kann muss es ja wie oben gelößt werden. Habe das Programm schon zig mal im Simulator getestet, und da geht alles. Auf dem Chip selber sieht man dass alles korrekt abläuft, bis ein neuer Prescale geladen werden müsste, der wird einfach nicht übernommen.
Kennt jemand dieses Problem? Oder gibt es eine andere Lösung? Warum funktioniert es mit dem 90S8515 und nicht mit dem Mega32? Den Timer 1 müsste ich verwenden, weil ich bis 0,5 Hz gehen muss!
Der Quarztakt ist auch in Ordnung, sonst würde das Programm ja mit den in der Init gesetzten ja nicht richtig funktionieren.
Bin auf Eure Antworten gespannt,
Sven
Nun ist es mal wieder soweit und etwas funktioniert nicht.
Kurz worum es geht: Ich bin gerade daran mit dem Atmega 32 einen Frequenz bzw. Pulsmustergenarotor zu programmieren. Der Timer muss verwendet werden, da in der Zwischenzeit auch noch andere Funktionen ausgeführt werden müssen.
Da ich kein Freund von ewigen Tabellen bin, viel zu viel Aufwand O:) , habe ich ein Unterprogramm geschrieben, welches den benötigten Prescalerwert bestimmt und dann den zur Vorgewälten Frequenz passenden Reloadwert berechnet. Das benötigt zwar etwas Zeit macht aber nix, da es im Setupmode abläuft. Dieser Teil funktioniert einwandfrei!
Nun aber zum Problem: Ich hatte das ganze, damals allerdings mit direkten Werten mit einem AT90S8515 getestet und sah so aus:
If A = 0 Then
A = 1
Elseif A = 1 Then
Config Timer1 = Timer , Prescale = 256 'Ausgabe 0,5Hz
Timervorgabe1 = 49911
Elseif A = 2 Then
Config Timer1 = Timer , Prescale = 256 'Ausgabe 1Hz
Timervorgabe1 = 57724
Elseif A = 3 Then
Config Timer1 = Timer , Prescale = 256 'Ausgabe 1,5Hz
Timervorgabe1 = 60328
Elseif A = 4 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 2Hz
Timervorgabe1 = 49911
Elseif A = 5 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 2,5Hz
Timervorgabe1 = 53036
Elseif A = 6 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 3Hz
Timervorgabe1 = 55119 .... usw
Dies klappt auf dem 8515. Nicht aber auf dem Mega32!!!
Das jetzige Programm ist natürlich viel übersichtlicher, da nur noch Verzweigungen für die benötigten Prescale Werte nötig sind.
Allerdings übernimmt der Chip im laufenden Programm den neuen Wert einfach nicht. Da man für Prescale ja keine Variable nehmen kann muss es ja wie oben gelößt werden. Habe das Programm schon zig mal im Simulator getestet, und da geht alles. Auf dem Chip selber sieht man dass alles korrekt abläuft, bis ein neuer Prescale geladen werden müsste, der wird einfach nicht übernommen.
Kennt jemand dieses Problem? Oder gibt es eine andere Lösung? Warum funktioniert es mit dem 90S8515 und nicht mit dem Mega32? Den Timer 1 müsste ich verwenden, weil ich bis 0,5 Hz gehen muss!
Der Quarztakt ist auch in Ordnung, sonst würde das Programm ja mit den in der Init gesetzten ja nicht richtig funktionieren.
Bin auf Eure Antworten gespannt,
Sven