PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Counter im 2313 funzt nicht?



15.07.2004, 11:19
Hallo,
ich bin Anfänger und habe einen AT90S2313, der soweit funktioniert(LED,Taster). Jetzt wollte ich den Timer/Counter benutzen, jedoch funzt das nicht. In den TCNT0 Register müsste doch eigentlich bis 255 hochgezählt werden oder?
Da habe ich mir gedacht ich frage die Zahl ab und speichere in Var i.
Lass ihn bis 100 zählen und dann soll er die Diode ausmachen. Nur bleibt die Diode ewig an. Was mach ich falsch?
Mein Code:

#include <io.h>

typedef unsigned char BYTE;

BYTE i;
int main(void)
{
outp (0x1f,DDRB); // Port B als Ausgang

outp ((1<<CS00), TCCR0);//counter auf cpu-takt einstellen

for(;;)
{
i = inp(TCNT0);
if (i>100)
sbi(PORTB,2);
if(i<100)
cbi (PORTB, 2);
}
}

( Codetag eingefügt, Kjion )

Gottfreak
15.07.2004, 13:34
Dein Code sieht soweit OK aus(die Forschleife wird 'ne Endlosschleife sein, der Smilie ist Absicht?).
Allerdings solltest du auch kein Blinken erkennen können, da die LED mit einer Frequenz von CPU-Takt/255 blinkt(also im kHz-Bereich). Sie könnte höchstens etwas gedämmt erscheinen.
Mit dem 16-Bit-Timer(timer1) und einem Prescaler kriegst du eher sichbare Ergebnisse.
PS: statt i=inp(TCNT0) kannst du im aktuellen AVR-GCC(der Code ist doch dafür, oder?) auch einfach i=TCNT0 schreiben.
Genauso einfach DDRB=0x1f

22.07.2004, 19:01
outp ((1<<CS00), TCCR0)
Hierfür kann ich dann auch outp TCCR0=1 schreiben?

Gottfreak
22.07.2004, 19:36
outp ((1<<CS00), TCCR0)
Hierfür kann ich dann auch outp TCCR0=1 schreiben?

Nein. Du könntest
TCCR0=1<<CS00
schreiben(nicht das Bitschieben mir << sondern das Makro outp ist ersetzt.).
Aus der "deprecated List" der Compiler-Doku:


Global outp(val, sfr)
For backwards compatibility only. This macro will eventually be removed.

Global inp(sfr)
For backwards compatibility only. This macro will eventually be removed.