Programmazione Fuse Attiny85

Salve a tutti,
vorrei risolvere alcuni problemi su un progetto da me sviluppato con Attiny85, infatti il chip è stato inserito in un ambiente rumoroso , mi sto riferendo all'alimentazione e disturbi indotti da motori a spazzola con picchi da 20A, alimentazione è a batterie li-ion da 14,4V , attualmente per non danneggiare il chip dalle extratensoni ho inserito dei diodi TVS a protezione , infatti quando si generavano picchi di assorbimento elevati sull'alimentazione venivano generati picchi molto elevati di tensione dalle spazzole/induttanze del motore, quando mi accadevano questi picchi tutti i circuiti a valle venivano distrutti (riduttore di tensione e chip) ,con l'inserimento dei diodi limitatori sembra di aver risolto il problema, adesso mi trovo a gestire dei problemi che accadono in modo random sulla EEPROM , infatti occasionalmente alcuni dati sulla eeprom vengono cancellati ,
ho rilevato casi che avvengono anche se scollego e ricollego l'alimentazione , nel caso specifico vista la presenza di un pack di batterie considerate che viene rimosso 2-4 volte al giorno,
la scrittura della eeprom avviene solo accedendo in un menu di configurazione , infatti per l'utilizzo normale la eeprom viene solo letta solo allo startup, come ribadito precedentemente la cancellazione avviene in modo random, posso avere anche una settimana senza anomalie, peccato che quando avviene ha azioni devastanti , può darsi che il dato viene cancellato durante il ciclo e solo dopo aver riavviato la macchina mi accorgo del problema, nella locazione di memoria vengono scritti valori in default FF, ho visto in rete che per ovviare a questo problema vegono abilitati i BOB o viene abbbassata la velocità di clock del chip, nel mio progetto il clock è settato a 16MHz con il generatore interno, attualmente non conosco tutte le funzioni dei FUSE e vorrei capire se i BOB possono darmi una mano,

scusate per l'ignorana

sono gradite info su questi parametri a me sconosciuti

dimenticavo nel chip ho dovuto disabilitare l' External Reset in quanto mi serviva un'altro ingresso e viene utilizzata la funzione sleep.

grazie a tutti per l'interessamento

BOB ? ? ? ... magari parli dei bit dei FUSE che controllano il BOD (Brown-out Detector) ... ma quelli servono solo a bloccare e fare "reset" della MCU se la tensione di alimentazione scende sotto un livello minimo prefissato.

Nel tuo caso, avendo optato per i 16 MHz, comunque NON dovresti mai scendere sotto i 4V e quindi avere i tre bit dei fuse relativi al BOD[2:0] messi a 1 0 0 così da garantire il blocco ed il successivo "reset" della MCU se scendi sotto detto valore (circa).

Guglielmo

Scusa volevo dire BOD,
fammi capire non sono molto ferrato con i fuse,
impostanto i BOD a 1,0,0 se la tensione scende sotto i 4V il chip si resetta , giusto? quindi il vantaggio qual'è? la tensione bassa e la cancellazione di alcune celle della eeprom anche se non accedo a questa memoria in scrittura teoricamente sono collegate?
a te non è mai capitata una situazione simile?

se abbasso la frequenza del clock e il chip accetta un range più ampio di tensioni senza modificare la configurazione dei BOD teoricamente risolvo il problema?

quesla situazione mi sta facendo impazzire

Dato che la massima frequenza di lavoro di una MCU richiede un livello minimo di alimentazione e che, se si scende sotto tale livello, si possono avere malfunzionamenti, tramite il BOD si controlla che ciò non avvenga e che, se l'alimentazione scende sotto il minimo necessario, il tutto si blocchi.


Nel tuo caso, se stai eseguendo un'operazione sulla EEPROM e l'alimentazione scende sotto il livello minimo, puoi avere problemi.

Altra cosa che può causare problemi con la EEPROM è il non rispetto delle tempistiche da essa richieste (e ben descritte nel datasheet). Se però tu usi le librerie standard di Arduino per accecederci ... tale tempistiche dovrebbero essere rispettate ... ::slight_smile:

Guglielmo

mi stai dicendo che posso avere problemi se durante l'accesso alla eeprom non rispetto delle tempistiche/latenze ? da verifiche effettuate sembra che la eeprom sovrascrive i dati in modo autonomo senza correlazioni logiche,mi viene da pensare di avere dei chip di seconda scelta o dei picchi di tensione inferiori alla sua portata, considera che attualmente ho effettuato delle prove con il classico 7805 e con circuiti dc-dc ad alta efficienza , il problema lo riscontro sempre in modo random, considera che ho dovuto inserire dei diodi TVS per tagliare i picchi di extratensione che provocavano la distruzione di tutti i componenti a valle , compresi i convertitori dc-dc e anche il classico integrato 7805 con voltaggio massimo di 30V!!!
devo provare ad abbassare la frequenza di clock a 8-10MHz , sicuramente mi porterà ad avere una minore reattività del processore , tutto da sperimentare e verificare con test
vista la situazione dovrò provare a fare due prove uno con il BOD attivarto e un'altro con frequenza piu' bassa

per il momento ti ringrazio per il tuo supporto

.. nel mio progetto il clock è settato a 16MHz con il generatore interno,

...

devo provare ad abbassare la frequenza di clock a 8-10MHz ,

Non è che fai un pò di confusione ?
L'oscillatore interno è al max a 8 Mhz

brunello22:
Non è che fai un pò di confusione ?
L'oscillatore interno è al max a 8 Mhz

Occhio Brunello ... datasheet, cap 6.22, High Frequency PLL Clock ... :wink:

Guglielmo

Mannaggia, è vero... l'Attiny ha il PLL

Ho fatto delle prove e sto focalizzando l'attenzione sull'impostazione dei fuse, nel calcolo dei fuse LOW nell'impostaione della frequenza ci sono molte funzioni che non conosco ,

sto parlando di questi parametri
PLL clock, startup-time PWRDWN/RESET: 16K CK/14CK+64ms [CKSEL=0001 SUT=11]
PLL clock, startup-time PWRDWN/RESET: 16K CK/14CK+4ms [CKSEL=0001 SUT=01]

PLL clock, startup-time PWRDWN/RESET: 1K CK/14CK+64ms [CKSEL=0001 SUT=10]
PLL clock, startup-time PWRDWN/RESET: 1K CK/14CK+4ms [CKSEL=0001 SUT=00]

dove trovo 16K penso che si indichi la frequenza di 16MHz, mentre non conosco gli altri parametri se possono portare vantaggio alla mia problematica

ho notato che è presente anche un parametro legato alla scrittura della EEPROM

Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0]

dalla descrizione penso che sia utile solo per non cancellare la EEPROM durante il carimento del programma e quindi a me non porta vantaggio

Giusto o sto dicendo solo cavolate? graditi suggerimenti

pinoros64:
dove trovo 16K penso che si indichi la frequenza di 16MHz ...

NO, non c'entra assolutamente nulla ...
... devi andare a studiare nel datasheet, a seconda delle tue impostazioni, quale valore di ritardo nell'avvio del PLL è consigliato.

Guglielmo