mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bits im Timer-Register durch Präprozessor / Compiler ausrechnen lassen?


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne nicht alle AVR, aber es scheint eine Logik bei den 
Prescaler-Werten zu geben - auch wenn nicht alle Teilerschritte bei 
allen AVRs vorhanden sind.

Es wäre doch schön, wenn man einfach nur die Frequenz eines Interrupts 
angibt, und der Rest (Prescaler- und z.B. Compare-Register-Werte) vom PC 
berechnet würden.

Habt ihr Profis da nicht ein paar Ideen in der grauen Schublade?

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn sichs während der Ausführungszeit ändert, dann eine Funktion 
schreiben die das berechnet als Teil eines Timer-Moduls für den µC.

Wenn sichs nur beim Kompilieren ändern können soll dem entsprechenden 
Register den Wert eines Makros geben, das erst beim Kompilieren 
definiert wird (-D Flag). Da kann man sich dann ein Script / Programm 
schreiben, dass die Berechnung am PC übernimmt und dann beim Kompilieren 
richtig setzt. Geht mit Makefiles wunderbar. Da ist man dann allerdings 
wirklich faul.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:
> Es wäre doch schön, wenn man einfach nur die Frequenz eines Interrupts
> angibt, und der Rest (Prescaler- und z.B. Compare-Register-Werte) vom PC
> berechnet würden.

Hallo,

ich lasse grundsätzlich solche Sachen berechnen - das Folgende ist PIC, 
aber vielleicht kannst du ein paar prinzipielle Dinge draus entnehmen. 
Ich gebe nur den Schrittwinkel eines Schrittmotors (AStep) und die 
Quarzfrequenz (Fq) vor und lasse die ganzen Schritttabellen für 
verschiedene Drehzahlen berechnen:

;
;    set Values for Fq (quartz frequ)
;    Astep (step angle * 100)
;
Fq    equ    D'12000000'
Astep  equ    D'1125'      ;11.25
IntRes1  equ    Fq / D'205'
IntRes2  equ    IntRes1 * Astep
;  GFactor  =  Fq / 205 * Astep / 100
GFactor  equ    IntRes2 / D'100'
MinRpM  equ    GFactor / D'65000'
MaxRpM  equ    D'599'
;
;
;    Table macros
;
ltab  macro  RpM
    if RpM < MinRpM
     retlw  Low (GFactor / MinRpM)
    else
     retlw  Low (GFactor / RpM)
    endif
    endm
;
;
TLStart
    variable li
li = 0
    while li < D'200'    ;Table 0..199
     ltab  li
li += 1
    endw
    while li < D'400'    ;Table 200..399
     ltab  li
li += 1
    endw
    while li < D'600'    ;Table 400..599
     ltab  li
li += 1
    endw
;

Hier steht dann eine Tabelle für 0..599 U/min.

Gruss Reinhard

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, interessant, aber für meinen Fall braucht es nicht zur Laufzeit zu 
sein.
Der Knackpunkt ist wohl, die Bedeutung der Prescaler Bits 
herauszufinden.
Gibt's da schon irgend ein Config File oder so, wo sowas drinsteht?

Autor: 12er Dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wirf mal einen Blick in das AVR GCC Tutorial und schau dir dort die 
Baudratenberechnung im Kapitel UART an. Das dürfte in die Richtung 
gehen.

Tschü Dude

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:
> Hi, interessant, aber für meinen Fall braucht es nicht zur Laufzeit zu
> sein.

Ist es auch nicht. Es wird bloss eine Tabelle erstellt, die im Flash 
landet. Genauso kann man Konfigurationsbits berechnen. Die Befehle If 
und Grösser und Macros werden vom Präprozessor interpretiert.

Gruss Reinhard

Autor: Karsten M. (lsmod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun haben wir das Jahr 2013 und ich stehe vor dem gleichen Problem.

Ich kann irgendwie nicht glauben das es für das Timer-Problem noch keine 
Musterlösung gibt?
Das Beispiel für die UART-Berechnung ist "Standard" - bei den Timern 
muss noch immer jeder das Rad für sich selbst neu erfinden?

Autor: Karsten M. (lsmod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In einem neuen Thread wurde nun auch endlich eine Lösung für das Problem 
gefunden. :-)
Beitrag "Re: Bits im Timer-Register durch Präprozessor / Compiler ausrechnen"

: Bearbeitet durch User
Autor: spess53 (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hi

>In einem neuen Thread wurde nun auch endlich eine Lösung für das Problem
>gefunden. :-)

Vorsintflutliches Preload.

MfG Spess

Autor: Karsten M. (lsmod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann zeige doch Mal eine zeitgemäße Lösung auf. ;-)

Wahrscheinlich kommt aber nichts ausser diesem Spruch ...

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.