-         

Ergebnis 1 bis 3 von 3

Thema: PROGRAMM funzt ned

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.09.2005
    Ort
    AUT
    Beiträge
    17

    PROGRAMM funzt ned

    Anzeige

    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    #include <avr/iom32.h>

    #define SYSCLK 3686400
    #define Preclk 3600
    #define LEDS_DDR DDRC
    #define LEDS_PORT PORTC
    int i=0;
    void delay_ms(unsigned int ms);
    signal (SIG_OUTPUT_COMPARE0 )
    {

    PORTC=~PORTC;
    delay_ms(10);

    }

    void delay_ms(unsigned int ms)
    {
    unsigned int zaehler;

    while (ms)
    {
    zaehler = SYSCLK / 3686.4;

    while (zaehler)
    {
    asm volatile ("nop");
    zaehler--;
    }
    ms--;
    }
    }
    int main(void)
    {

    //PortC wird als AUsgang definiert
    LEDS_DDR = 0xFF;

    //PortC wird auf o gesetzt
    //PORTC=0xFF;

    //Interrupts enablen
    sei();

    //Output compare match interrupt enable
    timer_enable_int (1<<OCIE0);

    //Output Compare Register setzen
    OCR0=0xF0;//240

    //Timer starten Vorteiler 1024
    TCCR0=(1<<WGM01)|(1<<CS00)|(1<<CS02);


    //Endloschleife
    for(;
    {
    /*if(TCNT0==0xEF)
    {

    if(PINC==0x10)
    {

    PORTC=0x08;
    delay_ms(100);
    }
    else
    {

    PORTC=0x10;
    delay_ms(100);}
    }
    */
    }



    }


    Bitte sagts mir waums ned geht

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo axors
    Bei Interruptfunktion ganz genau auf die Syntax achten
    Code:
    signal (SIG_OUTPUT_COMPARE0)
    ohne Spaces innerhalb der Klammer!

    Der Aufruf von delay_ms(10) in der Interrupt Funktion verheißt ebenfalls nichts gutes. Sowas geht nicht gut!

    Gruß Peter

    Edit:

    Dann fällt mir noch folgendes auf:
    Der Aufruf sei() zum freigeben der Interrupts darf erst nach der Initialisierung von Timer und Output Compare Registern erfolgen.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    30
    Beiträge
    674
    Du könntest uns auch mal verraten, was dein Programm machen soll und was nicht funktioniert.
    Welchen Sinn soll das delay_ms in der Interruptroutine haben? Wie m.a.r.v.i.n. schon sagte, ist das ziemlich unnötig und kann auch eine Fehlerquelle sein.
    Du könntest das nächste Mal auch die Code-Funktion für das posten von code verwenden. Das macht den code deutlich übersichtlicher.

Berechtigungen

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