Go Down

Topic: Arduino + Watchdog Fehler = unbenutzbar (Read 661 times) previous topic - next topic

Verim

Jan 04, 2013, 12:19 pm Last Edit: Jan 04, 2013, 02:00 pm by Verim Reason: 1
Hallöchen =)

Ich bin noch ganz neu in der Arduino- & Mikrocontrollerwelt. Mir ist ein Fehler beim Programmieren meines Arduinos unterlaufen, ich habe etwas mit dem Watchdog herum gespielt, dabei ist mir scheinbar ein Fehler unterlaufen. Jetzt startet der Arduino alle paar Mikrosekunden neu. Wäre an sich ja nicht weiter schlimm, aber ich kann dass Sketch nicht überspielen, da gar keine Verbindung zum Board (Mega 2560) hergestellt wird.

Wie kann ich jetzt am besten vorgehen?
->Ich meine irgendwo gelesen zu haben, dass man mit meinem 220µF Kondensator das Bord vom Neustart abhalten kann, stimmt das und gilt das auch in diesem Fall? (Nebenfrage hierzu: wofür steht die Voltangabe der Kondensatoren? Ich nehme an, dass ist das Maximum, welches sie aushalten, für mich mit meinen 5V also egal, oder gibt es dort auch ein Mimumum?)
->Ein zweites Bord oder spezielle Hardware um den Bootloader neu zu brennen besitze ich aktuell auch nicht, ohne geht es aber (meiner Recherche nach) nicht, also kann ich den Chip auch nicht "einfach löschen"?

Ich hoffe ihr könnt meine Anfängerfragen beantworten,  :smiley-red:
vielen Dank dafür schon einmal!

Edit:
Also ich habe einen Code der etwa so war drauf geladen, wobei da irgend ein Fehler drin sein muss, da der Watchdog eigentlich erst nach dem Setup(was ein paar Sekunden dauern sollte) eingeschaltet werden sollte.
Code: [Select]

#include <SPI.h>
#include <Ethernet.h>
#include <avr/wdt.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network.
// gateway and subnet are optional:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 99);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 255, 0);


// telnet defaults to port 23
EthernetServer server(23);
boolean alreadyConnected = false; // whether or not the client was connected previously

void setup() {
  // initialize the ethernet device
  Ethernet.begin(mac, ip, gateway, subnet);
  // start listening for clients
  server.begin();
// Open serial communications and wait for port to open:
  Serial.begin(9600);
  Serial.print("Chat server address:");
  Serial.println(Ethernet.localIP());     
  wdt_enable(WDTO_15MS); 
}

void loop() {
...
}

michael_x

Quote
ich habe etwas mit dem Watchdog herum gespielt

Quote
spezielle Hardware um den Bootloader neu zu brennen besitze ich nicht


Weiss nicht wie du es ohne Programmer geschafft hast, aber den Watchdog Timer in den Fuses solltest du wieder abschalten
http://www.engbedded.com/fusecalc

Der Kondensator hilft meines Wissens nach nur, den Reset via DTR Signal ( Serial Monitor, Upload ) zu unterdrücken.

volvodani

Du hast eine watchdog mit 15ms!!!!! gesetzt was bei dem Bootloader ja schon mal das absloute k.o. ist.
Das heisst die watchdog resetet deinen Arduino immer dann wenn innerhalb 15ms kein wdt_reset() aus der loop gekommen ist. Der Bootloader Verzug dauert schon mindestens 1s, also kommst du aus deinem Dilemma ohne externe Hardware (ISP Programmer) nicht raus. Watchdogs sollte man wirklich nur dann einsetzten wenn man
1. weiss was man da tut
2. es wirklich notwendig ist.

Gruß
Der Dani
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Verim

#3
Jan 11, 2013, 05:23 pm Last Edit: Jan 11, 2013, 08:42 pm by Verim Reason: 1
Jojo, habes es gelernt  =(  :smiley-zipper:

Ich habe mir jetzt einen USBasp besorgt, alles korrekt angeschlossen (MOSI/MISO/SS/SCK/5V/Gnd Pins von hier genommen).
Jedoch "läuft" mein Board jetzt natürlich "ganz normal" und resetet sich munter weiter. Wenn ich mit avrdude  versuche eine Verbindung auf zu bauen kommt immer die Ansagt, dass das Board nicht antworten würde, bzw mit -Force, dass es eine ungültige Signatur (nämlich keine!) sendet.

Du wirktest mir so kompetent, dass du mir bestimmt verraten kannst, wie ich auch dieses Problem umschiffen kann =)

avrdude mit -F
Code: [Select]

>avrdude -c usbasp -p m2560 -U 2560.hex -F

avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
avrdude: Expected signature for ATMEGA2560 is 1E 98 01
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
        To disable this feature, specify the -D option.

avrdude done.  Thank you.

uwefed

Also letzte Rettungsring: HV-Programmierung.
http://mightyohm.com/blog/2008/09/arduino-based-avr-high-voltage-programmer/
http://atmega32-avr.com/avr-high-voltage-programmer-using-arduino-avr-microcontroller/
So kannst Du den ATmega zurücksetzen.
grüße Uwe

Go Up