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


von Robin T. (rotoe) Benutzerseite


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?

von John S. (linux_80)


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

von Robin T. (rotoe) Benutzerseite


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.

von Karl H. (kbuchegg)


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.

von Karl H. (kbuchegg)


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.

von Robin T. (rotoe) Benutzerseite


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

von Robin T. (rotoe) Benutzerseite


Lesenswert?

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

von John S. (linux_80)


Lesenswert?

Aja, 'Phase Correct PWM Mode' schaut nach dem aus was Du suchst.

von Karl H. (kbuchegg)


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.

von Robin T. (rotoe) Benutzerseite


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 :(

von John S. (linux_80)


Lesenswert?

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

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Einen ATtiny2313

von John S. (linux_80)


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).

von Robin T. (rotoe) Benutzerseite


Lesenswert?

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

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Hast du das Problem nicht?
Liegts an der Version?

von John S. (linux_80)


Lesenswert?

Das Problem hab ich nicht, bei der 1.11.8.8

Zeig mal etwas von Deinem Programm.

von Robin T. (rotoe) Benutzerseite


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

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Hat keiner die Version 1.11.8.7?

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

von Paul Baumann (Gast)


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

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Bei mir bekomme ich den Quelltext nicht compilliert.

von Niels H. (monarch35)


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....

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Oh man...:(

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


Vielen Dank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.