Steht alles in der avr-libc-Doku in der Beschreibung der wdt.h.
Erst wdt_enable, dann nach Bedarf wdt_reset.
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
Steht alles in der avr-libc-Doku in der Beschreibung der wdt.h.
Erst wdt_enable, dann nach Bedarf wdt_reset.
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
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.
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
Sieht doch gut aus.
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
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
Lesezeichen