-         

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 48

Thema: Seltsames Problem

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356

    Seltsames Problem

    Anzeige

    Hallo, ich ein total komisches Problem:
    Wenn ich _delay_ms() aufrufe wartet es nicht nur ungenau, nein viel schlimmer, es wartet jedesmal anders.
    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    
    
    void long_delay(uint16_t ms) {
    
        for(; ms>0; ms--) _delay_us(1000);
    
    }
    
    
    int main(void)
    {
        DDRB=0xFF;
        // Insert code
        //init();
        //set_pin(PORTB,PIN1);
        while(1)
        {
            long_delay(100);
            clear_pin(PORTB,PIN0);
            long_delay(10000);
            set_pin(PORTB,PIN0);
        }
    
        return 0;
    }
    Wenn ich das baue und auf meinen Mega8@1MHz lade ist die an phase länger als die ausphase (obwohl es eigentlich umgekehrt sein sollte) und die Wartezeit mit nichten 100ms sondern deutlich über 1 Sekunde.
    Ich hab nicht die leiseste Ahnung woran das liegen könnte.
    Im simulator funktioniert das Programm einwandfrei.
    Ich werde es morgen auch noch auf einem anderen AVR Testen

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    29
    Beiträge
    1.221
    Wird irgendwo F_CPU gesetzt? (Bevorzugt über die Entwicklungsumgebung oder das Makefile, wenn es Quick & Dirty sein muss, auch über #define F_CPU 1000000UL als erste Zeile im Code)

    Davon abgesehen: Wie überprüfst du das Ausgangssignal? Mit einer LED? Ist die auch entsprechend verdrahtet (gegen GND)?

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    F_CPU wird von der IDE gesetzt, ich prüfe die Ausgabe mit einer LED, die gegen GND liegt.
    Der Takt kommt vom internen Oscillator und laut fuses auf 1MHz gesetz.
    Hab jetzt mal was neues Probiert:
    Code:
    int main(void)
    {
        DDRB=0xFF;
        // Insert code
        //init();
        //set_pin(PORTB,PIN1);
        while(1)
        {
            for(uint8_t i=0;i<10;i++) {
                _delay_ms(100);
                toogle_pin(PORTB,PIN1);
            }
            toogle_pin(PORTB,PIN0);
        }
    
        return 0;
    }
    Funktionierd prima, solange die funktion nicht das ende der while schleife erreicht.
    Auf Deutsch:
    Die Led an PB1 blinkt genau 5 mal und dann schaltet sich die grüne ein.
    Sobald die grüne leuchtet bleibt der controller stehen.
    Geändert von Thalhammer (08.10.2012 um 17:40 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    29
    Beiträge
    1.221
    Davon abgesehen, dass du mit einer Menge Funktionen um dich wirfst, die ich nie gesehen/gebraucht habe, folgender Code funktioniert in der Simulation ohne Probleme:
    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    
    int main(void)
    {
        DDRB=0xFF;
    
        while(1)
        {
            for(uint8_t i=0;i<10;i++) {
                _delay_ms(100);
                PORTB ^= (1 << PB1);
            }
            PORTB ^= (1 << PB0);
        }
    
        return 0;
    }
    Unterschiede: Keine komischen Funktionen zum setzen/umschalten von Pins, keine komischen Bezeichner für die einzelnen Pins.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    Bei mir ist nichts komisch, die Bezeichner werden vom GCC definiert und sind mit denen von PB0 etc identisch.
    Und die "unbekannten" Funktionen sind Compiler Makros, die genau das machen was du geschrieben hast.
    In der Simulation (SimulAVR) funktionierds bei mir auch ganz normal, aber auf dem Mega nicht.
    //EDIT:
    Hab grade den Code von dir gebaut und auf den AVR gebrannt, gleiches Phänomen.
    Die LED an PB1 blinkt bis die an PB0 angeht und dann ist schluss.
    Die an PB0 bleibt an und die an PB1 aus.
    Geändert von Thalhammer (08.10.2012 um 19:12 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Habe beide Programme mit dem AVR-Studio4 kompiliert, funktionieren beide.
    Das tooggle_pin und clear_pin kenne ich allerdings nicht, vielleicht liegt dort der Fehler?
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    habs grade editierd:
    Hier noch die Macros:
    Code:
    #define set_pin(port,pin) ((port) |= (1<<pin))
    #define clear_pin(port,pin) ((port) &= ~(1 <<pin))
    #define toogle_pin(port,pin) ((port) ^= (1<<pin))
    Der bleibt einfach stehen sobald er das ende der while schleife erreicht.

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Funktioniert auch mit deinen define.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    Hm dann probier ich mal nen anderen AVR, denn meiner bleibt einfach stehen.
    So hab grade nochmal einen neuen AVR genommen, gleiches Problem.
    Ist das möglicherweise ein Bug im avr-gcc oder der avr-libc ?
    Geändert von Thalhammer (08.10.2012 um 20:12 Uhr)

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    29
    Beiträge
    1.221
    Probleme mit der Spannungsversorgung? Eine LED funktioniert, die zweite bringt den AVR in einen instabilen Zustand. Aber dass der Fehler so reproduzierbar auftritt, macht mich stutzig ...

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

Seite 1 von 5 123 ... LetzteLetzte

Ähnliche Themen

  1. Seltsames Problem bei Array; Werte wandern
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 05.07.2012, 23:11
  2. Seltsames Problem nach dem Flashen...
    Von Nix_Blicker im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 17.09.2008, 01:08
  3. Sehr sehr seltsames Problem
    Von Powell im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 23.05.2008, 21:32
  4. Antworten: 0
    Letzter Beitrag: 15.02.2008, 13:14
  5. Seltsames Problem (Erledigt)
    Von sledge77 im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 13.12.2006, 00:19

Berechtigungen

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