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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.