BASCOM Timer rückwärts zählen lassen

OP Persönliche Seite #704386
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?
#704408
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.
#704409
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.
#704415
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.
OP Persönliche Seite #704437
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
Gast #704753
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren