Bascom - Taktfrequenz zum Weiterrechnen?

OP (Firma: Manfred) #2352245
Lesenswert?

Hi,

es ist schon spät - vielleicht bin ich auch nur deswegen am Holzweg und 
finde nix mehr..

Aber: in Bascom wird ja die Taktfrequenz festgelegt

$regfile = "m644def.dat"
$crystal = 8000000


Jetzt würde ich gerne im Programm in Abhängigkeit von der eingestellten 
Taktfrequenz den Timer stellen.
Wie kann ich auf die eingestellte Frequenz zugreifen?

z.B.
sekunde = 8000000 / 1024 /(256-ctimer2preload)
'aus dem Timerintervall Sekunde ableiten

Das funktioniert, aber wie kann ich statt 8000000 den Wert von $crystal 
dynamisch übernehmen?
so gehts jedenfalls (natürlich) nicht:
Const Csekunde = $crystal / 1024 /(256 -ctimer2preload)

Und gleich als nächstes: den Prescaler würd ich auch gleich 
weiterverwenden, muss ich da in Bascom wirklich auf die Registerebene 
lesen gehen oder gibts doch fertige Konstanten für diese 
Parametereinstellugnen.
Gast #2352259
Lesenswert?

die Angabe $crystal = 8000000 dient nur dem Compiler um Wartezyklen für 
Wait, Waitms usw. zu errechnen. Genau so werden die Wartezyklen für die 
serielle Übetragung beim Compilieren festgelegt.

Diese Werte sind dann fest im Code (.hex) eingetragen und werden auf den 
Atmega übertragen.

Bei einem Timer wird, ob mit oder ohne Prescale, immer der Takt als 
Ausgangstakt benutzt, der intern eingestellt ist (1MHz, 2MHz, .. 8MHz) 
oder der Takt, der durch eine externe Quelle, z.B. einen Quarz, 
vorgegeben ist.

joe
OP (Firma: Manfred) #2352330
Lesenswert?

mue-c schrieb:
> Die Frequenz steht für dich zugreifbar in der Konstanten _XTAL.
> Weitere Konstanten findest du unter "Show Result" (CTRL-W) im Abschnitt
> "Constant".

Super, vielen Dank - das wars -
jetzt ist es nämlich möglich, durch Ändern des Quarzes einfach den 
Parameter $crystal anzupassen ohne  sonst Programmänderungen durchführen 
zu müssen. Damit wird der Programmcode wieder ein Stück portabler,

Übrigens einen workaround hätte ich auch gefunden (vielleicht für andere 
Konstanten)

Const Cx = 8000000 'meine Frequenz
$crystal = Cx
const Cprescaler=cx/1000000 'weitere abgeleitete Konstante

Wundert mich, dass der Compiler versteht, er dürfte wirklich einfach 
alle Konstanten durch Zahlen tauschen

Jetzt geht sowohl _XTAL oder cx

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren