www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega328p - Problem mit Prescaler von Timer 1 und 2


Autor: Marcus Wagner (fallenangel3k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

ich habe ein problem mit dem timern 1 und 2 in einem programm von mir. 
ich betreibe damit einen motorsteller mit 500 Hz, was auch sehr gut 
funktioniert, solange ich bei 8Mhz taktfrequenz für den AVR bleibe 
(egal, ob intern oder ext. kristall). Aber ich will das programm mit 16 
oder gar 20Mhz betreiben!

das eigentliche problem ist, dass ich bei 8Mhz einen prescaler von 64 
verwende, um auf meine 500Hz zu kommen:
=> 8000000/64/250 = 500

Aber bei 16Mhz gibt es keinen prescaler von 128 bei einem timer!

Kann ich also einfach folgendes machen:
=> 16000000/64/500 = 500     !??

Oder welche möglichkeiten habe ich noch?



Liebe Grüße,

Marcus

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kann ich also einfach folgendes machen:
> => 16000000/64/500 = 500     !??

Ja, sicher, bei einem 16-Bit-Timer (Timer 1).  Und beim 2er hast Du -- 
soweit ich sehe -- die bei Timer1 fehlernde Prescaler-Stufe, die für 16 
MHz passt.

Autor: Marcus Wagner (fallenangel3k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

danke, für die schnelle antwort!!!

das nächste problem ist, dass ich nicht timer1 und timer2 verwenden 
will, sondern timer0 und timer2, da der 16bit timer schon für eine 
andere funktion vorgesehen ist!

wie kann ich beim 8bit timer mein ergebnis durch 500 teilen, da dies ja 
größer als der maximale wert von 255 ist!?

also timer0 --> 16000000/64/500 = 500

mit 8 bit geht das nicht, oder doch!?


LG,

Marcus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke es wird Zeit, dass du mal etwas Code zeigst.

Was machst du eigentlich mit den 500? Inwiefern gehen die Limitierungen 
der Timer in dein Gesamtkonzept ein? In welcher Form setzt du die Timer 
ein?

Es gibt meistens immer einen Timer-Modus, bei dem sich durch Kombination 
von Top-Wert und Prescaler eine gewünschte Frequenz von (ja was 
eigentlich: ISR Aufrufe, Output Toggeln, ...) ergibt.

Autor: Marcus Wagner (fallenangel3k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay, hast mich erwischt.... es geht nicht um meinen persönlichen code, 
sondern um ein generelles problem eines recht bekannten quadro-copter 
projektes, bei dem ich gehofft habe, auf diese weise dem erfinder etwas 
unter die arme greifen zu können... aber er meint, er habe sich damit 
schon eingehend beschäftigt und sieht keine andere möglichkeit, ausser 
bei 8Mhz zu bleiben...
Ich denke zwar, daß alles möglich ist, wenn man nur weiß, wie man es 
anstellen (coden) muss, aber da es nicht mein code ist, kann ich leider 
auch nicht näher drauf eingehen, ausser den namen vom projekt zu sagen 
und zu sagen, dass man die firmware für den controller frei 
herunterladen kann, inkl. quellcode... aber eben nicht weitergeben 
darf.. will ja schließlich seine rechte bewahren..

http://www.qc-copter.de/wiki/index.php?title=Hauptseite

dann einfach unter download..

die diskussion in unserem forum bzgl der 8 od. 16Mhz ist hier:
http://www.qc-copter.de/forum/viewtopic.php?f=19&t...

Das PPM signal für die speziellen brushless-regler kommt mit 500Hz 
daher, das ganze für 4 Motoren, unabhängig... es geht im prinzip um die 
umsetzung der werte von beschleunigungssensoren und gyroskopen, die 
zusammen mit einem PID wert dann im uC das nötige PPM signal ergeben.

bin leider ein neuling, was AVR's betrifft, habe bisher nur mit PIC's 
gearbeitet.. sonst hätte ich das problem selber in die hand genommen, so 
muss ich erstmal selber den code lernen und verstehen, wenn es wirklich 
so komplex ist, wie er sagt, bevor ich genauer drauf eingehen kann, was 
das problem ist, ohne den code hier "veröffentlichen" zu müssen.. vllt. 
kann ihn sich einfach jmd. mal runterladen und sagen, wo das problem 
ist... (z.zt. gibt es öffentlich nur eine leicht veraltete version, die 
mit dem internen oszillator arbeitet, aber der code ist im prinzip 
gleich, in der neuen version wird einfach ein externer quarz benutzt... 
jedoch wünschen wir uns damit dann auch auf mindest 16Mhz aufsteigen zu 
können, anstatt "nur" zumindest quarzstabiele 8Mhz zu haben, im 
vergleich zu der alten version..)

ich hoffe, das erklärt einiges/alles...



LG,

Marcus

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.