-         

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 35

Thema: Zeit mit DCF-Modul auslesen (brauche noch Hilfe!!!!!!!!!!!!)

  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656

    Zeit mit DCF-Modul auslesen (brauche noch Hilfe!!!!!!!!!!!!)

    Anzeige

    Hallo,

    ich habe einen Code geschrieben, der die Zeit mit einem DCF-Modul auslesen soll. Dieses Modul kommt in einer Alarmanlage zum Einsatz. Die Alarmanlage funktioniert aber nicht wirklich so, wie sie soll. Ich vermute, dass sie irgendwo beim auslesen der Zeit hängen bleibt. Jetzt wollte ich euch mal fragen, ob ihr in meinem Code noch irgendwelche Fehler findet.

    Danke
    _R2D2
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    ... wollte ich euch mal fragen, ob ihr in meinem Code noch irgendwelche Fehler findet.
    Wo ist denn DEIN Code?

    Gruß Dirk

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    @Dirk
    dcf77.h - als Anhang zum download

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    es fehlt die int main().


    Im Ernst, Fehlerbeschreibung, Controllertype, minimales compilierfähiges Programm fehlen.
    Ich vermute, dass sie irgendwo beim auslesen der Zeit hängen bleibt.
    Worauf stützt sich deine Vermutung.
    Wonach soll ich suchen? Weiß der Fuchs, was du noch alles mit der Variable wert anstellst, nur mal als Beispiel.
    Ich möchte dir gerne bei deinem Problem helfen, kann es so aber nicht.

    Gruß

    Jens

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Der Fehler wurde von SprinterSB doch schon längst benannt, wenn auch etwas ungewöhnlich und knapp.

    Die Funktion GetTime bleibt hier hängen:
    while(!fertig)
    {}
    weil fertig nicht als volatile deklariert ist.

    Nach der Korrektur dieses Fehlers wird GetTime aber vermutlich immer noch nicht richtig funktionieren, weil auch Fehler volatile sein muss.
    (Und vielleicht noch weitere Variablen, denn so genau habe ich es mir nicht angesehen)

    Davon abgesehen springt mir noch eine andere Sache ins Auge:
    TIFR |= (0 << ICF1) | (0 << TOV1);
    TIMSK |= (0 << TICIE1) | (0 << TOIE1);
    Diese beiden Zeilen sind NOPs, die tun rein gar nichts, schon gar nicht halten sie den Timer an.

    Und auch in den Blöcken dieser Form:
    Zeit.Stunde =
    ZeitBits[28]*1+
    ZeitBits[29]*2+
    ZeitBits[30]*4+
    ZeitBits[31]*8+
    ZeitBits[32]*10+
    ZeitBits[33]*20;
    steckt ein kapitaler Denkfehler.
    MfG
    Stefan

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    ein fehlendes volatile ist sicher ein Fehler. Führt aber nicht zwingend sondern nur möglich zu einer Fehlfunktion. Die weiteren, von dir aufgeführten Sachen, habe ich mir schon nicht mehr angeschaut. Mein erster Verdacht liegt in den großen Variablentypen und der Verwendung in der ISR bei leichtfertigem Zugriff außerhalb dieser.

    Ist aber alles Spekulation.

    Gruß

    Jens

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Stimmt, nicht zwingend, aber beim GCC mit eingeschalteter Optimierung liegt die Wahrscheinlichkeit, dass "while(!fertig) {}" zu einer Endlosschleife wird, sehr nahe an 100 %.
    MfG
    Stefan

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Davon abgesehen springt mir noch eine andere Sache ins Auge:
    TIFR |= (0 << ICF1) | (0 << TOV1);
    TIMSK |= (0 << TICIE1) | (0 << TOIE1);
    Diese beiden Zeilen sind NOPs, die tun rein gar nichts, schon gar nicht halten sie den Timer an.
    Stimmt, man kann ja mit OR keine 1 löschen.
    Code:
    TIMSK ^= (1 << TICIE1);
    TIMSK ^= (1 << TOIE1);
    So müsste sich der Timer doch beenden lassen.

    Und auch in den Blöcken dieser Form:
    Zeit.Stunde =
    ZeitBits[28]*1+
    ZeitBits[29]*2+
    ZeitBits[30]*4+
    ZeitBits[31]*8+
    ZeitBits[32]*10+
    ZeitBits[33]*20;
    steckt ein kapitaler Denkfehler.
    Was stimmt den daran nicht? Ich habe mir es so gedacht:
    Wenn das Bit an der entsprechenden Position 1 ist, so wird das Produkt 1*X zu Zeit.Stunde addiert.

    Danke für eure Hilfe
    mfg _R2D2

  10. #10
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    So müsste sich der Timer doch beenden lassen.
    Ja, wenn beide Bits ganz sicher vorher 1 sind. Sicherer wäre ein auf Null setzen, das nicht vom aktuellen Zustand abhängt:
    TIMSK &= ~((1<<TICIE1) | (1<<TOIE1));

    Wenn das Bit an der entsprechenden Position 1 ist, so wird das Produkt 1*X zu Zeit.Stunde addiert.
    Und welche Wertigkeiten (X) haben die Bits an Position 4 und 5? (Tipp: 10 und 20 sind es jedenfalls nicht)
    MfG
    Stefan

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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