-         

Ergebnis 1 bis 8 von 8

Thema: watchdog hilfe

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    20.07.2004
    Ort
    Hollabrunn
    Alter
    33
    Beiträge
    85

    watchdog hilfe

    Anzeige

    hallo an alle,

    ich möchte denn watchdog bei meinem atmega128 implementieren
    und zwar so das wenn ein signal am port pd3 (high) anliegt der timer vom
    watchdog zurück gesetzt wird. falls kein high anliegt soll der watch dog überlaufen nach 1sec.

    nur mein prob. ist das ich denn watchdog noch nie verwendet habe und nicht weiß wie ich ihn einbinden soll.

    ich brauch hilfe bevor ich einen blödsinn mach

    das ist mein jetziger code.:
    Code:
    #include <stdio.h>
    #include <avr/io.h>
    #include <avr/wdt.h>
    #include <util/delay.h>
    #include <math.h>
    #include <avr/pgmspace.h>
    #define LCD_DDR DDRB
    
    
     
    void delay_ms(unsigned int period);
    
    #include <glcd-Display3000-211.h>
    
    extern const prog_uint8_t Font1[], Font2[];
    
    
    #include "bild1.h"
    #include "Bild2.h"
    #include "Bild3.h"
    
    extern const prog_uint16_t  *Bitmap;
    
    
    
    int main(void)
    
    {
                    LCD_Init();
    	delay_ms(1000);
    	DDRD = 0;
    	PORTD |= (1 << PD1) | (1 << PD6) | (1 << PD3) ; 
       
    	
    	while(1)
    	
    	
    	{
    	
    	    if (PIND & (1 <<PD1))
            {
                  
    			  Orientation = Portrait180;
    		      LCD_Bitmap_256high(0, 0, 131, 175, Bild1, Table_Bild1, true);
                 
    			  
    	    } else 
    		
    		{
    		
    		      Orientation = Portrait180;
    		      LCD_Bitmap_256high(0, 0, 131, 175, Bild3, Table_Bild3, true);
                  delay_ms(5000);
    			  
    		} 
    		
    		if (PIND & (1 <<PD6))
            {
                  
    			  Orientation = Portrait180;
    		      LCD_Bitmap_256high(0, 0, 131, 175, Bild1, Table_Bild1, true);
                  
    			  
    	    } else 
    		
    		{
    		
    		      Orientation = Portrait180;
    		      LCD_Bitmap_256high(0, 0, 131, 175, Bild2, Table_Bild2, true);
                  delay_ms(5000);
    			  
    		} 
    	}	
    	return 0; 
    }
    
    
    void delay_ms(uint16_t period)
    {
    	for(unsigned int i=0; i<=period; i++)
    		_delay_ms(1);
    }
    Wenn dich deine Kräfte verlassen, die Tränen dein Gesicht erfassen, du denkst, die ganze Welt sei gegen dich, dann denk an mich, denn ich glaub an dich

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Steht alles in der avr-libc-Doku in der Beschreibung der wdt.h.

    Erst wdt_enable, dann nach Bedarf wdt_reset.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    20.07.2004
    Ort
    Hollabrunn
    Alter
    33
    Beiträge
    85
    ich steh da total auf der leitung (confused)

    1: wdt_enable(WDTO_1S);


    muss ich da was in der wdt.h ?
    sorry falls ich blöde fragen stelle
    Wenn dich deine Kräfte verlassen, die Tränen dein Gesicht erfassen, du denkst, die ganze Welt sei gegen dich, dann denk an mich, denn ich glaub an dich

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Die wft.h hast du ja schon eingebunden. Jetzt musst du bloß an Anfang von main einmal
    wdt_enable(WDTO_1S);
    ausführen. Dann ist der wdt aktiv und muss regelmäßig mit wdt-reset(); resettet werden, sonst löst er aus.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    20.07.2004
    Ort
    Hollabrunn
    Alter
    33
    Beiträge
    85
    danke für die hilfe uwegw

    stimmt das so? oder bin ich zumindest auf dem richtigen weg
    Code:
    #include <stdio.h>
    #include <avr/io.h>
    #include <avr/wdt.h>
    #include <util/delay.h>
    #include <math.h>
    #include <avr/pgmspace.h>
    #define LCD_DDR DDRB
    
    
     
    void delay_ms(unsigned int period);
    #include <glcd-Display3000-211.h>
    extern const prog_uint8_t Font1[], Font2[];
    
    
    #include "bild1.h"
    #include "Bild2.h"
    #include "Bild3.h"
    extern const prog_uint16_t  *Bitmap;
    
    
    
    int main(void)
    
    
    {
        
    	LCD_Init();
    	delay_ms(1000);
    	DDRD = 0;
    	PORTD |= (1 << PD1) | (1 << PD6) | (1 << PD3) ; 
        wdt_enable(WDTO_1S); 
    	
    	while(1)
    	
    	{
    	   
    	     if (PIND & (1 <<PD3))
            {
    		  
                 wdt_reset();
    			 
    		}
    		
    		
    		
    	
    		
    		if (PIND & (1 <<PD1))
            {
                  
    			  Orientation = Portrait180;
    		      LCD_Bitmap_256high(0, 0, 131, 175, Bild1, Table_Bild1, true);
                  delay_ms(10);
    			  
    	    } else 
    		
    		{
    		
    		      Orientation = Portrait180;
    		      LCD_Bitmap_256high(0, 0, 131, 175, Bild2, Table_Bild2, true);
                  delay_ms(5000);
    			  
    		} 
    		
    		if (PIND & (1 <<PD6))
            {
                  
    			  Orientation = Portrait180;
    		      LCD_Bitmap_256high(0, 0, 131, 175, Bild1, Table_Bild1, true);
                  delay_ms(10);
    			  
    	    } else 
    		
    		{
    		
    		      Orientation = Portrait180;
    		      LCD_Bitmap_256high(0, 0, 131, 175, Bild3, Table_Bild3, true);
                  delay_ms(5000);
    			  
    		} 
    	}	
    	return 0; 
    }
    Wenn dich deine Kräfte verlassen, die Tränen dein Gesicht erfassen, du denkst, die ganze Welt sei gegen dich, dann denk an mich, denn ich glaub an dich

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Sieht doch gut aus.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    20.07.2004
    Ort
    Hollabrunn
    Alter
    33
    Beiträge
    85
    du wie funktioniert das mit dem UART reset kommando
    genau genommen wie schicke ich ein reset über RS232 wäre praktich weil
    ich ja denn megaload bootloader drin hab

    #include <avr/wdt.h>
    #include <avr/interrupt.h>
    ...
    cli(); // Interrupts global abschalten
    wdt_enable (WDTO_15MS); // Watchdog aufziehen auf 15ms
    while (1);

    und was hat denn der send reset button in megaload für eine funktion?
    Wenn dich deine Kräfte verlassen, die Tränen dein Gesicht erfassen, du denkst, die ganze Welt sei gegen dich, dann denk an mich, denn ich glaub an dich

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    20.07.2004
    Ort
    Hollabrunn
    Alter
    33
    Beiträge
    85
    ich hab ein rechteck signal
    imgrunde möcht ich mit dem atmega abfragen
    ist dieses signal vorhanden wenn ja setz denn watchdog timer zurück und wenn nicht lass ihn überlaufen und mach ein hardware reset.

    gut jetzt ist der watchdog aktiviert.
    aber wie frag ich das am besten ab?
    Wenn dich deine Kräfte verlassen, die Tränen dein Gesicht erfassen, du denkst, die ganze Welt sei gegen dich, dann denk an mich, denn ich glaub an dich

Berechtigungen

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