Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

ATmega328PB si resetta da solo

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] ATmega328PB si resetta da solo

Messaggioda Foto UtenteJackd » 3 feb 2026, 19:33

Buonasera, ho un problema con il micro atmega328PB che ho montato in sostituzione del atemga328P in una serie di schede.

In questi giorni stiamo procedendo con il collaudo di un dispositivo che ha una taratura particolare ed è emerso il problema: la scheda si resetta a random.

Una volta innescato il primo "reset", si ripete svariate volte ad intervalli brevi, tipo ogni 3/4 secondi.

Ho provato a scambiare più schede, ma l'anomalia bene o male si continua a manifestare.

Se monto queste schede su un altro dispositivo della stessa taglia, ma con diversa taratura, il problema sembra sparire.

La linea del reset ha la sola restistenza fisica da 10K di pullup con pulsantino per reset manuale, a livello di fuse ho lasciato il Watchdog disabilitato e il BOD è attivo e messo a 4V3.
(Non ho usato il Watchdog, perché non lo ho mai studiato e non ho la conoscenza di come debba essere usato.)

Di primo acchito, anche se con qualche riserva, sarei propenso ad escludere sia l'errore software che l'errore hardware, visto che in altri dipositivi l'errore non si palesa, ed a puntare di più su qualche disturbo che però con l'oscilloscopio non sono ancora riuscito a scovare.

Nel mentre, scavando sul Datasheet per altre possibili condizioni di reset, ho trovato questa nota che ammetto non aver compreso a pieno:
Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or brown-out condition, the device will be reset and the Watchdog Timer will stay enabled. If the code is not set up to handle the Watchdog, this might lead to an eternal loop of time-out resets. To avoid this situation, the application software should always clear the Watchdog System Reset Flag (WDRF) and the WDE control bit in the initialization routine, even if the Watchdog is not in use.


A vostro parere, nel mio caso, se interviene BOD, con Watchdog disabilitato a livello di fuse, mi ritrovo comunque in questo scenario? in caso affermativo, non comprendo il fatto di mettere un fuse dedicato...

e grazie per aver letto tutta sta filippica :D
Codice: Seleziona tutto
[code=php]per il codice a colori[/code]
Avatar utente
Foto UtenteJackd
794 4 7
Expert
Expert
 
Messaggi: 282
Iscritto il: 15 set 2014, 19:10
Località: Padova

0
voti

[2] Re: ATmega328PB si resetta da solo

Messaggioda Foto Utenteboiler » 3 feb 2026, 22:27

Jackd ha scritto:La linea del reset ha la sola restistenza fisica da 10K di pullup con pulsantino per reset manuale

In parallelo al pulsantino ci starebbe bene un condensatore ceramico per evitare che disturbi possano causare un reset.

A vostro parere, nel mio caso, se interviene BOD, con Watchdog disabilitato a livello di fuse, mi ritrovo comunque in questo scenario?

Probabilmente no.

Spero che tu abbia previsto un qualche mezzo di debug (un LED, un GPIO... qualcosa).
In tal caso modifica il codice e fagli leggere durante l'inizializzazione il registro MCUSR, ti dice qual è stata la ragione dell'ultimo reset. Poi codifica quest'informazione sul LED o quello che hai (per esempio un lampeggio = watchdog, due lampeggi = brownout,...)

Saluti, Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5599
Iscritto il: 9 nov 2011, 12:27

0
voti

[3] Re: ATmega328PB si resetta da solo

Messaggioda Foto UtenteEtemenanki » 4 feb 2026, 1:13

Jackd ha scritto:Buonasera, ho un problema con il micro atmega328PB che ho montato in sostituzione del atemga328P ...

Spero che abbiate considerato che il PB ha una piedinatura leggermente diversa dal P (i pin 3 e 6 del P sono alimentazione, quelli del PB sono PE0 e PE1) e non e' sostituibile direttamente ... :roll:
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.
Avatar utente
Foto UtenteEtemenanki
9.507 3 6 10
Master
Master
 
Messaggi: 5935
Iscritto il: 2 apr 2021, 23:42
Località: Dalle parti di un grande lago ... :)

0
voti

[4] Re: ATmega328PB si resetta da solo

Messaggioda Foto UtenteEcoTan » 4 feb 2026, 9:43

Jackd ha scritto:La linea del reset ha la sola restistenza fisica da 10K di pullup con pulsantino per reset manuale

10k è il valore consigliato? Proverei a ridurlo.
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5420
Iscritto il: 29 gen 2014, 8:54

0
voti

[5] Re: ATmega328PB si resetta da solo

Messaggioda Foto UtenteEtemenanki » 4 feb 2026, 11:52

10k e' il valore standard verso VCC, con 100n verso GND per garantire il reset ad ogni accensione, ma anche per evitare che disturbi casuali possano resettare dopo, durante il funzionamento.
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.
Avatar utente
Foto UtenteEtemenanki
9.507 3 6 10
Master
Master
 
Messaggi: 5935
Iscritto il: 2 apr 2021, 23:42
Località: Dalle parti di un grande lago ... :)

0
voti

[6] Re: ATmega328PB si resetta da solo

Messaggioda Foto UtenteJackd » 4 feb 2026, 12:41

Grazie a tutti delle risposte,

Sul PCB puosso montare entranbi i processori, ho previsto che il 3 ed il 6 vadano su Testpoin in modo da poter scegliere se usarli come I/O o poterli collegare ad alimentazione. In questo momento sono disconnessi e non utlizzati in sw.

pensando al disturbo, ho aggiunto a quelli già presenti, 100n sia sulle alimentazioni Vcc/Avcc che su reset che su vref, ma senza risultato significativo.

Sul reset il 100n ho dovuto rimuoverlo perché mi dava probremi con Atmel-ICE ad attivare sessione di debugwire.
Purtroppo non posso tenere il debugger attaccato alla macchina mentre è accesa.
Al suo posto ho messo oscilloscopio sul RESET, ed ho notato che un po di disturbo residuo c'è;

Prima di ri-smontare la scheda per ridurre la 10K, ho voluto fare misure su vari punti per tentare di avere un idea più completa.
E sono emersi un altro paio di sintomi quando si incasina:
dal loop principale mi ha chiamato un sottoprogramma che normamente potrebbe essere richiamato solo dal loop di inizializzazione se si stà tenendo premuto un pulsante, il tipico menu nascosto.
Per cui sono andato a controllare l'ingresso analogico al quale è connesso un partitore resistivo con pulsanti tra i quali quello per il menu nascosto, ed ho trovato che viene posto a zero a caso. Da datashet in reset gli I/O dovrebbero andare int ristate.
Ho già scollegato il pulsante col collegamento a massa per escludere sia una sua colpa.
Sto seriamente pensando di essere incappato in una serie di micro un po fallati.





Foto Utenteboiler Non propriamente.. ho qualche gpio che posso dirottare per questo scopo, ci provo e vi faccio sapere
Codice: Seleziona tutto
[code=php]per il codice a colori[/code]
Avatar utente
Foto UtenteJackd
794 4 7
Expert
Expert
 
Messaggi: 282
Iscritto il: 15 set 2014, 19:10
Località: Padova

0
voti

[7] Re: ATmega328PB si resetta da solo

Messaggioda Foto UtenteJackd » 4 feb 2026, 16:30

Ho letto il registro MCUSR
Codice: Seleziona tutto
//appena entro in setup
byte temp_MCUSR=MCUSR;
...
//dopo inizializzazioni varie
lcd.print(temp_MCUSR);
MCUSR=0;
delay(3000); //blocco tutto, per leggere quel che ha scritto
 


- alla prima accensione mi restituisce dec 5 o bin 0101 ; avendo il Bod a 4,3V che sbloca dopo il por lo considero ok
- se ora premo il pulsante reset mi restituisce dec 2 o bin 0010 e anche qua ok, avento reimpostato io MCUSR=0, quello che esce 0010 corrisponde a EXTRF
- se però resetta da sola, mi restituisce 0
Codice: Seleziona tutto
[code=php]per il codice a colori[/code]
Avatar utente
Foto UtenteJackd
794 4 7
Expert
Expert
 
Messaggi: 282
Iscritto il: 15 set 2014, 19:10
Località: Padova

0
voti

[8] Re: ATmega328PB si resetta da solo

Messaggioda Foto Utenteboiler » 4 feb 2026, 16:50

Jackd ha scritto:se però resetta da sola, mi restituisce 0

Questo è interessante. L'unico modo per ottenere uno 0 è che tu ce lo scriva. Cosa che effettivamente fai. Ma vuol dire che il codice è passato da lì senza subire un reset.

C'è forse un'istruzione di tipo go-to o riesci in qualche modo a compromettere il program counter?
(non conosco l'architettura AVR, non so se sia possibile)

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5599
Iscritto il: 9 nov 2011, 12:27


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti