- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Watchdog-Timer Mega88

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    E-Bike
    Morgen ! Neuer Tag, neues Spiel, neues Glück !
    Ich wollt mir der Watchdog genauer anschauen und stelle fest, ich find kein anständiges Datasheet, nur Preliminary.
    Beim Mega32 gibts das WDTCSR überhaupt nicht.
    Kannst du mir das komplette DS schicken oder posten ?
    Mir ist nicht ganz klar, was der WD-Interrupt zu bedeuten hat
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    Hab auch nur das hier --> http://www.atmel.com/dyn/resources/p...ts/doc2545.pdf
    zum Mega88

    Das mit dem Interrupt ist so, man kann den WD noch kurz vorm Reset ne ISR ausführen lassen um z.b. noch wichtige Parameter ins EEPROM zu speichern bevor der eigentliche Reset dann ausgeführt wird... (is dann quasi Interrupt Modus)

    Will den WD aber im System Reset Modus betreiben, also nur Reset und sonst nüx...

  3. #13
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Das DS ist vieles besser ziemlich komplett

    Ein Unterschied zu deinem Code:
    Zitat Zitat von SCHAMP
    /* Set new prescaler(time-out) value (siehe Datenblatt) */
    WDTCSR |= (1<<WDE) | (1<<WDP3); // Timeout auf 4.0 Sekunden setzen
    Zitat Zitat von Datashit
    /* Set new prescaler(time-out) value (siehe Datenblatt) */
    WDTCSR = (1<<WDE) | (1<<WDP3); // Timeout auf 4.0 Sekunden setzen
    Also KEIN "oder"

    nu?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    *DOOHHH*
    Ich krieg mich nimma, voll übersehen... sry!!!

    WD macht keine Reset mehr!! Wenn jetzt Terminal nicht mehr so n Mist senden würd.... das H schreibt er, die anderen Zeichen passn von der Anzahl her stimmen aber von der Darstellung net.
    Wenn ich versuch das hier reinzukopieren isses aufeinmal doch:
    Hello, World

    Verstehst was ich mein ??

  5. #15
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Wenn Großbuchstaben gehen, Kleinbuchstaben aber kryptisch werden, ist das Terminalprogramm normalerweise ins Schleudern geraten. (durch bin. Steuerzeichen)
    Stoppen, neu Starten.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    Stimmt
    Jetzt gehts einwandfrei, nachdem ich Terminalprogramm geschlossen und wieder gestartet hab =D>
    Thx für die Hilfe, und wieder was dazugelernt !!!

    Probier jetzt ma bischen absichtliche Delays aus mit dem WD

    Gruß
    schamp

    EDIT:
    Hier nochmal die fehlerfreie Source, falls es jemanden interessiert

    Code:
    #include <iom88.h>
    #include <ina90.h>
    #include <string.h>
    #include "sw_uart.h"
    
    
    void watchdog_init(void);
    void sende_routine(void);
    void health_check(void);
    
    static char bTxt[24] = "\r\nHello, World\r\n";
    
    unsigned char Flag;
    #define SENDEROUTINE_M_OK   1
    
    __task void main(void)
    {
      watchdog_init();
    
      while(1)
      {
        sende_routine();
    
        health_check();     // Am Ende der Hauptschleife prüfen, ob  sende_routine() ordnungsgemäß ausgeführt
      }
    }
    
    
    void watchdog_init(void)
    {
      __disable_interrupt();
    
      MCUSR = 0;  // Alle vorher gesetzten Flags clearen
      Flag = 0;
    
      sw_uart_init();
    
      WDTCSR |= (1<<WDIF);  // Clear WD Interrupt Flag
    
      __watchdog_reset();
    
      /* Setup Watchdog, bzw. Start timed sequence (wie im Datenblatt) */
      WDTCSR |= (1<<WDCE) | (1<<WDE);   // Watchdog Change Enable setzen
    
    
      /* Set new prescaler(time-out) value (siehe Datenblatt) */
      WDTCSR = (1<<WDE) | (1<<WDP3);   // Timeout auf 4.0 Sekunden setzen
    
      __enable_interrupt();
    }
    
    
    void sende_routine(void)
    {
      unsigned char bIx;
      unsigned char bLn;
    
      bLn = strlen(bTxt);
    
      for (bIx = 0;bIx < bLn; bIx++)
      {
        send_one_byte(bTxt[bIx]);
    
        // hier später delay um System Reset zu simulieren....
      }
    
      Flag |= (1<<SENDEROUTINE_M_OK);   // Routine korrekt ausgeführt
    }
    
    
    
    void health_check(void)
    {
      if(Flag & (1<<SENDEROUTINE_M_OK)) // alles ok ?
      {
        Flag &=~ (1<<SENDEROUTINE_M_OK);
    
        __watchdog_reset();   // dann Reset Watchdog
      }
    }

  7. #17
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Na super !

    Also, bis dann
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    noch was ganz kurzes.. und zwar:
    könnte ich auch
    if(Flag & SENDEROUTINE_M_OK)

    anstatt

    if(Flag & (1<<SENDEROUTINE_M_OK))

    ??

  9. #19
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Nein, geht nicht
    Da ist das eine Bit-Maske (_M_)
    if(Flag & SENDEROUTINE_M_OK)
    Da ist das eine Bit-Nummer (_V_)
    if(Flag & (1<<SENDEROUTINE_M_OK))

    SENDEROUTINE_M_OK is ja = 1
    wäre dann
    if ( Flag & SENDEROUTINE_M_OK) --> If (Flag & 1)
    und
    (1<<SENDEROUTINE_M_OK) --> (1 << 1) ---> 2 --> If (Flag & 2)


    Edit: Schamperl ! Schaust du mal bei dir aus dem Fenster raus ? Vielleicht bist du längst abgesoffen und hast es nicht bemerkt ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #20
    Hallo schamp,
    Ich habe gerade dein Code_Programm gesehen, und finde es klasse. das ist genau was ist brauche.
    Aber ich wollte dich bitten, das folgende Datei zu posten:
    #include "sw_uart.h"

    vielen Dank im Voraus.
    Benites

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress