Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ricerca personalizzata
11
voti

LO HAI MAI REALIZZATO CON UN PIC? - Il conta marce

Indice

Presentazione

Vorrei iniziare, qui su su ElectroYou (tempo permettendo), un tutorial dal nome '"Lo hai mai realizzato con un PIC?"'. Il mio intento è quello di mostrare come, con l'elettronica embedded a microcontrollore (e in particolare con i PIC Micro di Microchip Technology), si possa rispondere a molti quesiti e produrre soluzioni a problemi altrimenti proposte con altri metodi. Il primo esempio trae spunto da una richiesta che un utente del forum ha effettuato in questo post: realizzare un contamarce per KART.

Il contamarce

L'obiettivo di questo progetto è quello di realizzare un contatore Up/Down, con alcune specifiche ben chiare. Posto che il progetto ha fini prettamente didattici, dovendo realizzare un contatore per tenere traccia della marcia inserita si può pensare che:

- la marcia minima sia la prima;

- la marcia massima sia la settima;

- la visualizzazione avvenga su un solo display a sette segmenti;

- l'alimentazione provenga da una piccola batteria.

Con queste premesse, si può pensare di impiegare un PIC piuttosto "piccolo", come il PIC12F675 (per il datasheet si vada il paragrafo dei riferimenti) che fornisca ad un driver per display a sette segmenti, come ad esempio CD4511, una codifica per la rappresentazione del numero da visualizzare. È ragionevole pensare che un kart non disponga di un cambio di velocità con più di sette marce (non sono un esperto di kart, ma questo mi sembra un assunto abbastanza ragionevole) e che quindi i numeri da rappresentare vanno da 1 a 7.

Osservando la tabella della verità del CD4511 si nota come dei quattro bit di controllo ne bastino solo 3 per rappresentare i numeri da 1 a 7.

I tre segnali in ingresso che vengono connessi al PIC son pertanto A, B, C mentre D viene collegato direttamente a massa.

CD4511_TruthTable.JPG

CD4511_TruthTable.JPG

Per evitare di appensantire il circuito, si possono sfruttare alcune caratteristiche del PIC e in particolare:

  • impiego dell'oscillatore interno a 4MHz;
  • utilizzo delle resistenze di pull-up interne.

Lo schema elettrico

Nella figura seguente è proposto lo schema elettrico (si veda il paragrafo "Progetto" per poter scaricare il file PDF). Il progetto si compone di uno stadio di alimentazione a 5V stabilizzati che fornisce tensione a tutto il circuito. Il PIC ha in ingresso i pulsanti UP e DOWN e fornisce al driver 4511 la codifica della numerazione da 1 a 7 mediante bit.

SchemaElettrico_GearCounter.JPG

SchemaElettrico_GearCounter.JPG

I componenti utilizzati sono i seguenti:

  • C1 100uF, 25V
  • C2 100n
  • C3 100n
  • C4 100n
  • D1 Display 7 segmenti a catodo comune
  • IC1 7805
  • IC2 PIC12F675P
  • IC3 CD4511N
  • J1 Strip 5 poli
  • R1 220
  • R2 220
  • R3 220
  • R4 220
  • R5 220
  • R6 220
  • R7 220
  • R8 10k
  • X1 Connettore a vite passo 5.08
  • X2 Connettore a vite passo 5.08
  • X3 Connettore a vite passo 5.08

Dallo schema, sviluppato con EAGLE, è stato realizzato con un circuito stampato. Nelle figure che seguono sono mostrati tanto il rendering effettuato al computer quanto le foto del prototipo (che presenta qualche piccola differenza realizzativa rispetto alla versione finale). La semplicità del progetto non necessita in modo specifico di un circuito stampato. Per chi volesse, il connettore J1 per la programmazione in-circuit ICSP, può essere omesso qualora si utilizzi un programmatore diverso da ICD2 o ICD3.

GearCounter.JPG

GearCounter.JPG

L'alimentazione va fornita al morsetto X1, mentre ai morsetti X2 e X3 vanno connessi rispettivamente i pulsanti (di tipo N.A.) per l'incremento (UP) ed il decremento (DOWN) del conteggio.

GearCounterPrototipo.JPG

GearCounterPrototipo.JPG

Firmware

Il progetto si compone anche del firmware, scritto in linguaggio, C con MikroC PRO (si veda il paragrafo dei riferimenti). Il codice gestisce l'interrupt tanto sull'evento Interrupt-On-Change quanto sull'overflow del TIMER0. Il primo viene impiegato per acquisire i segnali di INPUT mentre il secondo gestisce il fenomeno del rimbalzo del contatto garantendo che il sistema sia immune da incertezze. La routine di configurazione si preoccupa di impostare tanto il tristate in modo opportuno, cioè aderente a quanto stabilito con lo schema elettrico, quanto l'abilitazione dei pull-up interni, la risposta all'interrupt IOC e su overflow di TRM0. Nel main() il codice non gestisce più la pressione del pulsante bensì il segnale che viene generato dalle routine di interrupt qualora il pulsante premuto abbia concluso il proprio rimbalzo.

Come funziona

Una volta alimentato, il software esegue un test, contando da 0 a 7 in modo rapido; questo permette di verificare che tutti i numeri vengono correttamente rappresentati; successivamente il firmware visualizza il numero minimo (1, in questo caso) e resta in attesa della pressione di uno dei pulsanti. La pressione di UP comporta l'aumento dl conteggio della marcia, mentre DOWN è tale da eseguire un decremento; il firmware controlla che il conteggio non sia mai inferiore al numero minimo e maggiore al massimo delle marce disponibili. Ora, se è realistico pensare che la marcia minima sia la prima (e quindi venga visualizzato il numero 1) possiamo pensare a cambi di velocità con 4, 5, 6 o 7 marce. Il filmato che segue dovrebbe fugare ogni dubbio:

Tips 'n Tricks

Si faccia attenzione ad un aspetto molto importante. Benché PIC12F675 permetta l'adozione dell'oscillatore interno al posto di quello esterno, questa selezione esclude in modo categorico l'impiego del MASTER CLEAR interno! Questo aspetto è citato nel datasheet, pertanto è necessario porre una resistenza di pull-up esterna per MCLR ed impostare il compilatore in modo opportuno.

DatasheetConfBIts.JPG

DatasheetConfBIts.JPG

ConfBits.JPG

ConfBits.JPG

Per concludere

Questo non è che un esempio di come sia possibile realizzare un semplice contatore UP/DOWN con un microcontrollore PIC. Il progetto, con taglio prettamente didattico, lungi dal voler essere un'applicazione di tipo automotive. Per poter applicare questo contatore ad un kart è necessario prendere altre precauzioni ed attenzioni che esulano però dai motivi che stanno alla base di questo esercizio.

Progetto

Il progetto completo scritto per MikroC PRO ed il file PDF dello schema elettrico, sono disponibili al seguente link: http://www.electroportal.net/users/files/UpDownCounter.zip

Il progetto si compila anche con la versione free di MikroC PRO.

Riferimenti

MikroC PRO: http://www.mikroe.com/en/compilers/mikroc/pro/pic/

Datasheet PIC12F675: http://ww1.microchip.com/downloads/en/DeviceDoc/41190F.pdf

Datasheet CD4511: http://www.datasheetcatalog.org/datasheets/150/109579_DS.pdf

CAD EAGLE: http://www.cadsoftusa.com

Pillole di microcontrollori PIC: http://www.inwaredizioni.it/pic2/

18

Commenti e note

Inserisci un commento

di ,

@luca.cat: c'è solo il file PDF con lo schema elettrico. Non c'è il PCB.

Rispondi

di ,

bel progetto. Vorrei vedere Il master della scheda. Ho installato eagle, ma poi non riesco a leggere eagle.epf. Mi puoi aiutare??? Grazie

Rispondi

di ,

paolino me lo vendi qsto ke hai fatto tu?

Rispondi

di ,

finalmente pic programmato,pero nn funziona lo stesso,adesso si accende lo 0 e appena premo uno switch compare il 7,appena lo lascio ricompare lo 0.xkè?io ho caricato sul pic il file .hex contenuto sulla cartella che si scarica dal link ke ha pubblicato paolino (dove c'è anke lo skema elettrico).fatemi sapere

Rispondi

di ,

ma se io volessi programmare il pic usando i file che tu hai allegato,mi basta installare sul pic il file .hex che già è nei tuoi file o devo creare comunque il file .hex con mikroc?

Rispondi

di ,

eccovi le foto del mio circuito,paolino sai dirmi perché non va?ovviamente non è bello come il tuo,sono un neofita e l'ho fatto con la millefori e nn cn lo stampato come il tuo.

Uploaded with ImageShack.us

Uploaded with ImageShack.us

Rispondi

di ,

mi sorge un dubbio,io il pic l'ho montato cosi come me lo hanno dato dal negozio,per caso si doveva programmare o altro?se si come si programma?cioè come si fa a farlo comunicare col pc?

Rispondi

di ,

praticamente il display si illumina tutto,cioè tutti i led del display sono alimentati tranne che per quello di mezzo orizzontale ke "trema" cioè nn ha un impulso di corrente costante ma misurando con un tester la corrente fino al pic arriva correttamente.mi sorge un dubbio,io ho alimentato il tutto con un pacco batterie da 7.4 volt collegate con un riduttore di corrente che la porta a 5 volt è corretto?o si deve collegare alla corrente alternata?e poi io non so come si fanno le piste sulla basetta millefori (sono un neofita dell'elettronica) e quindi ho collegato il tutto con fili,come faccio a realizzare li piste sulla millefori?grazie p.s. la mia proposta di realizzarmelo a pagamento e sempre valida,paolino che dici?me lo fai?

Rispondi

di ,

lupopassion, come ti ho scritto in MP, dovresti inviare qualche foto di come lo hai realizzato e segnalare le difficoltà che hai avuto. Lo schema in PDF a me sembra chiaro, ma se ci fosse qualcosa che non ti è semplice da capire, prova a indicare dove e perché. Ciao. Paolo.

Rispondi

di ,

io ho provato a realizzarlo ma nn va,qlkuno di voi è disposto a spiegarmi meglio ocme fare magari con uno skema elettrico piu kiaro?se qlkuno è siciliano e lo sa fare,posso andarlo a trovare e lo facciamo insieme (pagando).fatemi sapere

Rispondi

di ,

Eccomi. Sì, ha ragione admin: sono molto preso in questo periodo. Ho visto solo ora i commenti e il MP di cberos: lo leggo e ti rispondo.

Rispondi

di ,

In questo periodo è sicuramente impegnato. Prova eventualmente a contattarlo sulla sua email simbolo della busta, sotto il suo avatar nel forum

Rispondi

di ,

qualcuno di voi, sa se è possibile realizzare il progetto? e se sì funziona? ho cercato di mandare un pm a "paolino", ma non mi risponde.

Rispondi

di ,

Ciao, navigando su internet mi sono imbattuto in questo progetto e mi piacerebbe realizzarlo. Avrei un paio di domande da chiederti.

Rispondi

di ,

Complimenti anche da parte mia! La soluzione con il microcontrollore è sicuramente più versatile e da preferire. Nello schema postato sul topic, se il cambio non ha esattamente sei marce bisogna rimettre in discussione le connessioni per inibire il conteggio al punto giusto. Invece riprogrammare il PIC è un attimo. Bel lavoro Paolino!!!

Rispondi

di ,

Grazie Renzo. Lo dico sinceramente. I tuoi commenti (come anche quelli di altri) sono per me più che importanti! In effetti sì, hai ragione: sto usando, per il rendering, uno degli strumenti che tu hai indicato in un tuo articolo. L'obbiettivo era quello di focalizzare l'attenzione sui PIC realizzando un piccolo tutorial e ho "tralasciato" aspetti più secondari al tema. Non escludo di inserire una nota sul rendering o almeno un link ai vari tutorial che si trovano in giro. Grazie.

Rispondi

di ,

Un articolo Molto interessante Paolino ... direi solo che in molti si sarebbero aspettati qualche parola in più sul metodo usato per il rendering del PCB ... mi sembra di riconoscere l'utilizzazione di uno dei "nostri" FreeTool ... sbaglio ;)

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.