mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer in Bascom


Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey leute, habe folgende frage und leider grad keinerlei möglichkeit es 
selbst zu testen.

wenn ein timer (in diesem fall timero) überläuft, springt er dann 
automatisch wieder auf 0 zurück oder ist er dann blockiert und mag net 
mehr arbeiten?

ich frage deshalb, da aus der bascom-hilfe usw. hervorgehen täte, dass 
man kein rücksetzen auf 0 in einer subroutine bräuchte, dies wird jedoch 
bei vielen beispielcodes trotzdem durchgeführt. daher die frage
-> braucht man das überhaupt?

und nun ins bett... ;)

Autor: H.joachim Seifert (crazy_horse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
er läuft einfach weiter, wenn du nichts dagegen tust. Den Überlauf 
kannst du per Interrupt erkennen.
Es ist eigentlich ein Überlauf von 255 nach 256. Da das 9.Bit aber nicht 
mehr gezählt wird (8bit-Timer) ist das identisch mit Zählerstand 0.

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mir ist schon klar, dass ich den überlauf erkennen kann. ;o)
es ging mir darum ob ich das bei überlauf in interrupt und interrupt 
setzt timer wieder auf 0 überhaupt benötige?
mehr tut der interrupt bei mir dann nicht, außer den timer wieder auf 0 
zu setzen, er zählt keine variablen da mein programm drumherum den 
direkten wert des timers ausliest.

stichwort software-pwm. timer0 zählt mit einem prescaler immer bis 255 
hoch und das programm schaltet meine ausgänge je nach inhalt des 
timerregisters. somit brauche ich keine zusätzlichen variablen.

also nochmals zur verdeutlichung folgende ablaufkette, bitte sagt mir 
welche >notwendig< ist:

1. config timer0, start timer0, on timer0 timer0 = 0

2. config timer0, start timer0

also wenn das timerregister wert 255 erreicht hat, springt dann der 
timer wieder VOLLautomatisch auf 0 und zählt wieder aufwärts oder bleibt 
er bei 255 oder 0 dann vorerst stehen?

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

Bewertung
0 lesenswert
nicht lesenswert
Henning wrote:
> mir ist schon klar, dass ich den überlauf erkennen kann. ;o)
> es ging mir darum ob ich das bei überlauf in interrupt und interrupt
> setzt timer wieder auf 0 überhaupt benötige?

Welchen Teil des Satzes "Er zählt einfach weiter. Und da es in einem
8 Bit Timer kein 9. Bit gibt, gehts halt dann mit 0 weiter"
verstehst du nicht?

> mehr tut der interrupt bei mir dann nicht, außer den timer wieder auf 0
> zu setzen,

wozu hast du dann einen Interrupt installiert? Der Timer zählt
munter vor sich hin, und wenn er bei seiner höchsten Zahl angelangt
ist, gehts wieder bei 0 weiter.

Autor: roboterheld (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bascom hat seine eigenarten.
du musst schon mal zusehen, das man lesbaren asm-code bekommt um den mal 
zu lokalisieren.
die config-einstellung macht darüber keine aussage.

am besten nach winavr-c umsatteln, da siehste was der atmega macht.

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hatte das schonv verstanden nur irritierte mich der zweite teil 
seiner antwort. daraus las ich, dass er auf 0 springt und dort bleibt.

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Der Timer springt in die Interruptroutine sobald der Timer überläuft. 
Dabei wird dieser gleich wieder auf 0 gesetzt, das geht in Bascom quasi 
"von allein".
Mit "On Timer1 <Subproggie_hier>" sagst du Bascom wo es sich 
hinzubegeben hat wenn der Timer beim Überlauf schreit. :)

Roland

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der Timer springt in die Interruptroutine sobald der Timer überläuft.

Der Timer springt nirgendwo hin, es wird lediglich ein Interrupt 
ausgelöst.

>Dabei wird dieser gleich wieder auf 0 gesetzt, das geht in Bascom quasi
>"von allein".

Das hat mit Bascom überhaupt nichts zu tun, der Timer im µ läuft einfach
durch.

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jack,

daß der Timer durch den ausgelösten Overflow-Interrupt dafür sorgt daß 
das Programm in die ISR-Routine springt macht der natürlich nur wenn 
dies so mit dem Command "On TimerX <Sub> konfiguriert wird.
Das der Timer wieder auf 0 gesetzt wird meinte ich nicht Wörtlich, klar 
rennt der Timer durch, ich habe mich da vielleicht schlecht ausgedrückt, 
sorry.

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.