Home Forum MICROCONTROLLORI Memorizzare il valore registrato sulla porta del uC

Questo argomento contiene 2 risposte, ha 3 partecipanti, ed è stato aggiornato da Luca Giuliodori Luca Giuliodori 3 anni, 5 mesi fa.

Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)
  • Autore
    Articoli
  • #57894

    Matteuzzo
    Membro

    Salve a tutti!

    Ho un’ applicazione che funziona su un microcontrollore a 8 bit da Atmel AVR. Utilizzando questa applicazione, la porta prende un certo valore, diciamo 01001110. Se l’alimentazione del microcontrollore si interrompe accidentalmente vorrei che tornasse al ultimo valore registrato sulla porta in uscita.
    E qui mi servirebbe il vostro aiuto perché non so come si può fare.

    Grazie!!!

    #69421

    Emanuele
    Keymaster

    Ciao, una soluzione spesso usata è quella di memorizzare il valore della porta in una memoria non volatile, eeprom. Ci sono esterne al microcontroller, oppure interne. In alcuni micro sono semplici registri, in altri potresti usare una parte della flash.

    Bisogna però considerare che le eeprom hanno un ciclo massimo di scrittura che varia in base alla tecnologia. In genere si parla di 1 milione di cicli di scrittura, ma a volte anche di 100.000

    Capisci che se salvi in eeprom ogni secondo, la durata dell’apparato è compromessa :-)

    Quindi dovresti salvare ad intervalli dettati dalla durata della eeprom.

    A tale inconveniente, alcune case di microcontrollori, hanno risposto con un interrupt che interviene sotto una certa soglia di alimentazione. In questo modo, se la tensione di alimentazione inizia a scendere, allora prima della soglia minima di funzionamento del micro, puoi salvare in eeprom tutto quello che devi.
    Ovviamente tale controllo puoi farlo anche esternamente con un ad converter

    Tutto chiaro?

    #69426
    Luca Giuliodori
    Luca Giuliodori
    Partecipante

    Appoggio ciò che dice emanuele: l’unico modo per fare ritornare i livelli dei pin delle porte allo stato che erano prima che il microcontrollore si spegnesse, è quello di salvare gli stati dei relativi pin in una eeprom interna o esterna al microprocessore. Attenzione però al numero di scritture che vai ad eseguire perchè altrimenti dopo un po’ c’è il rischio che questo metodo non ti funziona più a causa della eeprom che non è più in grado di memorizzare i dati.

    Modi per ovviare a questo problema ce ne sono molti e tra quelli suggeriti già da emanuele te ne suggerisco altri due:

    – salvi il valore solo quando i pin della porta cambiano stato. In questo caso se i cambiamenti sono frequenti non puoi utilizzare questo metodo perchè altrimenti potresti incorrere nel problema di cui già ti abbiamo parlato, ossia che la eeprom non riesce più a memorizzare i dati.
    – se il microcontrollore non prevede un interrupt per segnalarti che l’alimentazione è scesa al di sotto di una certa soglia, usi un pin del micro per monitorare l’alimentazione (già suggerito da emanuele) ma aumenti la capacità che si trova nello stadio di alimentazione; questa modifica sulla capacità dello stadio di alimentazione te la consiglio perchè solitamente la scrittura sulla eeprom, soprattutto se esterna, richiede oltre che un tempo che solitamente è lungo rispetto ai tempi del microprocessore, richiede anche un quantitativo di corrente maggiore rispetto a quello che solitamente consuma un microprocessore che non sta eseguendo questa operazione. Con una capacità più grande garantisci che la scrittura venga eseguita correttamente. In questo caso dovresti mettere un diodo tra la capacità e il ponte di diodi (anodo sul ponte di diodi e catodo sulla capacità) e il pin del micro opportunamente collegato con un fotoaccoppiatore (in questo caso hai masse differenti) sull’anodo del diodo (se ti interessa posso farti avere uno schizzo dello schema elettrico).

    Una piccola nota: una volta che l’alimentazione torna ad alimentare il microcontrollore avviandolo, dovresti prevedere nell’algoritmo un controllo che verifichi se l’ultima scrittura sulla eeprom è andata a buon fine perchè potrebbe essere capitato che l’alimentazione non è stata sufficiente a far eseguire la scrittura. Molti micro hanno dei bit di un determinato registro che indicano lo stato dell’ultima scrittura della eeporm.

Stai vedendo 3 articoli - dal 1 a 3 (di 3 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.