mercoledì 20 aprile 2016

Introduzione:

Se siete alle prime armi con le MCU vi consiglio di acquistare un buon libro base sulla programmazione in MikroBasic.
Ve ne posso indicare uno (premetto non ho accordi con l'autore) di quelli che ho letto all'inizio del mio percorso formativo.
Questo è il passo fondamentale da fare prima di cimentarsi nell'universo Web nel quale troverete di tutto ed avere già una buona infarinatura vi permette di evitare di perdere tempo in forum inutili dove vengono pubblicate cose non verificate e non funzionanti, creando nella vostra testa solamente confusione.

PIC MCU (MicroController Unit)



Blog Scritto da: Leonardo Moretti

Concludo col dire che tutto quello pubblicato nel blog è frutto di studio su libri, web e di esperienza di auto costruzione , non verranno trattati argomenti di altri autori di mia conoscienza anche perché sarebbe inutile ripetere nozioni già trattate da altre fonti.

Non vi fate scoraggiare se spesso i forum non vi aiutano a risolvere tutti i problemi, tenete conto che chi naviga nei forum sta imparando come voi ; e purtroppo chi le cose le sa non è sempre disposto a condividerle con voi, non vi fate scoraggiare ed andate avanti perché i risultati arriveranno.

Introduzione:
Cosa è una  MCU ? Un microcontrollore, una specie di Micro Calcolatore completo, ossia un Circuito integrato al cui interno esiste una CPU  una ALU, porte PIO, registri di controllo, un clock, un comparatore, una RAM, ed una rom dove appoggiare dati ed il programma che lo farà funzionare.
A che cosa serve? Per creare moltissimi progetti digitali es. Oscillatori, controlli di qualsiasi tipo (irrigatori, termostati crepuscolari, stufe e caldaie), strumenti (volmetri ,amperometri, generatori funzioni, oscilloscopi), applicazioni mediche, insomma tutto quello che deve essere controllato.


Materiale necessario per iniziare ad imparare:



  •  Un Buon Programmatore: Il Pick Kit 3 (che non vi da mai errori)


  •  Una Scheda Madre ovvero Scheda di sviluppo dove poter testare 
  la funzionalità del vostro codice.
  Se avete dimistichezza con il disegno circuitale (Eagle, DipTrace, Ki Cad)
  potrete costruirvene una di vostro gradimento, anche perchè quelle che ho
  trovato io funzionavano soltanto con livelli logici Pull-Up ossia
  il livello 1 era 0 volt e lo 0 logico erano i 5V, antipatico per chi sta
  imparando e non solo.  


Oppure Auto costruita:




  • Un buon Compiatore Editor Io vi consiglio Vivamente
  il  MikroBasic Pro Compiler  oppure il MikroC

lunedì 18 aprile 2016

6 

ALCUNI PROGETTI CON IL PIC 8-PIN 12F683 


TRASMISSIONE INFRAROSSO RC5 PER TELECOMANDI: (12F683)


RC5 è uno standard di trasmissione infrarosso per sistemi in ricezione e trasmissione comandi per ogni tipo di dispositivo elettronico telecomandato. Ce ne sono diversi di standard trasmissivi ad infrarossi uno di questi è appunto RC5 , altri sono Sony SIRC e NEC.
Il seguente progetto è testato e funzionante ed è completo di sistema di trasmissione e ricezione oltre che dal modulino di ricezione. (in configurazione Pull-Up)
L'autore originale non è il sottoscritto ma mi sono occupato di tradurre il codice in Mikrobasic per un modello di MCU pic differente dall'originale (introvabile dalle mie parti) ma molto simile.

TRASMETTITORE  INFRAROSSO RC5:
Di seguito vi riporto lo schema a blocchi di questa piccola MCU a 8 Mhz.









E' stata scelta una MCU piccola perché servivano solamente 4 o 5 tasti per controllare il sistema ricevente e soprattutto un modello di MCU che avesse nel proprio interno il modulo PWM. (modulatore a frequenza ad impulsi) 
Per il resto la piccola MCU è uguale alla sua gemella 16F675 ; di seguito riporto subito lo schema elettrico del Sistema trasmissivo IR con il relativo Codice:

l'intero Progetto del Trasmettitore (standard RC5) con il relativo codice lo si può scaricare dal link di Google Drive qui:




RICEVITORE INFRAROSSO RC5:
Il ricevitore allo stesso modo è stato realizzato utilizzando un modello analogo di Controllore PIC (12F683) ma non è escluso si possa usarne un altro con più piedini (anche senza PWM interno) a patto che anche il programma sia modificato e personalizzato in base alla MCU usata.
Di seguito verrà riportato lo schema del sistema del ricevitore con relativo Modulino di ricezione a parte , in configurazione Pull Up , è importante questa configurazione perché il programma è stato scritto per ricevere i dati con i livelli logici invertiti. (livello 1 = 0 Volt mentre il livelo 0 = +5V)

Schema elettrico del Sistema di Ricezione IR



NB: la parte di sinistra (LA RESISTENZA R1 100Ohm , IR1 Diodo Led Trasmettitore ed il ponte j3) la si può cancellare dato che non è necessaria al progetto dato che voi in questo caso dovrete solamente ricevere l'informazione infrarossa dal ricevitore.

l'intero Progetto del Ricevitore (standard RC5) con il relativo codice lo si può scaricare dal link di Google Drive qui:

Ricevitore Infrarosso RC5

//=========================//
Pagina Scritta da Leonardo Moretti

venerdì 1 aprile 2016

ALCUNI LINK UTILI ALLO STUDIO



PRIMI PROGETTI CON IL PIC 18-PIN 16F88   Parte 2 

SCHEDA AUDIO AD4 WTV-020-SD PILOTATA DALLA MCU:16F88

Il seguente progetto consiste nel far suonare alcuni suoni o brani memorizzati nella schedina Mini-SD (si raccomanda SanDisk 2gb) ospitata dalla scheda audio WTV-020-SD.
La qualità di questi suoni non è alla pari di un brano mp3 infatti più che lettori musicali questa scheda viene usata per far parlare i Robot, i Contapassi, gli altimetri per i parapendii ;insomma tutti quei progetti dove non è possibile leggere un display LCD per esempio.

Il motore principale del programma è racchiuso nella funzione Wtv020_SendCommand(dim commando as word); Essa infatti si occupa di sincronizzare i due segnali CL(clock) e DA(dati) della trasmissione seriale rendendo possibile il corretto funzionamento della scheda audio.
In realtà i pin della MCU coinvolti sono in totale quattro:
RS(signal reset) sul piedino RA1, CL(clock) sul piedino RA2, DA(Dati) sul pin RA3 , queste come uscite verso la scheda audio; Infine BS (se lo si vuole connettere) collegato sul piedino RB4 come ingresso verso il pic, questo ultimo segnale informa solamente il pic che la scheda audio non sta suonando è ready ma come vi dicevo non è indispensabile perché si possono inviare comandi anche senza aspettare che la schedina abbia finito di suonare il brano. 
Nella funzione Main viene gestito l'avanzamento retrocessione del brano da suonare.
In particolare PlayNext è collegato sul pin RB1 e PlayPrew al pin RB0 del PIC.

La scheda WTV-020-SD è molto economica la si trova ad un costo piuttosto basso (circa 3€) su siti internet e può funzionare anche senza una MCU semplicemente collegando dei pulsanti come nello schema del suo DataSheet.
Importante caricare la scheda SD (alloggiata nella scheda Audio) dei solo file AD4 creati con il programma chiamato 4D-SOMO-Tool.

La foto di questa scheda è la seguente:

Mentre lo schema elettrico del sistema completo è il seguente:


 l'intero Progetto con il relativo codice lo si può scaricare dal link di Google Drive qui:

I file audio AD4 sono sul seguente link di google Drive:

Il programma per convertire i file Wav in AD4 sono sul seguente link:
AD4 Converter


//=========================//
Pagina Scritta da Leonardo Moretti



7

PRIMI PROGETTI CON IL PIC 18-PIN 16F88   Parte 1

Altra piccola premessa sui Fusi di questa MCU a 18 Piedini (fuse in English):
essi sono rappresentati da una serie di parametri iniziali i quali vanno ad influire sul comportamento dei moduli hardware interni al PIC stesso. Essi vengono impostati sulle proprietà del progetto sul compilatore. Una classica configurazione è la seguente:



Oscillator selection:Permette di scegliere il clock interno a 4mhz oppure un clock esterno più preciso.
Watchdog Timer: Se stai usando l'interrupt interno con il Timer0, timer1 oppure il timer2 e ti serve un divisore prescaler (per variare più o meno velocemente il tempo di generazione degli interrupt interni dei timers prima citati) puoi affidare il divisore o al WDT(Watchdog Timer) o al TIMER0. (solo nel caso si usi il Timer0)
Infatti per il Timer2 e 3 si può usare soltanto il WDT.
GP3 o MCLR :Definisce il comportamento del pin: come semplice linea dati o come MCLR.
Program Memory Code: Come si intuisce abilita il PIC a proteggere il codice del programma contenuto in esso.
Data Code Protection: Abilita o disabilita la memoria EEprom dall'essere scritta dal programma principale contenuto nel PIC e scritto da voi.
CCP1: pin Selection: Permette anche di decidere in quale PIN (RB0 o RB3) deve lavorare modulo PWM, (modulatore di frequenze ad impulsi)

TASTIERA ANALOGICA E RICONOSCIMENTO DEL TASTO PREMUTO:16F88

Il progetto è collegato ad una tastiera analogica collegata sul pin RA0 del Pic. La tastiera per ogni pressione del tasto genera una differenza di potenziale diversa da ogni altro tasto premuto. (tastiera di 12 tasti) Da notare che il programma lavora in Polling e non in interrupt , ciò significa che ciclicamente il programma effettua dei campionamenti sulla uscita della tastiera analogica.
Una volta acquisito il valore del potenziale della tastiera degli IF che (contenuti nella funzione Unità chiamata cosi perchè è possibile espandere il codice aggiungendo anche le decine) permettono il riconoscimento del tasto.
Il programma è scritto per il PIC 16F88 frequenza clock esterno di 4 Mhz
dotato di ADC (convertitore analogico digitale )

Il calcolo per sapere il numero byte all'uscita del convertitore (ADC) e quello di questa formula

x= Vin (VDigMax) / Vref

Dove:
Vin è la tensione sul Pin della tastiera, VDdigMax è il massimo valore rappresentabile dal convertitore Interno (ADC) tale valore intero è: 1024 , Vref è l'alimentazione della tastiera e del Pic ossio 5V.
In pratica se dovete acquisire una tensione di 3,7 volt il numero convertito dal convertitore interno A/D sara dato dal calcolo 3,2x1024/5=655,36 0ssia si tolgono i numeri dopo la virgola e si ottiene il numero 655.



I rami che collegano i Led della Retro Illuminazione possono tranquillamente essere rimossi e rendere lo schema più semplificato. 


Faccio notare ogni qual volta si usa un display 16x2 occorre frapporre tra +5Vcc ed il piedino MCRL una resistenza da 4,7k altrimenti ci saranno problemi di visualizzazione sul Display.

 l'intero Progetto con il relativo codice lo si può scaricare dal link di Google Drive qui:
Controllo per tastiera Analogica

//=========================//


MENU SU DISPLAY 16x2 GESTITO DA ENCODER: 16F88

Questo progetto è composto da due parti fondamentali: 
  • La gestione di un menù con tre voci comprese ciascuna di un sotto menù
  • La gestione di un Encoder Rotativo compreso di uno switch posto sull'asse dell'Encoder.
Questa è una idea  mi era venuta perché avevo necessità di gestire al meglio il piccolo pic a 18 piedini; allora ho pensato che se invece dei pulsanti usassi un encoder che era in grado di raccogliere il tutto in un oggetto unico, ci avrei guadagnato in praticità che in economia.
Un'altra idea era di rendere dinamico ed interattivo il mio programma principale (modificando il valore di alcune variabili al suo interno) in modo che si comportasse in maniera diversa; così è nata l'esigenza di creare un menu interattivo gestito appunto da questo Encoder.

Prima di passare al programma però vanno fatte due precisazioni su come funziona l'Encoder Rotativo ed il menu da esso gestito:
L'Encoder rotativo è formato al suo interno da due sensori: CLK e TD questi generano due segnali sfasati (meccanicamente) di 90° , questo sfasamento permette di distinguere se stiamo ruotando l'Encoder verso destra o verso sinistra. Più precisamente se ruoto a sinistra l'encoder i due segnali commuteranno con lo stesso livello logico, invece se ruoterò l'asse dell'encoder verso destra i due segnali commuteranno a livelli logici Opposti, Come in figura:

    
Da notare che sia sul fronte di discesa che sul fronte di salita i due segnali o sono uguali o nell'altro caso sono diversi, il tutto è stato fatto gestire dal programma nella routine di Interrupt B0 collegando il piedino CLK con quello RB0 (del Pic).
Un'altra cosa che ho imparato con l'esperienza è stata che non tutti gli encoder sono ottici, quelli più economici sono meccanici e questa parola equivale a dire rimbalzi tra le transizioni da livello logico 1 allo 0 e viceversa. Il risultato è che quando viene generato l'Interrupt sul piedino RB0 il codice scritto nel pic non sa distinguere se avete girato l'encoder a sinistra o a destra, il risultato è che l'encoder risulta ingestibile. Per ovviare a questo problema si può frapporre tra i due segnali (CLK e TD) e massa  due condensatori (da 10Pf a 10000Pf a vostra scelta) , ciò permette di eliminare il rimbalzo dei due segnali dell'Encoder durante le loro transizioni da 0 a 1 e viceversa. 

Quì di seguito viene riportato lo schema elettrico del Progetto:


In data 06.04.2016 il progetto è stato Migliorato e reso più stabile.
Io ora credo di avervi dato così le basi per sviluppare i vostri futuri progetti ora metteteci il vostro, buon lavoro.

  l'intero Progetto con il relativo codice lo si può scaricare dal link di Google Drive qui:

//=========================//

GENERATORE ONDA QUADRA CON ENCODER ROTATIVO 1Hz A 12Khz: 16F88

Questo è un progetto più semplice rispetto al precedente , si tratta di gestire una frequenza variabile mediante l'uso della funzione Sound, ovviamente girando l'asse dell'Encoder varia la frequenza generata dalla funzione Sound.
Il display vi mostra il valore della frequenza che state generando sulla porta A2 (PORTA.2).

Di seguito vi mostro lo schema elettrico del progetto:

Vi consiglio di collegare in serie all'altoparlante da 8ohm una resistenza da 220ohm perchè il pic non gestisce correnti maggiori di 20ma. Di fatti dalla legge di Ohm R=5v/0.02A=250ohm.


Vi ricordo, per ciò che concerne l'encoder rotativo meccanico due condensatori (da 10Pf a 10000pf a vostra scelta) in modo da evitare i rimbalzi, come in Foto:




l'intero Progetto con il relativo codice lo si può scaricare dal link di Google Drive qui:
//=========================//
Pagina Scritta da Leonardo Moretti
5 

PRIMI PROGETTI CON IL PIC 8-PIN 12F675 parte 2









PRIMI PROGETTI CON IL PIC 8-PIN 12F675  parte 1

 PILOTA MOTORE PASSO PASSO: (step motor)

Far Muovere un Motorino passo-passo con il pic 12F675 o 12F629
Prima di tutto procuriamoci il materiale:
  • Alimentatore multi presa da 5V (se usate quello con più uscite dovrete usare l'integrato che vi regola la tensione fissa su 5V LM7805)
  • Costruitevi (o compratevi) con il mille fori o sviluppandovi con l'uso dei fogli (toner transfer) la scheda Madre in modo da renderla compatibile e riciclabile per tutti i progetti che volete realizzare. (ricordate sviluppate prima i prototipi su questa scheda). Usate molti ponti di modo tale da poter all'evenienza cablare la vostra scheda ed adattarla a ogni configurazione.





Schema elettrico Scheda di sviluppo 12F675



  • Scaricatevi dal sito MikroBasic pro ver. Demo  il compilatore più adatto al vostro percorso di studi di informatica. (io vi consiglio il basic anche se c'è meno codice da scaricare in giro)

  • Il Programmatore , per esperienza vi consiglio il PicKit 3 lo trovate su Amazon a 30€ oppure anche su Aliexpress (arriva dopo un mese ma lo pagate la metà)

  • Per finire Procuratevi , sempre su Aliexpress oppure Amazon il Motorino Passo Passo con la relativa scheda Pilota di Potenza (Driver):








  • Una breve introduzione sui Fusi (Fuse in English) , essi sono rappresentati da una serie di parametri iniziali i quali vanno ad influire sul comportamento dei moduli hardware interni al PIC stesso. Essi vengono impostati sulle proprietà del progetto sul compilatore. Una classica configurazione è la seguente:




  • Oscillator selection:Permette di scegliere il clock interno a 4mhz oppure un clock esterno più preciso.
    Watchdog Timer: Se stai usando l'interrupt interno con il Timer0, timer1 oppure il timer2 e ti serve un divisore prescaler (per variare più o meno velocemente il tempo di generazione degli interrupt interni dei timers prima citati) puoi affidare il divisore o al WDT(Watchdog Timer) o al TIMER0. (solo nel caso si usi il Timer0)
    Infatti per il Timer2 e 3 si può usare soltanto il WDT.
    GP3 o MCLR :Definisce il comportamento del pin: come semplice linea dati o come MCLR.
    Program Memory Code: Come si intuisce abilita il PIC a proteggere il codice del programma contenuto in esso.
    Data Code Protection: Abilita o disabilita la memoria EEprom dall'essere scritta dal programma principale contenuto nel PIC e scritto da voi.


    Ora Possiamo Cominciare Scrivere il Programma

    l'intero Progetto con il relativo codice lo si può scaricare dal link di Google Drive qui:

    //=========================//


    GIOCO DI LUCI A TRE COLORI PER ALBERO DI NATALE CON CREPUSCOLARE: 12F675

    Il progetto supporta più 60 Led per ogni colore (o pin del Pic) anche perché dotato di Transistor NPN. Inoltre le batterie per le quali è stato collaudato non sono le 4 normali batterie stilo da 1,5V ma 4 Ricaricabili Stilo da 1,2V. Faccio questa precisazione perché la corrente generata dalla Fotoresistenza è tale da generare una differenza di potenziale (ai capi del convertitore ADC) tarata gia nel Programma.

    Il calcolo per sapere il numero byte all'uscita del convertitore (ADC) e quello di questa formula

    x= Vin (VDigMax) / Vref
    dove:
    Vin è la tensione in entrata del ADC , VDigitMax è il numero intero massimo che il convertitore da 10Bit può convertire 1024 , e Vref rappresenta la tensione della batteria 3,8V. (batt. ricaricabili)

    Ho anche misurato il consumo Medio e Massimo del circuito sulla batteria ed era rispettivamente 40mA e 60mA. (per una batteria di 2000mA immaginate la durata), a questo aggiungete che di giorno la MCU va In Stand-By vi lascio Immaginare. 

    Lo schema elettrico è questo:



     l'intero Progetto con il relativo codice lo si può scaricare dal link di Google Drive qui:
    Alcune raccomandazioni:
    Qualora si volesse realizzare il progetto per montarlo all'esterno si raccomanda di usare una scatola di derivazione a tenuta stagna, di rivestire l'interno con il polistirolo giallo ad alta densità (di colore giallo usato per l'edilizia) ed inoltre rivestire il pacco di batterie con il rivestimento nero usalo per i tubi dell'acqua e di mettere il tutto (insieme al circuito) dentro la scatola di derivazione.
    Questo perché l'acqua ed il freddo non pregiudichino il funzionamento del progetto.


    Pagina Scritta da Leonardo Moretti

    //=========================//