Corso sui microprocessori e microcontrollori., Ovvero come i componenti elettronici possono fare miracoli.

« Older   Newer »
  Share  
robo67
view post Posted on 8/11/2008, 23:34




1° PUNTATA

Come promesso ecco un 3D che dà una prima infarinatura su cosa siano i microprocessori e i loro parenti prossimi: i microcontrollori.

Questo 3D non vuole essere un vademecum sull'utilizzo di un microprocessore, dato che l'argomento sarebbe decisamente troppo vasto, ma vuole fare capire cosa può fare e per che cosa può essere usato.

Innanzi tutto un microprocessore è un componente elettronico prevalentemente digitale (lavora con 2 sole tensioni che solitamente sono 0-0,2V per il cosiddetto livello logico 0 e 4,5-5V per il livello logico 1).
Le tensioni sopra indicate sono quelle normalmente usate dai microprocessori alimentati a 5V; spesso le tensioni di lavoro possono essere anche inferiori (i microcontrollori prodotti da MIcrochip, conosciuti come PIC, possono lavorare solitamente da 2 a 5V).

Il fatto che sia un componente digitale lo porta ad essere equiparabile agli integrati cmos della serie 4000 (4001, 4081, 4017 ecc.) o della serie 74HC (74HC00, 74HC4040 ecc.).
La grossa differenza è che mentre gli integrati digitali classici hanno funzioni ben definite (il 4001 è una quadrupla porta NOR a 2 ingressi, il 4017 è un contatore in sequenza a 10 uscite), il microprocessore/microcontrollore è invece molto più versatile, talmente versatile che quando lo si compra e lo si monta in un circuito ci si accorge che non fa nulla :o: <_< :P
Da questa affermazione si può pensare a questo punto che il microprocessore sia un oggetto inutile e in effetti lo è fino a quando il programmatore (inteso come persona) o aspirante tale dotato di programmatore (inteso come apparecchiatura) e di un pc dotato di apposito software non gli dice cosa deve fare.
Dal momento della programmazione in poi quell'oggetto inerte e apparentemente inutile si trasforma in un qualcosa di vivo (o quasi), un qualcosa capace di prendere delle iniziative e di adattarsi a quello che gli capita attorno (sempre che il programmatore sia stato in grado di scrivere un programma adatto allo scopo).

Praticamente un microprocessore è un oggetto in grado di eseguire, in un tempo brevissimo (si parla di milionesimi di secondo) operazioni tipo "Prendi questo numero, lo sommi a quel numero e metti il risultato là in fondo."
Sta nell'abilità di chi scrive il programma il fatto di rendere il microprocessore "furbo" e "bravo".

Il qui, il là, il questo e il quello di un microprocessore si chiama memoria ed è un qualcosa in grado di memorizzare dati o istruzioni sia in modo permanente sia in modo volatile (che può essere perso quando si spegne il microprocessore).
Il microprocessore è in grado di gestire la memoria, che può essere equiparata ad una cassettiera, dicendo quale cassetto vuole aprire e decidendo inoltre se nel cassetto in questione vuole prelevare oppure depositare qualcosa.
Il cassetto può essere pieno di dati (ovvero i valori di partenza delle varie operazioni e i risultati che ne derivano) oppure di istruzioni (la sequenza delle operazioni che il microprocessore deve effettuare ovvero il programma scritto dal programmatore).
Da questo si ha la distinzione fra memoria dati e memoria programma.
La memoria programma è normalmente di tipo non volatile (permanente) in modo tale da avere la certezza che all'accensione il microprocessore sappia già cosa fare.
La memoria dati può essere sia permanente, per permettere la memorizzazione dei dati che devono essere mantenuti anche spegnendo la scheda (es.parametri di configurazione e di funzionamento), sia volatile, ovvero di transito per i risultati delle operazioni effettuate.

Fino ad ora non ho parlato del 3° blocco importante per il microprocessore: le porte di ingresso/uscita (dette I/O ovvero input/output).
Queste porte, che fanno capo ai piedini del chip, sono quelle che permettono al microprocessore di comunicare col modo esterno: non sarebbe infatti molto utile avere a che fare con un oggetto incapace di ricevere dei dati dall'esterno (tastiera, pulsanti, porte seriali ecc.) e di mostrare il risultato di ciò che ha fatto su display, monitor, led ecc.

Dalla descrizione dei 2 tipi di memoria e delle porte di I/O scaturisce la differenza fra microprocessore e microcontrollore; il microprocessore è semplicemente un supervisore che pilota N chip che hanno ognuno una funzione specifica (memoria dati, memoria programma, porte di I/O), mentre il microcontrollore è sostanzialmente un microprocessore con memorie e porte di I/O al suo interno.
Il microcontrollore è quindi più completo di un microprocessore, infatti normalmente non necessita di chip per le funzioni di supporto (ad esempio la gestione della memoria).


[segue]

Edited by robo67 - 13/11/2008, 22:36
 
Top
robo67
view post Posted on 9/11/2008, 23:27




2°PUNTATA

La potenza dei microprocessori viene indicata da 2 parametri: la frequenza di clock e il numero dei bit.

La frequenza di clock è sostanzialmente analoga alle pulsazioni cardiache di un essere vivente, una sorta di orologio che scandisce il tempo del microprocessore.
Consideriamo di avere scritto un programma in cui il microprocessore deve effettuare 1.000.000 di operazioni per ottenere il risultato da noi desiderato.
Immaginiamo ora che il microprocessore effettui un'operazione ad ogni impulso di clock.
E' chiaro che se il clock è di 1Hz (un impulso ogni secondo) il microprocessore avrà bisogno di 1.000.000 di secondi per giungere al risultato atteso. Dovremo quindi attendere 11 giorni e mezzo per avere il risultato.
Se il clock è di 1KHz i tempi di elaborazione diventeranno 1000 volte più piccoli, mentre col clock a 1MHz il microprocessore ci darà il risultato dopo solo un secondo.

Il secondo parametro è invece il numero di bit. Questo numero si riferisce a quanti bit è in grado di elaborare/memorizzare contemporanemente il microprocessore e, in sostanza, il valore del massimo numero elaborabile.
La maggioranza dei microprocessori/microcontrollori attuali elabora istruzioni e numeri a 8 bit (detti byte); ciò significa che sono in grado di gestire numeri compresi fra 00000000 e 11111111 ovvero fra 0 e 255.
Se per un calcolo il microprocessore deve gestire un numero superiore a 255 l'elaborazione avverrà mediante l'utilizzo di più byte concatenati in modo simile alle nostre unità,decine,centinaia,migliaia ecc.
Ad esempio se il numero da gestire è compreso fra 0 e 65535 occorrono 16 bit (2 bytes), mentre con 24 bit (3 bytes) si raggiunge un numero massimo di 16777215. E così via.
Se un microprocessore a 8 bit deve gestire numeri a 16 bit dovrà gestirli in modo consecutivo, partendo dai primi 8 bit per poi terminare con gli ultimi 8.
E'ovvio che questa gestione in sequenza richiederà il doppio del tempo rispetto a quella di un calcolo con soli 8 bit (a dire il vero considerando anche i riporti/prestiti delle operazioni il tempo di elaborazione sarà più del doppio).
Un microprocessore a 16 bit sarà invece capace di elaborare tutti i 16 bit contemporaneamente.
Ecco perchè a parità di frequenza di clock un microprocessore a 16 bit è più potente di uno a 8 bit.

Nel caso dei microcontrollori i parametri che ne indicano la potenza sono, oltre ai già citati numero di bit e frequenza di clock, anche quelli relativi alla quantità di memoria dati, di memoria programmi e ai dispositivi di I/O disponibili all'interno, dato che, al contrario dei microprocessori, nei microcontrollori queste parti sono già previste all'interno del chip (anche se poi sono talvolta espandibili per applicazioni particolarmente impegnative e gravose).
Se la memoria dati ha una certa dimensione il microcontrollore potrà memorizzare parecchi valori contemporaneamente, permettendo a chi scrive il programma di potere gestire grosse quantità di dati senza impazzire con trucchi di vario tipo o sacrificando il risultato finale.
Una grande quantità di memoria programma permette invece di scrivere programmi anche molto lunghi senza rischiare di riempire prematuramente il microcontrollore.
I dispositivi di I/O sono invece le linee di comunicazione fra il microcontrollore e il mondo esterno.
Possono essere di vario tipo, cominciando dai classici piedini che possono funzionare come uscite verso led, transistor o altri chip.
Questi piedini possono anche funzionare come ingressi da altri chip, da interruttori, da pulsanti ecc.
Oltre a queste linee I/O generiche ce ne sono altre speciali che fanno capo a dei timer, linee per comunicazione seriale o parallela, usb, convertitori analogico/digitali o digitale/analogico, pwm ecc.
Chiaramente tanto più sono numerose queste linee, soprattutto quelle speciali, tanto più il microcontrollore è completo e potente;
tutto ciò che non è previsto come blocco all'interno del microcontrollore può essere eventualmente realizzato/simulato tramite il software o mediante l'aggiunta di dispositivi esterni, ma questa soluzione,oltre ad essere impegnativa da realizzare,pone delle limitazioni e rallenta l'esecuzione del programma.

Il microprocessore è dotato del cosiddetto set di istruzioni, ovvero di una serie di comandi (numeri) che va dalle somme/sottrazioni ai confronti fra 2 numeri,dalle funzioni di incremento/decremento di un numero alla verifica di una determinata condizione.
Scrivendo N istruzioni secondo una certa sequenza è possibile realizzare funzioni che vanno da un semplice lampeggio di un led,operazione possibile con circuiti anche banali, fino a funzioni molto complesse come l'elaborazione di foto e filmati, operazione proibitiva se realizzata tramite un'elettronica dedicata priva di microprocessore.
Il microprocessore non può comunque prendersi delle iniziative, nel senso che è colui che scrive il software a dovere prevedere tutte le possibili condizioni che possono presentarsi al microprocessore stesso e decidere come debba comportarsi in ognuna di esse.
Se si verifica una condizione anomala non prevista che provoca un risultato indesiderato significa che ci si trova davanti al cosiddetto "buco" del software (detto anche "bug").
E' per questo che ogni microprocessore/microcontrollore è dotato di un ambiente di sviluppo che permette di realizzare il programma partendo da 0, di verificarne il funzionamento e di programmare fisicamente il microprocessore stesso.
Praticamente l'ambiente di sviluppo, che quasi sempre consiste in un software su pc ed eventualmente in qualche dispositivo hardware di ausilio, è dotato dei seguenti strumenti:
1) Editor di testo: è un software che permette di scrivere il programma del microprocessore in formato testo, più facilmente comprensibile ed intuitivo rispetto alle istruzioni numeriche eseguibili dal microprocessore.
2) Compilatore: è un software che converte il programma scritto con l'editor di testo in vari files che hanno ognuno una diversa funzione,dalla programmazione del microprocessore alla gestione delle operazioni di ricerca dei bug (procedura di debug).
3) Debugger: è tutto ciò che permette di verificare il corretto funzionamento del programma scritto e la ricerca di eventuali bug.Si va dal simulatore software,con cui tutte le elaborazioni effettuate dal microprocessore possono essere simulate sul video del pc,agli emulatori hardware che,montati sulla scheda finale al posto del microprocessore,lo sostituiscono a tutti gli effetti,con in più il vantaggio di sapere cosa sta realmente accadendo (contemporaneamente all'esecuzione del programma il pc visualizza le varie fasi di esecuzione).
4) Programmer: è il software che permette di caricare il file generato dal compilatore (file compilato) e di riversarlo all'interno del microcontrollore.

I microprocessori/microcontrollori hanno un loro linguaggio di programmazione di base, detto assembler, in cui vengono usati direttamente comandi presenti nel set di istruzioni. L'assembler è il linguaggio meno evoluto, quello più vicino alle esigenze del microprocessore, ma più lontano dalle nostre, quindi meno intuitivo.
Per contro è quello che occupa meno spazio nella memoria programma, è il più veloce ed efficiente (un'istruzione scritta in un altro linguaggio è in realtà tradotta in N istruzioni di assembler, quindi occupa più spazio ed è meno veloce da eseguire).
E' inoltre quello che permette di tenere maggiormente sotto controllo il microprocessore, cosa che però può essere un'arma a doppio taglio perchè può portare ad errori più difficili da scovare.
Per i microprocessori/microcontrollori di fascia medio-bassa (sostanzialmente tutti quelli non usati all'interno di computer) oltre all'assembler vengono usati linguaggi come C e Basic. Per quelli di fascia alta i linguaggi sono parecchi, anche se spesso hanno caratteristiche simili.

[segue]

Edited by robo67 - 13/11/2008, 22:37
 
Top
robo67
view post Posted on 10/11/2008, 23:10




3°PUNTATA
Dopo una (purtroppo) lunga descrizione di ciò che è un microprocessore (scusatemi ma non ho il dono della sintesi) passiamo ora a vedere cosa c'è dentro ad esso.
Ho pensato di prendere come esempio un microcontrollore che conosco bene e che è molto diffuso sia a livello professionale, sia dal punto di vista degli hobbysti: il PIC16F876 prodotto da Microchip

Nella figura sottostante è rappresentato lo schema a blocchi del 16F876.

imageimage

Analizziamo ora le singole parti.

Innanzi tutto al centro dell'immagine c'è il blocco più importante, rappresentato a forma di V, chiamato ALU. L'ALU (abbreviazione in inglese di Unità Aritmetico Logica) è il blocco che, all'interno del microcontrollore, effettua tutte le elaborazioni (calcoli matematici, operazioni logiche come OR, AND, XOR, operazioni sui bit, ecc.). Come si nota c'è una freccia che porta l'uscita dell'ALU (punta in basso della V) verso il registro W, che è chiamato accumulatore e da cui parte una freccia che ritorna all'ALU. Questa schematizzazione rappresenta il legame stretto fra W e ALU, infatti qualsiasi operazione fatta dall'ALU investe anche W, che viene usato come "cassetta delle lettere" per prelevare e/o depositare i dati del calcolo.

L'uscita dell'ALU fa capo ad una freccia ramificata che in alto è segnata come Data bus. Il data bus è la linea che viene attraversata dai dati in transito verso l'ALU e dall'ALU al resto del microcontrollore. Essendo il PIC16F876 un microcontrollore a 8 bit il Data bus è in realtà composto da 8 linee parallele.

Il Data bus raggiunge la maggioranza dei blocchi del microcontrollore, partendo dai blocchi a destra chiamati PORTA, PORTB e PORTC che rappresentano le porte I/O che fanno capo ai piedini del microcontrollore.

Lo stesso data bus fa capo anche ad altri blocchi che sono in realtà delle periferiche speciali: i timer 0,1 e 2 che possono sia funzionare pilotati dal clock del PIC16F876 (funzionando, in questo caso, come veri e propri timer di precisione), sia come contatori di impulsi provenienti dall'esterno e che vengono applicati in determinati piedini.
Si nota poi la USART, ovvero il blocco adibito alla comunicazione seriale con altri microcontrollori o con dispositivi dotati di interfaccia seriale (es. stampanti RS232, PC ecc.)
Vi sono poi i blocchi relativi al convertitore analogico/digitale, che permette di leggere dei valori di tensione applicati a determinati piedini e all'EEPROM, ovvero alla memoria dati non volatile (conserva i dati anche disalimentando il microcontrollore).
A completare le periferiche speciali c'è la Syncronus serial port, adatta a pilotare integrati dotati di bus seriali standard (SPI, microwire e I2C), il blocco CCP1,2 che permette di utilizzare il numero contato dai timer per funzioni speciali (ad esempio per generare un pwm).

Proseguendo con l'analisi dello schema a blocchi si nota il blocco RAM file registers.
Questo blocco è molto importante perchè racchiude tutta la memoria non permanente (volatile) su cui vengono letti o scritti i dati legati alle varie elaborazioni (in gergo chiamate variabili).

Il blocco seguente è lo Status register ovvero una parte di memoria particolare che memorizza i cosiddetti flag di stato, ovvero dei bit per usi particolari, come il carry (bit C) e lo zero (bit Z).
In particolare il carry viene settato (portato a 1) ogni volta che un'operazione aritmetica o logica supera come valore l'ottavo bit (ad esempio sommando il numero binario 10000000 al numero 11111111 si avrebbe il risultato a 9 bit 101111111 dove il bit più a sinistra è contenuto nel carry).
Lo zero viene invece portato a 1 se il risultato dell'operazione aritmetica o logica appena terminata dà risultato 0.
Lo Status register ha al suo interno anche altri bit che non tratterò perchè legati ad un discorso particolarmente complicato.
Il blocco seguente è chiamato FSR register, che è un byte di memoria utilizzabile come indicatore (in gergo puntatore) della parte del RAM file register che deve essere utilizzata per le successive operazioni. Il discorso è abbastanza complicato e non ne parlerò in questa descrizioni generale.
L'ultimo blocco collegato al Data bus è il program counter (PC) che dopo l'ALU è il registro più importante, dato che indica quale posizione della memoria programma (blocco in alto a sinistra chiamato Flash Program Memory) deve essere letta per prelevare il codice della prossima istruzione che deve essere eseguita. Normalmente il program counter avanza di un passo ad ogni istruzione eseguita. Se durante l'elaborazione riceve dal programma il comando di salto (GOTO o CALL dell'assembler) il PC si sposterà di N passi fino a cadere nelle destinazione indicata dal GOTO o dalla CALL), per poi eseguire l'istruzione memorizzata nella nuova posizione.

[segue]

[segue]

Edited by robo67 - 13/11/2008, 22:38
 
Top
maxwell2
view post Posted on 11/11/2008, 12:07




Argomento molto interessante quello dei microcontrollori/microprocessori, robo. :)
Complimenti per le spiegazioni abbordabili.
Mi chiedevo se potevi fare , in seguito , anche delle carrellate sull' impiego pratico dei pic nel settore industriale e , perchè no , hobbistico. ;)
Inoltre mi piacerebbe sapere come sono organizzati, in termini di componenti interni, i pic citati ?
 
Top
view post Posted on 11/11/2008, 20:02
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


sto leggendo tutto quello che stai scrivendo robo,molto interessante,nn per essere terra terra,ma i pic mediamente che costi hanno?
 
Top
robo67
view post Posted on 11/11/2008, 20:12




Impiego pratico dei pic? Beh, per darti un'idea è come se mi chiedessi a cosa serve un transistor: praticamente a qualsiasi cosa :)

Io i pic li ho usati per oggetti come le luci del presepe, le centraline di luci per le feste, ma li uso correntemente anche per schede da inserire dentro macchine automatiche, distributori di cibi caldi, sensori di livello, elettronica per linee di confezionamento ed altre applicazioni più o meno strane. Praticamente in questo momento è l'unico microcontrollore che uso, anche se in passato mi è capitato di usare dei "signori" microprocessori: lo Z80, il uPD78C10 della NEC, 2 vere e proprie "bombe". Ho inoltre usato l'80C51 e derivati, che però non ho mai amato perchè "legnoso" e il 6502/6510 programmato all'interno del C64 (Law, mi aspetto tue reazioni a riguardo :lol: :lol: )

CITAZIONE
Inoltre mi piacerebbe sapere come sono organizzati, in termini di componenti interni, i pic citati

Non ho capito cosa intendi per componenti interni.

 
Top
robo67
view post Posted on 12/11/2008, 21:17




CITAZIONE
sto leggendo tutto quello che stai scrivendo robo,molto interessante,nn per essere terra terra,ma i pic mediamente che costi hanno?

Dipende da quali vuoi usare.
Il PIC12F675 (8pin di cui 6 di I/O) costa circa 1€ + IVA
Il PIC16F876 (28 pin di cui 21 di I/O) costa circa 4€ + IVA.
Comunque se vai su Farnell, RS o Distrelec ne trovi diversi modelli anche venduti a pezzo singolo.
Sicuramente se ne trovano anche nelle fiere dell'elettronica, magari montati su scheda, su ebay e in un po' di altri posti on line
 
Top
robo67
view post Posted on 12/11/2008, 23:38




3°PUNTATA

Riprendiamo ora il discorso sui microprocessori e microcontrollori.

Come già spiegato i microprocessori sono dotati del program counter che viene usato per indicare quale posizione del programma deve essere letto ed eseguito.
Il program counter è quello che in linguaggio informatico viene chiamato puntatore, ovvero un indicatore della posizione dove deve essere letta l'istruzione da eseguire.
Considerando la memoria programma come un libro il program counter è un segnalibro che andiamo a spostare di volta in volta per sapere dove eravamo arrivati durante la lettura.
Le pagine del libro sono i cosiddetti indirizzi. Ad ogni indirizzo è abbinato un numero di pagina che lo identifica in modo univoco da tutte le altre pagine.
Quello che c'è scritto nella pagina è invece il codice dell'istruzione che deve essere eseguita.
Praticamente il program counter sceglie il numero di pagina e apre il libro a quella pagina.
L'instruction reg è quello che legge il contenuto della pagina scelta dal program counter e la passa all'Instruction Decode & Control che la interpreta e la esegue.

L'architettura program counter->memoria programma si ripresenta anche nel caso della memoria dati (che nel pic è chiamata RAM File Register).
In questo caso si ha che in ogni indirizzo di RAM è possibile effettuare una lettura o una scrittura. L'equivalente del program counter ma riferito alla memoria dati è il registro chiamato Addr MUX che riceve le istruzioni dall'Instruction reg e decide in quale indirizzo della RAM deve andare a leggere o scrivere.

Per avviare correttamente un microprocessore/microcontrollore occorre che venga effettuata la procedura di reset.
Il reset è un'operazione che porta determinati registri del RAM File Register a valori ben definiti. Fra questi registri il più importante è certamente il program counter, che nel caso del pic, viene resettato al valore 000.
000 è appunto l'indirizzo della Flash Program Memory in cui deve essere memorizzata la prima istruzione del programma, affinchè il pic la interpreti e possa proseguire con l'esecuzione delle restanti istruzioni.
Se nell'indirizzo 000 non esiste un'istruzione valida il programma non verrà eseguito correttamente.

Vi sono poi anche altri blocchi speciali dei quali occorre citare i 2 più importanti: Timing generator e Watch-dog.
Il Timing generator è la sezione che genera il clock che sincronizza tutto il microcontrollore. Nel PIC ci sono varie modalità di clock; si va dall'oscillatore RC, che come dice il nome richiede solo una coppia resistenza+condensatore, agli oscillatori LP, XT e HS per quarzi di vario tipo e frequenza. Alcuni PIC hanno anche un oscillatore interno a frequenza fissa. Altri ancora sono dotati di oscillatori ancora più vari e sofisticati. I vari oscillatori sono selezionabili durante la programmazione del chip e devono essere corenti con l'hardware della scheda in cui il microcontrollore deve essere montato (quarzo + 2 condensatori per LP, XT e HS, resistenza + condensatore per RC ecc.).

Il watch-dog è invece un dispositivo di protezione; si tratta di un timer azzerabile da software la cui uscita resetta il microcontrollore.
Se il software all'interno del pic non azzera ciclicamente il timer del watch-dog trascorsi 18msec (tempo fisso nel caso dei pic della serie 16FXXX) il timer resetta il microcontrollore, riavviando il programma.
Questo timer dà quindi la certezza che se a causa di qualche anomalia l'esecuzione del programma dovesse ripetersi all'infinito in un punto ben preciso (loop chiuso), il mancato azzeramento del watch-dog timer provocherebbe il riavvio del programma stesso.

[segue]

Edited by robo67 - 13/11/2008, 22:39
 
Top
view post Posted on 13/11/2008, 09:01
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


Ecco la mia "reazione"... :lol:

Ho usato il 6502 in una delle prime macchine automatiche che credo siano mai state costruite in Italia nel 1981... Ancor prima che venisse usato nel C64... e fin da quella volta mi è rimasto indigesto. Ha solo due registri... e con quelli devi fare tutto. Amen. Le istruzioni sono abbastanza potenti perchè anno degli indirizzamenti di memoria che l'8080A-Z80 fanno solo tramite istruzioni più complesse riducendo codice e velocità di elaborazione, ma se si considera che il 6502 ha un indirizzamento di i/o di soli 8 bit, mentro lo Z80 di 16 bit, e una frequenza di clock di 1Mhz mentre lo Z80 minimo di 4Mhz... e anche 12Mhz nelle versioni successive e anche per lo Z80180... per non parlare del 16 bit Z80280... il paragone in velocità e semplicità non regge. Comunque, conoscevo l'assembler anche di quella piattola del 6502, e anche le sue periferiche rognose. <_<

Dai Robo, continua così che stai facendo un capolavoro. ;)
 
Web  Top
Hellblow
view post Posted on 13/11/2008, 10:10




Io ho usato i PIC interfacciandoli con USB a software scritto in visual basic e funzionano egregiamente. L'unico difettuccio e' che dispongono di una potenza di calcolo che per alcune applicazioni e' insufficiente. Ma e' anche vero che hanno un costo molto contenuto. Ho trovato che in rete un argomento molto gettonato e poco trattato e' la comunicazione fra piu' pic per distribuire il carico di un certo lavoro. In pratica una sorta di sistema multiprocessore fatto con i microcontrollori! Sembra banale usare piu' microcontrollori comunicanti fra di loro ma per certe applicazioni diventa una cosa importante. Ad esempio se volessi realizzare un sistema dove un microcontrollore movimenta un certo apparato che deve pero' essere monitorato (per esempio temperatura dei motori che fanno muovere il sistema e dell'elettronica) allora l'uso di un secondo microcontrollore dedicato e' giustificato. In questo caso il secondo microcontrollore potrebbe chiedere al primo di interrompere le funzioni nel caso in cui qualcosa non vada come previsto ricorrendo ad un interrupt.
Ho a casa qualche pic a 16 bit ed a 32 bit ma ancora non ho provato a programmarli piu' che altro perche' devo studiarmi esattamente come connetterlo al programmatore, ammesso che quello che ho vada bene. Comunque la programmazione dovrebbe essere sempre di tipo in circuit per cui non dovrebbero esserci problemi in teoria.

Ho anche visto che esiste un microcontrollore molto interessante: parallax propeller. Si tratta di un processore multicore con 8 core a 20 MHz ciascuno che possono condividere le stesse risorse tramite un hub hardware molto veloce. Questo tipo di processori semplificano molto l'elettronica qualora siano richiesti molti calcoli e pochi pin di I/O.

In questi giorni dovrebbero arrivarmi dei microcontrollori a 32 bit di freescale che sono delle bestiaccie. Arrivate anche le memorie SRAM da 4 M con word di 18 bit e da 2 M con word da 36 bit. In tutto 72 megabit! Delle bestioline che dovro' usare per un'implementazione hardware di una rete neurale a cui lavoro. Quindi frequentero' molto questa discussione interessante ;).
 
Top
view post Posted on 13/11/2008, 10:40
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


Il sistema CPU a multiprocessore è impiegato intensivamente da alcuni produttori di PLC di fascia alta. La CPU di quei sistemi è un modulo che fa solo l'unità di processo, ma dentro ci sono da tre a cinque processori.
Uno è il processore di comunicazione, serve a gestire le comunicazioni da e verso l'esterno. Una linea è di solito libera per le comunicazioni con un PC per la programmazione. Una linea , a volte anche due serve per le periferiche remote, di solito un bus di campo, ed il controllo delle funzioni di bus da e verso i moduli locali in modo parallelo a 8, 16 o 32bits.
Un altro è il processore che si occupa della matematica, qualche volta, nelle macchine più veloci è assistito da un coprocessore aritmentico in virgola mobile.
Un altro ancora è di solito un ASIC che si occupa delle operazioni a singolo BIT.
Un processore che effettua la gestione degli I/O dalla memoria dei moduli alla memoria del modulo CPU.
Ed infine un controllore che esegue il programma macchina assegnando agli altri processori i loro compiti e passandogli le parti che gli competono. Tutti questi processori hanno dei buffer RAM locali, e la memoria di sistema in share con gli altri. Spesso si usano RAM del tipo dual port come le video RAM, per poter scrivere e leggere in contemporanea in real time, senza dover attendere lo sharing degli altri processori.
È un pò un casino elettronico rispetto ad una singola CPU, ma questo consente di avere tempi di risposta di 0.1mSec per ogni Kword di programma in RAM. Ed in 1 Kword di ram di questi PLC ci sta veramente il mondo perchè sono ottimizzati al massimo. Una cosa del genere non si riesce ad ottenere neppure impiegando il più veloce PC oggi disponibile con i centrino dual core...
 
Web  Top
view post Posted on 13/11/2008, 17:59
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


CITAZIONE
Il watch-dog è invece un dispositivo di protezione; si tratta di un timer azzerabile da software la cui uscita resetta il microcontrollore.
Se il software all'interno del pic non azzera ciclicamente il timer del watch-dog trascorsi 18msec (tempo fisso nel caso dei pic della serie 16FXXX) il timer resetta il microcontrollore, riavviando il programma.
Questo timer dà quindi la certezza che se a causa di qualche anomalia l'esecuzione del programma dovesse ripetersi all'infinito in un punto ben preciso (loop chiuso), il mancato azzeramento del watch-dog timer provocherebbe il riavvio del programma stesso.

questo errore esce spesso sul laser da taglio dove lavoro, c'e' stato un periodo che ci ha fatto impazzire, nessuno sapeva cosa era!! forse era una errata programmazione bahh!!!

robo,pensavo costassero molto di piu'!!
ma con i pic per esempio puoi programmarli per fare una serie di operazioni che poi visualizzi x esempio su display? senza dover fare calcoli a penna e carta?
un mio amico liutaio una volta mi ha chiesto se potevo costruire un baracchino x misurare la velocita del suono in vari tipi di legno,io una piccola idea l'avrei avuta,ma dopo avrei dovuto
fare dei calcoli a mano,un pic mi svolgerebbe queste operazioni? se gli dico es:da questo dato (nn so una frequenza) gli sommi x,poi il risultato gli togli y,poi me lo visualizzi,lui lo fa?
so che sono domande che ti faranno cascare le braccia e anche altro,pero' sono completamente a zero,ma mi stanno stuzzicando il cervello!!!
 
Top
gyppe
view post Posted on 13/11/2008, 19:32




Hellblow, ci dedichiamo anche alla neurocomputazione? Azz, interessante, molto interessante :)

Gila, eccccerrrto che si pò fà :)
Se programmi in assembler è abbastanza difficile fare calcoli complessi, almeno per me, ma usando un compilatore hai a disposizione molte funzioni per calcoli complessi, comprese tangenti, coseni, radici, etc.
 
Top
robo67
view post Posted on 13/11/2008, 22:35




CITAZIONE
Io ho usato i PIC interfacciandoli con USB a software scritto in visual basic e funzionano egregiamente

Io non ho mai realizzato nulla con la porta USB, anche perchè lato PC con Visual Basic non avevo nessuna libreria/driver per gestirla.
Tu quale sistema hai usato?

CITAZIONE
Ho trovato che in rete un argomento molto gettonato e poco trattato e' la comunicazione fra piu' pic per distribuire il carico di un certo lavoro. In pratica una sorta di sistema multiprocessore fatto con i microcontrollori! Sembra banale usare piu' microcontrollori comunicanti fra di loro ma per certe applicazioni diventa una cosa importante

Io ho usato un sistema a multiprocessore circa una decina di anni fa. Si trattava di una scheda che colloquiava col PC e che gestiva degli eventi lenti, mentre quelli veloci erano gestiti da altri microcontrollori in moduli slave che comunicavano col master tramite bus I2C.
In realtà i sistemi multiprocessore sono realizzabili, tramite i PIC, usando le porte seriali sincrone SPI presenti sulla porta C oppure usando la linea CAN bus (che però non ho mai usato).
Il problema è studiare bene la distribuzione dei compiti, onde evitare inutili perdite di tempo.

CITAZIONE
fare dei calcoli a mano,un pic mi svolgerebbe queste operazioni? se gli dico es:da questo dato (nn so una frequenza) gli sommi x,poi il risultato gli togli y,poi me lo visualizzi,lui lo fa?

Solo se gli fai il programma giusto!! :lol: :lol:
A parte gli scherzi quello è un tipico utilizzo di un microcontrollore di potenza medio-bassa (come può essere il PIC16F876).
Circa 2 anni fa realizzai per un cliente un data-logger per impieghi medici dotato di cella di carico wireless che comunicava col data-logger.
Il data logger a sua volta comunicava via bluetooth con una stampante o con un pc dotato di apposito software.
L'apparecchiatura era in grado di registrare la variazione di peso, visualizzando alcuni dati sul display alfanumerico a 32 caratteri, calcolando dati come variazione istantanea, variazione media, ecc. e inviando alla stampante i grafici relativi al peso rilevato e alla variazione di peso.
Il tutto con un doppio microcontrollore (un PIC16F876A per la comunicazione con la cella di carico wireless e un PIC18F4620 per la gestione di tastiera, display, stampante, memorizzazione dei dati più altre funzioni di supporto.

In genere se ti accontenti di calcoli con numeri interi il discorso è abbastanza semplice, mentre se vuoi usare numeri a virgola mobile ti conviene usare, come dice Gyppe, linguaggi a livello più alto, come il C o il basic (meglio il C, soprattutto con la serie 18Fxxxx che è ottimizzata per questo linguaggio).

 
Top
Hellblow
view post Posted on 13/11/2008, 23:04




QUOTE
Io non ho mai realizzato nulla con la porta USB, anche perchè lato PC con Visual Basic non avevo nessuna libreria/driver per gestirla.
Tu quale sistema hai usato?

Praticamente mi sono riscritto le routine basandomi pero' sul lavoro di un altro tizio XD ( a forza di riadattamenti e notti insonni su quel codice alla fine ci sono riuscito). Ho perso parecchio tempo perche' la gestione dell'usb e' parte integrante del programma in pratica. Non c'e' stato modo di usare librerie purtroppo. Se ritaglio un po' di tempo posto qualcosina :)
Java sembra invece che fornisca librerie per usb. Prima o poi ci metto le mani.

QUOTE
Il problema è studiare bene la distribuzione dei compiti, onde evitare inutili perdite di tempo.

Eh gia' io mi ritrovo nella situazione di dover fare dialogare ben 6 microcontrollori fra loro in pratica :S Spero di snellire molto l'hardware ma la cosa la vedo complessa piu' che altro per il numero di pin. Calcola che devo pilotare memorie sincrone SRAM da 4M*18 il che significa che parecchi pin voleranno via solo per il bus indirizzi e dati.
 
Top
1377 replies since 8/11/2008, 23:34   22611 views
  Share