PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : watchdog hilfe



leon20
31.07.2007, 20:51
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.:


#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);
}

uwegw
31.07.2007, 20:58
Steht alles in der avr-libc-Doku in der Beschreibung der wdt.h.

Erst wdt_enable, dann nach Bedarf wdt_reset.

leon20
31.07.2007, 21:14
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

uwegw
31.07.2007, 21:24
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.

leon20
31.07.2007, 21:40
danke für die hilfe uwegw :)

stimmt das so? oder bin ich zumindest auf dem richtigen weg

#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;
}

uwegw
31.07.2007, 21:52
Sieht doch gut aus.

leon20
31.07.2007, 22:34
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?

leon20
31.07.2007, 23:01
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?