Opgelost Arduin Mega in eindeloze loop, kan niet meer uploaden

Hallo,

Ik ben bezig om de “Arduino PV MPPT Solar Charger” van Abhi Verma aan te passen voor mijn toepassing. Dit projekt maakt gebruik van de Watchdogtimer. Omdat de toepassing regelmatig herstart, wou ik de WDT op een langere tijd instellen, nl 8seconden.
Hieronder de settings uit het originele projekt:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Extract uit Arduino -PV MPPT Solar Charger van Abhi Verma

void watchdogSetup(void)
{
Serial.println(“void watchdogSetup(void)”);
cli(); // disable all interrupts
wdt_reset(); // reset the WDT timer
// Enter Watchdog Configuration mode:
WDTCSR |= (1<<WDCE) | (1<<WDE);
// Set Watchdog settings:
WDTCSR = (1<<WDIE) | (1<<WDE) | (1<<WDP3) | (0<<WDP2) | (0<<WDP1) | (1<<WDP0);
sei();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ISR(WDT_vect) // Watchdog timer interrupt.

{
Serial.println(“ISR(WDT_vect) // Watchdog timer interrupt.”);
Serial.println((“WDT reset.”));
asm volatile (" jmp 0");
// Include your code here - be careful not to use functions they may cause the interrupt to hang and
// prevent a reset.
}

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Voorbeeld om WDT in te stellen op webpagina https://folk.uio.no/jeanra/Microelectronics/ArduinoWatchdog.html

time before watchdog firing argument of wdt_enable()

15mS WDTO_15MS
30mS WDTO_30MS
60mS WDTO_60MS
120mS WDTO_120MS
250mS WDTO_250MS
500mS WDTO_500MS
1S WDTO_1S
2S WDTO_2S
4S WDTO_4S
8S WDTO_8S

For example, the following code will reboot the Arduino board after the setup loop and a 15 milliseconds frozen time (you will see the led 13 blinking as the board goes through each setup):

#include <avr/wdt.h>

#define led 13 // pin 13 is connected to a led on Arduino Uno

void setup()
{
pinMode(led, OUTPUT); // set pin mode
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a tenth of a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a tenth of a second
}

void loop(){
wdt_enable(WDTO_15MS); // enable the watchdog
// will fire after 15 ms without reset

while(1)
{
// wdt_reset(); // uncomment to avoid reboot
}
}

In de eerste lijn in de Loop() heb ik WDTO_8S gezet, sindsdien kan ik niets meer uploaden naar de Arduino Mega.
De Power Led en L led (= led 13), branden konstant.
Wanneer ik op de Reset blijf drukken, dan gaat de L led langzaam minder helder branden, maar gaat niet volledig uit.
Laat ik de Reset los, dan gaat de L led onmiddelijk terug fel branden.
Hoe krijg ik de Arduino Mega terug onder kontrole?
Kan men bv het flash geheugen wissen zonder verbinding met de Arduino, één of andere input kombinatie?
Ik had gedacht om het 16MHz kristal los te solderen en er een generator in de plaats aan te sluiten met een lage frequentie zodat de processor een stuk trager zou draaien.
Mischien kan ik dan een “leeg” programma in laden zodat de processor uit de eindeloze loop geraakt.

Iemand een idee?

Bootloader opnieuw branden via ICSP zou een oplossing kunnen zijn. Heb je een programmer of andere Arduino?

Weet je zeker dat je de eerste regel in loop() hebt veranderd naar wdt_enable(WDTO_8S) ?

Ik heb de WDT.. lijn gewist toen ik zag dat het programma niet meer werkte en geprobeerd om het programma terug in te laden met de IDE. Lukt niet. Zodoende heb ik de "schuldige versie" van mijn programma niet meer.
Toen geprobeerd om een bootlader te laden, werkt niet omdat de Arduino niet meer reageert op de USB poort.
De Arduino zit in een zodanige loop dat er niets meer doorkomt van de USB poort. Vandaar mijn vraag of het vervangen van het kristal door een signaalgenerator met lagere frekwentie uitkomst kan bieden.

Boot loader wordt geladen via ICSP verbinding, niet via USB van de Mega. Je hebt een andere Arduino of een programmeer apparaat nodig.

Ik heb nog een Mega, een Nano en een Pro Mini. Effe "diagonaal" op het internet gekeken om de ICSP connector te identifiëren. In de voorbeelden van de IDE staat een ISP programmer. Hoe kan ik daarmee aan de slag?

Nooit gedaan met een Arduino als programmeer apparaat, maar voor zover ik het begrijp:

Open file -> examples -> ArduinoISP ->ArduinoISP.
2)
Upload de sketch in een ongebruikte (en werkende) Arduino; kies Arduino en poort gebaseerd on de Arduino die je gebruikt als programmeer apparaat
3)
Twee Arduinos met elkaar verbinden via ICSP
4)
Kies tools -> programmer -> ArduinoISP
5)
Kies tools -> board -> Mega
6)
Kies tools -> burn bootloader

Succes

Hallo,

Bootloader brander is gelukt, de Mega is uit zijn lijden verlost. Ik ook!

Wel bedankt voor je hulp!