Forum: Mikrocontroller und Digitale Elektronik Bascom - Taktfrequenz zum Weiterrechnen?


von Manfred S. (Firma: Manfred) (xfred343)


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.

von Joe (Gast)


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

von mue-c (Gast)


Lesenswert?

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

von Manfred S. (Firma: Manfred) (xfred343)


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

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.