-
        
+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Counter im 2313 funzt nicht?

  1. #1
    Gast

    Counter im 2313 funzt nicht?

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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    32
    Beiträge
    614
    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
    it works best if you plug it (aus leidvoller Erfahrung)

  3. #3
    Gast
    outp ((1<<CS00), TCCR0)
    Hierfür kann ich dann auch outp TCCR0=1 schreiben?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    32
    Beiträge
    614
    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.
    it works best if you plug it (aus leidvoller Erfahrung)

+ Antworten

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •