mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BASCOM Timer rückwärts zählen lassen


Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

habe jetzt mit Prorgammieren in BASCOM angefangen und ist auch total 
easy und macht Spass. Aber ich habe eine Frgane:

Wie kann ich z.B. Timer1 rückwärsts zählen lassen, sobald es 256 
erreicht hat?

Also er soll nicht 0,1,2,3,4,5,6,....256,0,1,2,3 machen,
sondern 0,1,2,3,4,5,6,.....256,254,253,252,251,250,.....


Kann mir jemand helfen?

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der Timer zählt nur in eine Richtung, das hat nix mit Bascom zu tun.

Eine Alternative wäre, das Du das irgendwie per Software löst.
Hängt davon ab was Du zählen willst.


mfG

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja. Das wollte ich ja auch immer machen. Den Timer rückwärtszählen 
lassen. Softwaremäßig. Der soll bis 256 und wieder zurück.

Also der soll nix Zählen in dem Sinne. Der soll als timer nicht als 
counter fungieren.

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

Bewertung
0 lesenswert
nicht lesenswert
Robin Tönniges wrote:
>
> Also er soll nicht 0,1,2,3,4,5,6,....256,0,1,2,3 machen,
> sondern 0,1,2,3,4,5,6,.....256,254,253,252,251,250,.....

Es gibt PWM Modi, in denen der Timer genau so zählt.
Einfach mal das Datenblatt deines Prozessors downloaden
und im Abschnitt Timer nachlesen.

Nachtrag: Auch wenn dir BASCOM vieles abnimmt und eine Menge
fertiger Komponenten bereitstellt, ist das Studium des Daten-
blatts immer noch notwendig um rauszufinden was denn die
Hardware alles kann.

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

Bewertung
0 lesenswert
nicht lesenswert
Robin Tönniges wrote:

> Also der soll nix Zählen in dem Sinne. Der soll als timer nicht als
> counter fungieren.

Für einen Timer (*) ist es aber völlig nebensächlich wie der
Timer konkret zählt. Für einen Timer ist die wesentliche
Eigenschaft, dass er eine bestimmte Anzahl an Zählvorgängen
durchführt und bei einem bestimmten Zählerstand ein Ereignis
auslösen kann. Mehr muss ein Timer nicht tun.


Edit:
(*) Timer ist hier im Sinne von 'Schaltung die eine bestimmte
Zeit abzählt' gemeint und nicht als Oberbegriff für die Hardware-
einheit im AVR gemeint. Dieser Timer kann ja als Timer, Counter
oder PWM-Einheit konfiguriert werden.

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das Datenblatt ständig im Auge. Sonst wüsste ich nichtmal wo 
z.B PWM rauskommt. Aber das steht (wenn es da steht) nur in assembler

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Außerdem habe ich das Problem wenn ich sage: "Enable Timer1"
Sagt er: "Error 85  Unknow Interrupt Source (Timer1)

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aja, 'Phase Correct PWM Mode' schaut nach dem aus was Du suchst.

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

Bewertung
0 lesenswert
nicht lesenswert
Robin Tönniges wrote:
> Ich habe das Datenblatt ständig im Auge. Sonst wüsste ich nichtmal wo
> z.B PWM rauskommt. Aber das steht (wenn es da steht) nur in assembler

Das steht da mehr oder weniger gross drinnen. Sieh dir mal die
PWM Modi an. Da sind auch ein paar Grafiken im Datenblatt aus denen
hervorgeht wie der Timer zählt. Wenn du die Nicht-Fast-Modi mal
genauer studierst, kommst du drauf, dass die den Timer genau nach
diesem Muster benutzen.

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da muss ich mich erstmal durchfressen.

Hat jemand inzwischen eine Antwort auf die Frage vorhin?

>Außerdem habe ich das Problem wenn ich sage: "Enable Timer1"
>Sagt er: "Error 85  Unknow Interrupt Source (Timer1)

Habe in VIELEN Codebeispielen diesen Befehl gesehen. Aber er 
funktioniert überhaupt nicht :(

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen AVR verwendest Du ?
Dann findet sich evtl. heraus, was sich mit dem Bascom-Fehler usw. auf 
sich hat !

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen ATtiny2313

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, Welche Bascom-Version,
und um sicher zu gehen, hast du den Tiny2313 im Programm angegeben.
Wird gerne mit dem 90S2313 verwechselt (dieser kann aber auch den Timer1 
IRQ).

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Ich habe Version 1.11.8.7
2. Nein habe ich nicht verwechselt :)

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du das Problem nicht?
Liegts an der Version?

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem hab ich nicht, bei der 1.11.8.8

Zeig mal etwas von Deinem Programm.

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$Regfile = "attiny2313.dat" '
$Crystal = 8000000

DDRD.4 = 0            'Pin PD4/T0 auf Eingang setzen
PORTD.4 = 1           'PullUp von PD4/T0 aktivieren
DDRB.0 = 1            'Pin PB0 auf Ausgang setzen

On TIMER0 OnTimer0       'Interrupt-Routine für Timer0-Overflow
Config TIMER0 = COUNTER, EDGE = FALLING
Enable TIMER0            'Timer0-Overflow-Interrupt einschalten
Enable Interrupts        'Interrupts global zulassen
'---------------------------------------------------------
TIMER0 = 246     'Counter initial voreinstellen
Do               'Hauptschleife
Loop
'---------------------------------------------------------
OnTimer0:                  'Interrupt-Routine
  TIMER0 = 246 'Counter (wieder) voreinstellen
  PORTB.0 = Not PORTB.0   'LED ein bzw. aus
Return

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner die Version 1.11.8.7?

Ich glaube nämlich dass das ein ziemlich blöder Bug ist.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Timer 0 läuft bei Dir so, daß er zunächst mit 246 geladen wird und 
dann bei jedem Interupt an PD4 um 1 erhöht wird bis 255. Nach 255 wird 
er dann wieder auf 246 gesetzt und es geht von vorne los. Das habe ich 
eben mit der Version
1.11.8.7 getestet.

MfG Paul

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir bekomme ich den Quelltext nicht compilliert.

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robin Tönniges wrote:

> Also der soll nix Zählen in dem Sinne. Der soll als timer nicht als
> counter fungieren.

Und warum dann so kompliziert....?!?

Wert= 255 - Timer1

und schon haben wir einen Rückwärtszähler....

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh man...:(

Wieso bin ich da nicht drauf gekommen.
Die Welt kann so einfach sein.


Vielen Dank

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.