Discussioni di carattere generale sull'elettronica analogica e digitale. Didattica e applicazioni pratiche.
#3862
Non è obbligatorio, ma la ram è pochina, viene occupata dallo sketch a meno di non gestirla tempo e luogo.
Da quel poco che ho letto le idee sono poche e ben confuse.
#3864
Ciskopa ha scritto:Da quel poco che ho letto le idee sono poche e ben confuse.

Fa piacere trovare qualcuno che fa autocritica dei propri limiti. :lol:

Per ció che concerne la gestione degli allarmi questi vengono processati per il tempo di campionamento, ovvero valutati dalla sram in tempo reale: se la condizione perdura rimane vera appena cessa si annulla é una semplice istruzione di loop contenuto nello sketch che viene salvato in modo permanente nella memoria flash.
Questo é possibile in quanto tutti gli Atmega presenti in Arduino sono basati sull'architettura Harvard che, a differenza di quella di Newman dei classici PC, prevede una separazione fra la memoria del sistema operativo (eeprom), la memoria impiegata dal programma utente (la Flash) e la memoria per la gestione delle variabili dei dati, che é contenuta nella SRAM del microcontrollore, memoria volatile che permette un numero di scritture praticamente infinito.
Si potrebbe indirizzare i dati anche nella flash ma questa, stando alle fonti ufficiali, é garantita solo fino a 10.000 scritture e quindi meglio essere parsimoniosi. Piuttosto semmai conviene utilizzare una memoria esterna gestita via bus con I2C.
Ma non é il mio caso dato che come detto non ho alcuna necessitá di memorizzare in modo permanente i dati.
#3867
redLed ha scritto:Questo é possibile in quanto tutti gli Atmega presenti in Arduino sono basati sull'architettura Harvard che, a differenza di quella di Newman dei classici PC, prevede una separazione fra la memoria del sistema operativo (eeprom), la memoria impiegata dal programma utente (la Flash) e la memoria per la gestione delle variabili dei dati, che é contenuta nella SRAM del microcontrollore, memoria volatile che permette un numero di scritture praticamente infinito.

Come ho già scritto più volte, non conosco in dettaglio il mondo Arduino, ma da decenni lavoro coi microcontroller (da 6 a 144 pin) e relativi firmware.
Il fatto che gli ATMega adottino l'architettura Harvard, e non la classica architettura Von Neumann, ha poco a che fare con l'impiego pratico delle risorse di memoria.
L'architettura Harvard prevede la separazione totale fra lo spazio delle istruzioni e lo spazio dei dati. E' una "furbata" che permette di svolgere più operazioni per ogni impulso di clock, a patto di accettare due percorsi elettrici distinti verso una memoria che conservi le istruzioni, e un'altra memoria che conservi i dati.
L'alrchitettura Von Neumann prevede che istruzioni e dati possano coesistere in un singolo spazio comune: lo svantaggio e che ogni operazione possa richiedere almeno due "cloccate" (una per il fetch dell'istruzione e una per il fetch dei dati); il vantaggio è che il micro adotti un solo percorso elettrico verso un solo spazio di memoria.
Anche non conoscendo i dettagli dell'implementazione Arduino, dubito che il "sistema operativo" (ammesso che esista) si trovi in uno spazio eeprom. Se i cosiddetti sketch diventano una sorta di "byte code" in stile Java, e quindi vengono interpretati, ci dev'essere un interprete residente nella flash. Se invece gli sketch vengono compilati in un oggetto nativo, a maggior ragione dovranno finire in flash, poiché la serie ATMega, proprio perché in architettura Harvard, non può eseguire da uno spazio dati (assumo che la flash sia lo spazio di programma, e la eeprom, insieme alla SRAM, siano lo spazio dati).
Anche se non è impossibile scrivere in flash durante l'esecuzione, di solito risulta più agevole e conveniente scrivere in eeprom, sia perché questa ha un limite di stress dieci volte maggiore della flash (100000 invece di 10000 cicli), sia perché è accessibile a byte e non previa cancellazione di un'intera pagina.
Infine, come nota personale, vorrei aggiungere che Arduino è una bellissima idea, una bellissima risorsa, un ottimo ausilio per avvicinarsi al mondo dei microcontroller, ma non è la Bibbia e non è la pietra di paragone verso cui confrontare tutto il resto.
redLed ha scritto:Si potrebbe indirizzare i dati anche nella flash ma questa, stando alle fonti ufficiali, é garantita solo fino a 10.000 scritture e quindi meglio essere parsimoniosi. Piuttosto semmai conviene utilizzare una memoria esterna gestita via bus con I2C.

Se proprio vuoi dormire tranquillo e non mettere limiti alla scrittura su memoria non volatile, usa una FRAM, che in teoria, anche aggiornando i dati una volta al secondo, dura più della vita biologica del proprietario / programmatore. :)
redLed ringraziano
#3868
zioelp ha scritto:Anche non conoscendo i dettagli dell'implementazione Arduino, dubito che il "sistema operativo" (ammesso che esista) si trovi in uno spazio eeprom.

Hai perfettamente ragione, leggo ora dal libro di Simone Majocchi che sia l'interprete che le librerie necessarie per l'esecuzione degli sketch sono in una sezione bassa (Boot Section) della stessa flash.

zioelp ha scritto:Infine, come nota personale, vorrei aggiungere che Arduino è una bellissima idea, una bellissima risorsa, un ottimo ausilio per avvicinarsi al mondo dei microcontroller, ma non è la Bibbia e non è la pietra di paragone verso cui confrontare tutto il resto.

La penso in modo identico, potrei utilizzare hardware dedicato al mondo HVAC in cui opero da anni (es: http://climatel.com/climatel-740.html), ma per la mia abitazione trovo molto "figo" :D un sistema dichiaratamente open hardware e open software come Arduino e che soprattutto costa 1/10 e anche meno delle versioni "industrializzate" e poi per certi aspetti, pur con i limiti di un PIC, sono più versatili.
Ad esempio un problema spinoso del mondo HVAC è che esistono numerosi protocolli di comunicazione differenti tra loro. Generalmente i costruttori di caldaie utilizzano OpenTherm, i costruttori di pompe ModBus, i costruttori di pannelli solari VBus, i costruttori di condizionatori aria KNX, i costruttori di termoregolatori 1-Wire e ora ci si sono messi anche i costruttori di valvole termostatiche elettroniche con ZigBee. Per centralizzare questo marasma è necessario installare vari gateway anche solo per ricevere un allarme ogni morte di papa. Con un hardware tradizionale il costo diventa proibitivo mentre con un Arduino e similari il costo si riduce di molto e sicuramente da più soddisfazione per l'impegno comunque necessario. Un pò come confrontare il pane fatto in casa e quello preso dal panettiere.. :D

zioelp ha scritto:Se proprio vuoi dormire tranquillo e non mettere limiti alla scrittura su memoria non volatile, usa una FRAM, che in teoria, anche aggiornando i dati una volta al secondo, dura più della vita biologica del proprietario / programmatore. :)

Pensavo che FRAM e PRAM fossero roba di lusso, ma vedo ora che in effetti il costo è abbordabile: https://www.adafruit.com/product/1895
Vendo

OWON HDS2202S nuovo imballo originale 190.00 eur[…]

Sono comuni interruttori a levetta DPDT. Se le due[…]

Visita il nostro canale telegram