Micocontroller ovvero?

Salve forum, ho una domanda per voi forse un pò strana/stupida.
Vorrei capire come funziona un microcontroller(atmel,pic) etc non intendo come si carica un sketch come si collegano i pin etc ma proprio a livello logico come è concepito ovvero come fa a elaborare istruzioni etc come fa a “ragionare” capisco che legge i valori dalle porte etc ma come fà praticamente? come può un pò di silicio etc a funzionare cosi? è possibile anche se stupido creare un microcontroller da 0 per capire come funziona la sua struttura?

Il microcontrollore è a tutti gli effetti un microcomputer. All'interno del chip ci sono diverse componenti che trovi normalmente presente nei vecchi computer ad 8 bit degli anni '80:

  • hai una CPU, che è il "cervello" del microcontrollore che esegue il codice
  • hai alcune memorie: Flash per il codice utente (una volta erano EPROM e prima ancora PROM) e RAM per le variabili del programma; alle volte anche una EEPROM per dati che non devono sparire con lo stacco dell'alimentazione
  • hai diverse periferiche tra cui ingressi/uscite per poter pilotare componenti esterni, ingressi analogici per eseguire delle letture, timer per generare segnali a particolari frequenze, moduli di comunicazione (seriale, I2C ecc) ed altro

E' un prodotto "complesso", anche se apparentemente può non sembrarlo. Pensa che i datasheet dei microcontrollori più complessi superano le 1000 pagine.

leo72:
Il microcontrollore è a tutti gli effetti un microcomputer. All'interno del chip ci sono diverse componenti che trovi normalmente presente nei vecchi computer ad 8 bit degli anni '80:

  • hai alcune memorie: Flash per il codice utente (una volta erano EPROM e prima ancora PROM) e RAM per le variabili del programma; alle volte anche una EEPROM per dati che non devono sparire con lo stacco dell'alimentazione
  • hai diverse periferiche tra cui ingressi/uscite per poter pilotare componenti esterni, ingressi analogici per eseguire delle letture, timer per generare segnali a particolari frequenze, moduli di comunicazione (seriale, I2C ecc) ed altro

E' un prodotto "complesso", anche se apparentemente può non sembrarlo. Pensa che i datasheet dei microcontrollori più complessi superano le 1000 pagine.

Microcontrollore - Wikipedia

Fino a qui diciamo che ci arrivo la ram come memorizza la memoria etc i vari stati ovvero 0 e 1 gli indirizzi di memoria etc
ma e qui che non capisco

  • hai una CPU, che è il "cervello" del microcontrollore che esegue il codice
    esegue il codice come fà?come fa a capire quello che gli dico di fare?in che modo?

Per comprendere a livello logico il funzionamento devi avere delle basi di "reti logiche", ovvero di come è possibile implementare delle funzioni partendo da delle semplici porte che implementano funzioni booleane (es. AND, NOT, OR).

Ad esempio un sommatore ad un bit è semplicemente la porta XOR se non consideriamo il riporto, una CPU è più complessa ed è composta di alcune parti (es. ALU, DataPath, etc.. che prese singolarmente non sono così complicate come la CPU intera, perlomeno nel principio)

Se vuoi scendere a livello ancora più basso e capire come funzionano le porte logiche devi scendere al livello elettronico, ad esempio la funzione booleana AND può essere implementata anche con dei diodi (http://www.play-hookey.com/digital/experiments/dtl_a2o2i.html), le moderne famiglie logiche sono implementate con coppie di transistor NMOS e PMOS (la cosidetta CMOS)

Per capire come funzionano i diodi, i transistor, etc.. bisogna scendere al livello fisico e servono basi di chimica e fisica.
Con una laurea in Ingegneria dovresti capire tutto senza problemi

Ciao

Guarda per farti capire meglio a livello logico come può funzionare una CPU esiste un progetto chiamato MCPU, prova a leggere e vedere gli schemi del pdf di documentazione Overview :: MCPU - A minimal CPU for a CPLD :: OpenCores ignorando il codice VHDL che in sostanza serve per descrivere l'hardware da sintetizzare su delle logiche programmabili.

Ti mostro lo schema RTL (quindi a livello logico) dell'hardware del progetto che ho sintetizzato tramite un sintetizzatore VHDL (tramite Quartus e CPLD Altera EPM3064)

Come puoi ben vedere ci sono dei multiplexer, dei buffer, dei comparatori, degli adder e dei flip-flop (unità base di memoria che memorizzano 1 bit) che assieme costruiscono la CPU che puoi trovare ben descritta nel PDF del sito

Spero di averti fatto capire un pochino come realizzare "la magia"
Ciao

Sto aspettando che mi approvino l'account per accedere alle informazioni però ora mi è tutto un pò più chiaro in fondo esegue delle operazioni semplici(immagino a velocità molto elevate).
E' semplicemente assurda la complessita che si trova alla base di tecnologie che ora noi utilizziamo senza neanche sapere come funzionano,costruire ora un processore di alto livello partendo da zero sarebbe quasi assurdo.
Ti ringrazio per le risposte che mi hai dato,sai molte persone utilizzano una cosa o imparano a utilizzarla senza la cuoriosità di sapere come è stata fatta,proggettata e realizzata io invece ragiono in maniera opposta cerco di capire nei minimi particolari come è fatta.
Purtroppo ognuno di noi ha i propri limiti e difficile avere contemporaneamente conoscenze fisiche,chimiche,elettroniche,informatiche.

Ti allego il PDF della documentazione se non riesci a scaricarlo

mcpu-doc.pdf (165 KB)

flz47655:
Ti allego il PDF della documentazione se non riesci a scaricarlo

Grazie mille!

Madwriter:
Fino a qui diciamo che ci arrivo la ram come memorizza la memoria etc i vari stati ovvero 0 e 1 gli indirizzi di memoria etc
ma e qui che non capisco

  • hai una CPU, che è il "cervello" del microcontrollore che esegue il codice
    esegue il codice come fà?come fa a capire quello che gli dico di fare?in che modo?

A livello di logica, esiste un PC, ossia un registro che si chiama Program Counter, che altro non è se non un indice che punta alla cella di memoria Flash che contiene l'istruzione da eseguire.
Ogni istruzione è memorizzata in formato di codice macchina, ossia con op-code che indicano al decodificatore interno del micro che cosa effettivamente deve fare. Il programma in codice macchina viene generato dal compilatore che lo genera dallo sketch in linguaggio Arduino che scrivi nell'IDE.

leo72:

Madwriter:
Fino a qui diciamo che ci arrivo la ram come memorizza la memoria etc i vari stati ovvero 0 e 1 gli indirizzi di memoria etc
ma e qui che non capisco

  • hai una CPU, che è il “cervello” del microcontrollore che esegue il codice
    esegue il codice come fà?come fa a capire quello che gli dico di fare?in che modo?

A livello di logica, esiste un PC, ossia un registro che si chiama Program Counter, che altro non è se non un indice che punta alla cella di memoria Flash che contiene l’istruzione da eseguire.
Ogni istruzione è memorizzata in formato di codice macchina, ossia con op-code che indicano al decodificatore interno del micro che cosa effettivamente deve fare. Il programma in codice macchina viene generato dal compilatore che lo genera dallo sketch in linguaggio Arduino che scrivi nell’IDE.

Si ma fino a qui già c’ero e quello che e’ indicato nel pdf che mi mancava ora sto cercando di capirlo :slight_smile: (un consiglio scaricalo e’ molto interessante)

Aggiornamento:appena finito di leggere ho di certo le idee più chiare,sarebbe bellissimo costruire un microcontroller anceh banalissimo ma qui mi sa che non si trova niente per il DIY ]:smiley:

Per me se vuoi capire come funziona un microcontrollore ti consiglio di incomicniare a programmare in assembler, questo è il mio consiglio capisci che anche un programma banale come il blink in fondo in fondo non lo è :smiley:

Lucailvec:
Per me se vuoi capire come funziona un microcontrollore ti consiglio di incomicniare a programmare in assemblerassembly, questo è il mio consiglio capisci che anche un programma banale come il blink in fondo in fondo non lo è :smiley:

Assembler è un programma che trasforma il sorgente in codice macchina, assembly è il linguaggio con cui si scrive il software.
E' la stessa differenza che c'è fra voltaggio e tensione: il primo è il nome comune ma sbagliato, il secondo è quello giusto.

è stata la mia rovina lasciare l'universita e lo è stata ancora di più lasciarla mentre stavo seguendo il corso di calcolatori informatici :drooling_face:

Non é impossibile,la cpu di esempio l'ho implementata senza molti problemi.. sono veramente poche righe di vhdl,la board con 10 euro nemmeno la puoi costruire http://www.electroit.tk/index.php/topic,175.0.html e puoi riprogrammarla molte volte.
Imparando l'assembly non impari come funziona a livello hw logico una cpu ma é un'inizio,per andare oltre segui quello che ti ho detto ciao
ps riprendi pure l'uni tanto c'é poco lavoro

flz47655:
Non é impossibile,la cpu di esempio l'ho implementata senza molti problemi.. sono veramente poche righe di vhdl,la board con 10 euro nemmeno la puoi costruire http://www.electroit.tk/index.php/topic,175.0.html e puoi riprogrammarla molte volte.
Imparando l'assembly non impari come funziona a livello hw logico una cpu ma é un'inizio,per andare oltre segui quello che ti ho detto ciao
ps riprendi pure l'uni tanto c'é poco lavoro

Grazie mille aggiunto ai progetti da fare :wink:

ps riprendi pure l'uni tanto c'é poco lavoro

su questo però devo dissentire :wink:

E' semplicemente assurda la complessita che si trova alla base di tecnologie che ora noi utilizziamo senza neanche sapere come funzionano...

E pensa anche che tutto questa storia della "cpu" e delle "alu" è solo uno dei possibili "paradigmi" alla base del calcolo numerico, il paradigma più antico, detto della "macchina RAM" (dove in questo la M non sta per memory ma per "machine") Macchina RAM - Wikipedia.
La bellezza di questo modello è che se un qualsiasi calcolatore "RAM" di qualsiasi potenza può eseguire un programma di qualsiasi complessità, allora lo stesso programma potrebbe essere eseguito anche avendo a disposizione solo un nastro di carta, una penna, e tanto ma taaaaanto tempo :slight_smile: Ma su questo potresti anche cercare qualche informazione su un signore che si chiamava "Turing" :slight_smile: Macchina di Turing - Wikipedia
Sulla "macchina RAM" si basa la architettura di von Newman Architettura di von Neumann - Wikipedia tipica dei moderni calcolatori.

è stata la mia rovina lasciare l'universita e lo è stata ancora di più lasciarla mentre stavo seguendo il corso di calcolatori informatici

Infatti tutti gli studenti di informatica (o ing.informatica) in qualunque corso di "Architettura degli eleboratori" (dove il buon Tanenbaum troneggia con il suo celeberrimo testo omonimo) studiano il MIC-1, una architettura didattica dove si studia a fondo il funzionamento di un calcolatore a modello RAM; in rete ci sono centinaia di simulatori.

dalubar:
studiano il MIC-1, una architettura didattica

Intendi questa?

Non la conoscevo :sweat_smile:

Esattamente! :slight_smile:
Su quello schema gli studenti studiano un linguaggio assembly che ha molto in comune con pseudo codice di Java.
Inoltre si possono scrivere “veri” programmini il linguaggio macchina che girano su simultatori java anche molto simpatici da vedere (con la modalità “step-by-step” che ti fa vedere tutti i passaggi dei dati nei vari blocchi, nei vari cicli macchina) :smiley:

dalubar:
Esattamente! :slight_smile:
Su quello schema gli studenti studiano un linguaggio assembly che ha molto in comune con pseudo codice di Java.
Inoltre si possono scrivere "veri" programmini il linguaggio macchina che girano su simultatori java anche molto simpatici da vedere (con la modalità "step-by-step" che ti fa vedere tutti i passaggi dei dati nei vari blocchi, nei vari cicli macchina) :smiley:

Azz, io ho imparato l'assembly 65xx (e poi quello x86) semplicemente disassemblando i programmi, senza avere un libro sottomano ma andando a "logica", cercando cioè di interpretare le istruzioni mnenoniche e capire cosa facessero in base al loro nome :sweat_smile:. Solo in un secondo tempo ho acquistato un libro, ma più che altro per avere indicazioni sull'HW della macchina perché era difficile "andare a naso" per trovare a cosa puntassero le ruotine in pagina 0 del mio C16 o quali erano gli interrupt da chiamare sul mio PC XT per fare certe "cattiverie" ]:smiley:

Azz, io ho imparato l'assembly 65xx (e poi quello x86) semplicemente disassemblando i programmi, senza avere un libro sottomano ma andando a "logica"...

Come ormai avrai capito, noi due abbiamo avuto lo stesso "insegnante"... :wink: