Forum: Mikrocontroller und Digitale Elektronik Prescaler Value


von Sebastian Pringal (Gast)


Lesenswert?

Hallo,

ich möchte für den Timer1 (Controller stm8s103f3, 16MHz,in c) einen 
Prescaler wählen. Ich hab aber 2 Register :
-> Prescaler high(TIM1_PSCRH)
-> Prescaler low(TIM1_PSCRL)

fCK_PSC / (PSCR[15:0]+1).

wenn ich zum Beispiel den Prescaler 1024 wählen möchte, wie teile ich 
das in den beiden Bytes?

würde mich sehr freuen wenn ich Hilfe bekomme.

Danke

von Karl H. (kbuchegg)


Lesenswert?

Sebastian Pringal schrieb:
> Hallo,
>
> ich möchte für den Timer1 (Controller stm8s103f3, 16MHz,in c) einen
> Prescaler wählen. Ich hab aber 2 Register :
> -> Prescaler high(TIM1_PSCRH)
> -> Prescaler low(TIM1_PSCRL)
>
> fCK_PSC / (PSCR[15:0]+1).
>
> wenn ich zum Beispiel den Prescaler 1024 wählen möchte, wie teile ich
> das in den beiden Bytes?

Dem Prinzip nach:
Stell es dir als 16 Bit Zahl binär dar

   0000010000000000

jetzt teilst du das bei 8 Bit

  00000100  00000000

und hast damit die beiden Bytes für das High und das Low Register

High wäre also 0x04 (dezimal 4)
und Low wäre 0


In der Praxis entspricht dieser Aufteilung ganz einfach einer Division 
durch 256
  1024 / 256  -> 4
  1024 % 256  -> 0

(256 deshalb, weil man mit 8 Bit 256 verschiedene Zahlen darstellen 
kann)

Dazu equivalent ist
Für das Highbyte: einfach die 16 Bits um 8 Bits nach rechts verschieben.
Für dasLowbyte: einfach alle Bits über den 8 Bits auf 0 setzen

  High = Wert >> 8;
  Low  = Wert & 0xFF;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.