Forum: Mikrocontroller und Digitale Elektronik bascom: Timer-Prescaler mit einer Variablen setzen?


von joco (Gast)


Lesenswert?

Moin,
ich beisse mir gerade die Zähne am Timer0 bei folgender Konstruktion
aus:
if bla = blub then
  prescaler_1 = 64
elseif bla = blub1 then
  prescaler_1 = 128
endif
.
.
.
Config Timer0 = Timer , Prescale = Prescaler_1
enable timer0

Nun gibt mir Bascom beim compiliren die Meldung, daß 'Prescale' einen
Wert von 1, 8, 64, 256 oder 1024 haben muß.
Habe ich da noch eine Chance, oder schieße ich mir damit selbst ins
Knie?
bittebittebitte.
:-) joco

: Gesperrt durch User
von Werner (Gast)


Lesenswert?

Hallo Joco,

via Bascon geht das nicht.
Aber Bascom macht nichts anderes als die entsprechenden Bits im
Timer-Control-Register zu setzten. Es hindert Dich niemand daran die
Bits selbst zu setzen, bzw. zu modifizieren.

Welche Bits in welchem Register das sind mußt Du aus der Doku Deines
Atmel raussuchen.

Ciao,
Werner

von Christoph Wagner (Gast)


Lesenswert?

Machen kannst du da nichts. Für den Timer sind 3 Bits im TCCR0 Register
zuständig :

0 0 0 - keine Timerquelle
0 0 1 - Clock / 1
0 1 0 - Clock / 8
0 1 1 - Clock / 64
1 0 0 - Clock / 256
1 0 1 - Clock / 1024
1 1 0 - Timerpin (im Datenblatt nachlesen)
1 1 1 - Timerpin (im Datenblatt nachlesen)

Wie du siehst kannst du den Prescaler nur mit einen dieser Werte
betreiben.

von Andi (Gast)


Lesenswert?

Du kannst nur, und das überall, den Counter für den Timer0 (0 - 255) neu
setzen.
Such Dir für beide Varianten einen geeigneten Prescaler aus, z. B.
256.
Für blub nimmst Du dann einen Counter von 100 und für blub1 200, dann
ist blub1 halb so schnell wie blub :-)

MfG
Andi

von joco (Gast)


Lesenswert?

Moin,
vielen Dank erst einmal. Wenn ich das jetzt richtig verstanden habe,
nagel ich den Prescaler beim ersten 'Config Timer' für den Rest des
Programms fest und kann nur noch mit dem Counter spielen. Wenn das so
ist, ist das die Erklärung für das merkwürdige Verhalten von Timer0 bei
mir und ich habe mir tatsächlich ins Knie geschossen :-)
;.) joco

von peter dannegger (Gast)


Lesenswert?

"Wenn ich das jetzt richtig verstanden habe,
nagel ich den Prescaler beim ersten 'Config Timer' für den Rest des
Programms fest und kann nur noch mit dem Counter spielen."


Wenn das so ist, dann ist das aber nur eine Beschränkung des Bascom.

Der AVR kann zu jeder Zeit umgestellt werden.
Lies Dir einfach mal das Datenblatt dazu durch und dann mache es
selber, z.B. für Prescaler = 8:

TCCR0 = 2


Peter

von Andi (Gast)


Lesenswert?

@joco: Du wolltest Anfangs den Prescaler auf 128 setzen was aber nicht
geht, da es keinen Prescaler 128 gibt.
Alle anderen, 1, 2, 64, 256 und 1024 kann man jederzeit switchen wenn
BASCOM dabei mitspielt.

MfG
Andi

von HansHans (Gast)


Lesenswert?

@Alle anderen, 1, 2, 64, 256 und 1024 kann man jederzeit switchen wenn
BASCOM dabei mitspielt

Bascom erlaubt dir den zugriff auf alle
AVR Register, somit ist auch das umschalten jederzeit möglich .

Das aber 128 nicht geht ist ja schon gesagt worden und somit
auch kein Problem von bascom.

auch Bascom-programmierer brauchen das Datenblatt.....

von bimbo385 (Gast)


Lesenswert?

Ich muss für einen Frequenzzähler den Prescaler des Timer1 im Programm 
mehrfach ändern.

Mit welchen Befehlen in Bascom setze ich die Bits im TCCR0 Register???

Kann ich wie peter geschreiben hat einfach TCCR1 = X schreiben (in 
Bascom)???

Wenn ja sind die anderen 5 Bits in dem Register auch für was gut oder 
sind die egal????

Mfg Bimbo385

von Justus S. (jussa)


Lesenswert?

bimbo385 schrieb:

> Wenn ja sind die anderen 5 Bits in dem Register auch für was gut oder
> sind die egal????

Dafür gibt es das Datenblatt...

von Karl H. (kbuchegg)


Lesenswert?

Und Leichenfledderer sind auch nicht gern gesehen.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.