Simulazione esame.

Piattafora Micro-GT I.D.E.

Edizione rivista ail 12/07/2012

Programmazione PIC in C16.

Distributore automatico "Caffettiera".

Classe terza elettrotecnici 2009/2010

prima versione 22 Aprile 2010

Edizione rivista ail 12/07/2012

Simulazione d’esame  Elettronica:Programmazione e progettazione sistemi a Microprocessori.

 

Cognome …………………………………………Nome…………………………………………

 

Si consideri il pannello comandi serigrafato disegnato qui sopra. Si produca e si compili un programma in C per PIC 16F877A, da riportare sul retro del foglio diviso in due colonne, che gestisca almeno i pulsanti di selezione caffè, cappuccino, the, che richiamino le tre funzioni omonime. Come verifica del fatto che si è entrati nella procedura di selezione si accendano rispettivamente RB0,RB1,RB2. Un canale analogico mostra la temperatura interna dell'acqua nel display LCD.

Inviare il progetto MpLab a prof.gottardo@tiscali.it dopo averlo impaccato con l’apposito tasto presente sul software della Microchip.

Tempo a disposizione 1 ora.

-------------------------------------------------------------------------

Collegamento dell'Hardware

Nell'immagine riporto il collegamento del display LCD (due righe per 16 caratteri) pilotato in modalità 8 bit.

 

download dello schema elettrico manoscritto

Al PORT B dovranno essere collegati i pulsanti di comando tramite resistenze di PULL down, ovvero all'azione premuto corrisponde un uno logico.

(Volutamente il disegno elettrico sovrastante non è completo così che possa ancora essere utilizzabile come esercitazione in classe).

 

---------------------------------------------------------------------------

bozza della soluzione:

//(Volutamente il sorgente non è completo, e riferito correttamente alla pulsantiera così che possa ancora essere utilizzabile come

 //esercitazione in classe).

/*********************************************
*                      Prof. Gottardo Marco                               *
*                  simulazione d'esame di qualifica                      *
*                     anno formativo 2009/2010                          *

*                          revisione 12/07/2012                             *
*            distributore automatico di bevande calde               *
*   piattaforma Micro-GT IDE PIC  16F877A caffettiera.c *
*********************************************/


#include<pic.h>
#include"Delay.h"
#include<math.h>
// #include<stdlib.h>
#include<stdio.h>

#define EN RE0
#define RW RE1
#define RS RE2

#define temperature RA0
#define votage_ref RA3

//sugar quantity device setting in binary (3 bits)
#define dispencer_b0 RA2
#define dispencer_b1 RA4
#define dispencer_b2 RA5

#define coffee_solenoid RB7 //PORT B tutti ingressi
#define milk_solenoid RB6
#define remainder RB5
#define tea RB4
#define cappuccino RB3
#define coffee RB2
#define sugar_minus RB1
#define sugar_plus RB0

#define sugar_level1 RC0 //PORT C sugar bargraph LED 1
#define sugar_level2 RC1 //PORT C sugar bargraph LED 2
#define sugar_level3 RC2 //PORT C sugar bargraph LED 3
#define sugar_level4 RC3 //PORT C sugar bargraph LED 4
#define sugar_level5 RC4 //PORT C sugar bargraph LED 5
#define sugar_level6 RC5 //PORT C sugar bargraph LED 6
#define sugar_level7 RC6 //PORT C sugar bargraph LED 7

#define sugar_present RC7 //PORT C sugar bargraph LED 8

// ho dichiarato la mia float to string
char * myftoa(float fl, int * sts);

void CLOCK();
void CLEAR();
void CONFIGURA();
void INIZIALIZZA();
void splash();
void VAI(unsigned char r, unsigned char c);
void SCRIVI(char lettera);
void FRASE(unsigned char l, unsigned char n, const char* msg1);
void CONVERSIONE();

void main(){
CONFIGURA();
INIZIALIZZA();
CLEAR();
DelayMs(10);
splash();
while(1){

//CONVERSIONE();

if (coffee==0){
CLEAR();
DelayMs(10);
FRASE(1,1,"selezione");
FRASE(2,1,"caffe");
}
if (cappuccino==0){
CLEAR();
DelayMs(10);
FRASE(1,1,"selezione");
FRASE(2,1,"cappuccino");
}
DelayMs(10);
}
}


void CLEAR(){RS=0; RW=0;
//PORTD=0x0F;
PORTD=0x01;
CLOCK();
DelayMs(2);
}

void CLOCK(){EN=1;
DelayMs(1);
EN=0;
}

void CONFIGURA(){
TRISB=0b11111111;
TRISC=0b1111;//primo nibble ingressi, lascio libera la seriale
TRISD=0;
TRISE=0;
PORTD=0;
PORTE=0;
OPTION=0x80;
ADCON1=0x02;
}

void INIZIALIZZA(){RS=0; RW=0; PORTD=0x30;
DelayMs(15);
CLOCK();
DelayMs(10);
CLOCK();
DelayMs(10);
CLOCK();
DelayMs(10);
RS=0; RW=0; PORTD=0x38;
CLOCK();
DelayMs(1);
RS=0; RW=0; PORTD=0x08;
CLOCK();
DelayMs(1);
RS=0; RW=0; PORTD=0x0C;
CLOCK();
DelayMs(1);
RS=0; RW=0; PORTD=0x01;
CLOCK();
DelayMs(1);
RS=0; RW=0; PORTD=0x03;
CLOCK();
DelayMs(1);
}

void SCRIVI(char lettera){RS=1; RW=0; PORTD=(lettera);
CLOCK();
DelayUs(50);
}
void VAI(unsigned char r, unsigned char c){unsigned char a=0;
RS=0; RW=0;
if(r==1){a=c+127;}
if(r==2){a=c+191;}
PORTD=(a);
CLOCK();
DelayUs(50);}
void FRASE(unsigned char l, unsigned char n, const char* msg1){
while(n<=16){VAI(l,n);
SCRIVI(*msg1++);
n++;
}
n=1;
}

void splash(){//scrive su LCD la presentazione per alcuni secondi
FRASE(1,1," Gottardo Marco ");
FRASE(2,1,"G-Tronic Robotic");
DelayS(2);
CLEAR();
DelayMs(2);

};

void CONVERSIONE()
{
unsigned int myaddress = 0;
unsigned int * sttus;
char * mybuf;
char thechar;
float ain = 0;



TRISA=1;
ADCON0=0b11000001;
ADCON1=0b10000010;
ADGO=1;
while(ADGO){}

// memorizzo la parte alta dell'indirizzo
myaddress= ADRESH;
// mi recupero il valore calcolato nella varibile float
ain = ((myaddress*256)+ADRESL)*4,887;
// a questo punto abbiamo il float da visualizzare

mybuf = myftoa(ain, &sttus);
int y = 1;
while (thechar = *mybuf++)
{
VAI(2,y);
SCRIVI(thechar);
y++;
}
}


char * myftoa(float f, int * status)
{
static char buf[17];
char * cp = buf;
unsigned long l, rem;

if(f < 0) {
*cp++ = '-';
f = -f;
}
l = (unsigned long)f;
f -= (float)l;
rem = (unsigned long)(f * 1e6);
sprintf(cp, "%lu.%6.6lu", l, rem);
return buf;
}
 

-------------------------------------bozza del file settaggi.h-----------------------------

 __CONFIG (HS & WDTDIS & PWRTDIS & BORDIS & LVPDIS
& DUNPROT & WRTEN & DEBUGDIS & UNPROTECT);

#define XTAL_FREQ 20MHZ //calibtare frequency oscillator

void settaggi(){
TRISB=0; //PORTB as output
TRISC=0; //PORTC as output
}

------------------------------------------------------------------------------------------
 

download progetto zippato per PIC16F877A file coffee_machine per Micro-GT IDE

  Pagina precedente