mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage für 8 Bit Timer


Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe eine kleine Frage es geht um ein 8 bit Timer. Nach meiner 
Berechnung, stelle ich fest, dass ich nicht mit einem Clock-Frequenz von 
5MHz, ein Timer, das jedes 1 Sekunde eine Aktion durchführe.
Berechnung: gewälte Prescaler 1024:
5MHz/1024=4882.81
gewünschte Zeit:t= 1s
OCR0A=t*4883.81 =4884 aber das Register ist 8 bit groß.

Ich vermute, dass ich irgendwo einen Fehler mache. Kann jemanden mir 
helfen?

Autor: Juan Carlos (juan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Morgen,

du braust noch einen Counter für Timer, um das zu zählen, wieviele Mals 
der Timer voll ist.
Also 256 / 4883 = 0,052 d.h. alle 0,052 Sek. sollte der Timer voll sein, 
20 mal ist 1 Sek.


Gruß
Juan

Autor: QuizMaster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast noch ein 2tes Register!
Der Prescaler verringert NUR die Frequenz! MEHR NICHT
Einheit weiterhin [Hz].

Hier:
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

oder die Forensuche, da gibts etliche Beispiele!

Gruß

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Juan Carlos (juan)

>Also 256 / 4883 = 0,052 d.h. alle 0,052 Sek.

Besser so rechnen

4883/256 = 19,07421875, also rund 19. Wenns genau sein soll, siehe

AVR - Die genaue Sekunde / RTC

MFG
Falk

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
vielleicht verrätst du erstmal welcher Timer und uC das ist.
Weil wenn CTC Modus möglich ist wird das genau, ansonsten eher nit glaub 
ich.

Gruss

Autor: Juan Carlos (juan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:
> @Juan Carlos (juan)
>
>>Also 256 / 4883 = 0,052 d.h. alle 0,052 Sek.
>
> Besser so rechnen
>
> 4883/256 = 19,07421875, also rund 19. Wenns genau sein soll, siehe
>
> AVR - Die genaue Sekunde / RTC
>
> MFG
> Falk

Vielen Dank, hab schon noch etwas gelernt!

Gruß
Juan

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
wenn ich gut verstanden habe, soll ich in dem TCNT0-Register der Wert 20 
schreiben. Falls ich jede 1 Sekunde zählen möchte.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@gast (Gast)

>wenn ich gut verstanden habe, soll ich in dem TCNT0-Register der Wert 20
>schreiben. Falls ich jede 1 Sekunde zählen möchte.

Das hast du falsch verstanden. Du musst 19 Überläufe (Overflow) vom 
Timer 0 zählen, dann ist ~1s vergangen.

Siehe auch AVR-Tutorial: Timer

MFG
Falk

Autor: Juan Carlos (juan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gast wrote:
> Hallo Zusammen,
> wenn ich gut verstanden habe, soll ich in dem TCNT0-Register der Wert 20
> schreiben. Falls ich jede 1 Sekunde zählen möchte.

Hi,
nur einfach eine Variable z.B. int counter einsetzen. In der 
Interrupt-Routine schreibst du counter++ bis counter = 19 ist 1 s 
vorbei.

Gruß

Autor: QuizMaster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn nen Timer, wie oben schon gefragt wurde einen
CTC Modus besitzt, kann man sich den softwarezähler sparen, das kann der
Timer auch, und Zeiteffektiver.

Dazu im datenblatt unter den Timermodi CTC nachlesen.
Als Beispiel hier fuer einen Atmega 128:
TCCR0 = (1<<CS00) |(1<<CS02) | (1<<WGM01); //prescaler 128, CTC-mode

TIMSK  |= (1<<OCIE0);  //Enable Timer/Counter0 Compare Match interrupt.
ASSR= 0x00; //intern clock (!= from TOSC), synchronous clock
OCR0= 124; //timetick = 10ms: (1/(F_CPU/128) x 249 = 1ms)

Gruß

Autor: QuizMaster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
edit:
F_CPU = 16MHz

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@ QuizMaster:  Und? Er will 1s, nicht 10ms. Und das geht mit einem 
8Bit-Timer und 5MHz nun mal nicht in einem Rutsch.

Ich persönlich würde zwar auch CTC benutzen, mit OCR= F3H/243D. Ergibt 
49,971ms. und dann bis 20 zählen.

MfG Spess

Autor: QuizMaster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups...
das m von ms wurde mal schnell dazugelesen,...

Ein 16Bit timer koennte das, vorrausgesetzt der Contzroller hat sowas...

Sonst doch nen Softwaretimer,...
sorry, Besserung in Aussicht ;-)

Gruß

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.