[RISOLTO] Bootloader attraverso Atmel Studio 7.0

Buongiorno ragazzi,
è da qualche mese che utilizzo alcuni Atmega-2560 vergini e invio il ".hex" attraverso Atmel Studio 7.0.

Ho notato che quando utilizzo il WatchDog, il micro si resetta e WatchDog rimane sempre attivo.

Cercando su internet, hanno consigliato di caricare il seguete WatchDog:

https://github.com/arduino/Arduino-stk500v2-bootloader/tree/master/goodHexFiles

Come posso caricare il boorloader attraverso Atmel Studio 7.0?

Grazie per l'aiuto.

Se tu usi Atmel Studio, probabilmente stai caricando i programmi via programmazione ISP e NON via USB con il bootloader, giusto ?

SE è così il bootloader NON ha nulla a che vedere dato che comunque viene sovrascritto quando tu carichi qualche cosa via ISP ... il problema è altrove, magari nei FUSE dove, forse per errore, hai attivato il suddetto WatchDog (FUSE WDTON).

Guglielmo

Capito.
Io per i fuses utilizzo la seguente configurazione:

EXTENDER: 0xFD
HIGH: 0xDE
LOW: 0xFF

Lock bit: 0xff

Il fuse "WDTON" risulta non attivo.

Il problema è quando faccio intervenire il whatchdog, lui si attiva, la scheda si riavvia ma il whatchdog rimane attivo.

Mmm ... mi sembra che tu, nonostante NON usi il bootloader (dal tuo silenzio/assenso :smiley: mi sembra di capire che carichi via ISP) hai però il FUSE BOOTRST attivo quindi la MCU, all'avvio, comunque esegue un jump in una non meglio definita routine di boot :o

Disabilita quel FUSE e riprova ...

Guglielmo

P.S.: Sicuro anche dell'impostazione dei FUSE di Clock ? ? ? Per la scelta di tutti i valori puoi user il Fuse Calculator che trovi QUI :wink:

Io ti confermo che carico via ISP, scusami se non l'ho specificato prima.

Ho provato a disabilitare il FUSE "BOOTRST" ma non funziona ugualmente.

Successivamente ho provato a inserire il settaggio dei fuse selezionando l'oscillatore esterno ma non va ugualmente.

P.s. per la gestione del watchdog utilizzo la libreria "avr/wdt.h"

Mmmm .... ma che problema riscontri esattamente? ... e metti il codice che stai utilzzando (...mi raccomando, in conformità al regolamento, punto 7, il codice va racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra), non vorrei che sei tu a ripristinare il WD ... ::slight_smile:

Guglielmo

Ti ringrazio per l'avviso.

#include <LiquidCrystal.h>
#include <avr/wdt.h>            
LiquidCrystal lcd(12, 11, 9, 8, 7, 6, 5, 4, 3, 2); //8 bit
const byte lum =  53;              //PIN luminosità display  PIN 53


void setup() {
  lcd.begin(16, 2);              //dichiarazione display
  pinMode(lum, OUTPUT);   // luminosità display
  digitalWrite(lum, 1);        // accensione luce display
  delay(2000);

  wdt_enable(WDTO_8S);
  lcd.setCursor(0, 0);
  lcd.print("   LOADING...   ");
  lcd.setCursor(0, 1);
  lcd.print("                ");
  delay(20000);

  wdt_disable();   
  lcd.setCursor(0, 0);
  lcd.print("   LOADING111   ");
  lcd.setCursor(0, 1);
  lcd.print("                ");

}

void loop() {

}

Vedo che come parte il programma attiva il WD ... quindi? Tu esattamente COSA vorresti fare ?

Guglielmo

Principalmente questa è una prova per vedere se il riavvio funziona in modo corretto.

Lui principalmente si dovrà spegnersi e successivamente far ricomparire la scritta "LOADING".

Il problema è che quando si riavvia la prima volta, il display si spegne ma si vede perfettamente che si resetta in modo continuo.
Per ripristinarlo devo levare tensione e rimettere tensione.

Ho risolto seguendo questo topic:

ho inserito l'azzeramento di "MCUSR" all'avvio e sembra funzionare.

Grazie Gugliemo per la tanta pazienza.
Lascio la soluzione per chi riscontra il mio stesso problema.

... era il passo successivo che ti averi proposto :smiley: :smiley: :smiley:

Comunque, non capisco la cosa ... quello è un problema con i vecchi bootloader e tu dici di NON usare bootloader ... mah ... ::slight_smile:

Guglielmo

Io carico il ".hex" utilizzando il programmatore Atmel-ICE e il programma Atmel Studio 7.0.