|
PULSANTI-LED
|
|
Identificazione progetto
progetto 1 |
autore |
|
note |
Pulsanti-led su microGT-mini |
Daniele Scaranaro |
daneel16@libero.it |
6 pulsanti collegati al portC accendono led al portB |
Premessa
Progetto di esempio per iniziare la programmazione con la microGT-mini a 20MHz, con 6 pulsanti collegati al portC che comandano i rispettivi led collegati su portB. Questa realizzazione permette di avere una base di partenza alla 'hello world' per iniziare a programmare e allo stesso tempo permette di supportare il test di piccoli progetti seguenti.
Schema elettrico con descrizione
Download schema elettrico in formato bmp
Figura 1
Nella figura 1 potete vedere lo schema della micro-GT mini con l'aggiunta dei pulsanti e delle resistenze (in basso e a sinistra nel disegno).
Figura
2
La realizzazione prevede 2 schedine millefori come in figura 2.
La prima scheda (destra) si compone di 6 resistenze da 10K che mettono in 'Pull-up' gli ingressi da RC0 a RC5 mentre la seconda è composta di 6 pulsanti (sinistra).
Questa soluzione permette alcuni vantaggi:
possibilità di riutilizzare singolarmente le 2 schede
possibilità di passare dalla modalità 'pull-up' alla 'pull-down' invertendo solo 2 cavi (rosso e grigio, figura 3)
figura
3
figura
4
Circuito stampato descrizione
La semplicità della realizzazione permette anche di fare pratica di saldatura per chi si vuole avvicinare all'elettronica e nello stesso tempo imparare qualcosa di più sul funzionamento dei microcontrollori con programmazione in ANSI-C. I pulsanti sono collegati insieme da un lato al cavo rosso, mentre l'altro lato và al connettore femmina che si inserirà nella scheda delle resistenze.
Le resistenze hanno un lato collegato insieme al cavo grigio, mentre l'altro lato di ogni resistenza si collega con il connettore femmina che verrà inserito al portC della microGT mini.
Guardando le foto tutto è più chiaro.
Firmware
Potete scaricare il file zippato dell'intero progetto in Mplab al segunte indirizzo-> download pulsanti_Led
Iniziamo dal file 'settaggi.h' qui di seguito:
void settaggi(){
TRISA=0; //tutte uscite digitali
TRISB=0; //tutte uscite digitali
TRISC=0xFF; //tutti ingressi digitali
}
Ecco qui di seguito il file principale:
/************************************
SCARANARO DANIELE *
* progetto pulsantiera - led *
* Piattaforma: MicroGT-mini *
* Microcontroller: 16F876A *
* 12/02/2012 *
* Nota: Pulsanti normal->1 *
* pressed -> 0 *
* Resistenze ->Pullup 10k *
***********************************/
// 6 led collegati al PORT B
// 6 pulsanti collegati al PORT C, cablati N.A. verso massa
#include <pic.h>
#include "delay.h"
#include "settaggi.h"
#define PIC_CLK 20000000
#define P1 RC0 //pulsante P1
#define P2 RC1 //pulsante P2
#define P3 RC2 //pulsante P3
#define P4 RC3 //pulsante P4
#define P5 RC4 //pulsante P5
#define P6 RC5 //pulsante P6
#define LD1 RB0 //led 1 su RB0
#define LD2 RB1 //led 1 su RB1
#define LD3 RB2 //led 1 su RB2
#define LD4 RB3 //led 1 su RB3
#define LD5 RB4 //led 1 su RB4
#define LD6 RB5 //led 1 su RB5
void main(){
settaggi();
while(1){
/************* gestione pulsante P1 con LED 1 **************/
if(P1==0){
DelayMs(100); //ritardo antirimbalzo
if(P1==0){
LD1=1; //accendo LED se pulsante premuto
}
}
else{
LD1=0; //spengo led se pulsante non è premuto
}
/************* gestione pulsante P2 con LED 2 **************/
if(P2==0){
DelayMs(100); //ritardo antirimbalzo
if(P2==0){
LD2=1; //accendo LED se pulsante premuto
}
}
else{
LD2=0; //spengo led se pulsante non è premuto
}
/************* gestione pulsante P3 con LED 3 **************/
if(P3==0){
DelayMs(100); //ritardo antirimbalzo
if(P3==0){
LD3=1; //accendo LED se pulsante premuto
}
}
else{
LD3=0; //spengo led se pulsante non è premuto
}
/************* gestione pulsante P4 con LED 4 **************/
if(P4==0){
DelayMs(100); //ritardo antirimbalzo
if(P4==0){
LD4=1; //accendo LED se pulsante premuto
}
}
else{
LD4=0; //spengo led se pulsante non è premuto
}
/************* gestione pulsante P5 con LED 5 **************/
if(P5==0){
DelayMs(100); //ritardo antirimbalzo
if(P5==0){
LD5=1; //accendo LED se pulsante premuto
}
}
else{
LD5=0; //spengo led se pulsante non è premuto
}
/************* gestione pulsante P6 con LED 6 **************/
if(P6==0){
DelayMs(100); //ritardo antirimbalzo
if(P6==0){
LD6=1; //accendo LED se pulsante premuto
}
}
else{
LD6=0; //spengo led se pulsante non è premuto
}
}
}
Scarica il programma completo
compreso il file .hex in C16 per MpLab ->
download pulsanti_Led
Il precedente codice, scritto in C con l'ambiente Mplab della microchip, è molto semplice e potete vedere i commenti riga per riga.
Potete vedere un filmato della micro-gt mini in funzione al seguente link
Questo progetto è ridistribuibile secondo i termini di licenzaCreative Commons Attribuzione-Condividi allo stesso modo 3.0 Italia
Note aggiuntive
Alcuni si chiederanno che senso abbia accendere dei led tramite dei pulsanti passando attraverso un microcontrollore, perchè non collegare semplicemente i led ai pulsanti?.
RISPOSTA: se questa semplice operazione riesci a farla fare al microcontrollore vuol dire che hai cominciato a capirci qualcosa, tutti cominciano dal basso e dalle cose semplici. J