Schema e Codice per Realizzare un Termometro con Microcontrollore, Display LCD, Integrato MAX6675 e Termocoppia per Misurare Temperature da 0 a 1000°C…
INTRO
Il seguente schema permette di realizzare un termometro che utilizza un display LCD per mostrare il valore di temperatura e utilizza un integrato MAX6675 per acquisire il valore di tensione generata da una termocoppia. L’integrato dispone di due pinT+ e T- a cui collegare la termocoppia e si riesce a misurare temperature tra 0°C e 1023°C sempre se la termocoppia riesce a resistere a questo range di temperature.
L’integrato MAX6675 usa un protocollo SPI per comunicare, quindi il valore di temperatura viene elaborato all’interno del CHIP e giunge al microcontrollore senza essere disturbato da rumore.
Si è usato un display LCD ma potrebbe essere usato un sette segmenti o qualsiasi altro supporto visivo.
CODICE
Il codice è il seguente:
#define CS portc.f0 //Definisci CS PORTC.F0
sbit SoftSpi_SDI at RC4_bit; //Definisci connessione SPI
sbit SoftSpi_SDO at RC5_bit;
sbit SoftSpi_CLK at RC3_bit;
sbit SoftSpi_SDI_Direction at TRISC4_bit;
sbit SoftSpi_SDO_Direction at TRISC5_bit;
sbit SoftSpi_CLK_Direction at TRISC3_bit; //Fine connessione SPI
sbit LCD_RS at RB0_bit; //Definisci connessione LCD
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit; //Fine connessione LCD
char temp_lsb, temp_msb; //Variabili temp provvisore
unsigned int temp, temperatura; //Variabili temp
char text[5]; //Variabile testo
void main(){ //Programma principale
TRISC.F0 = 0; //CS chip select uscita
Lcd_Init(); //Inizializza LCD
Lcd_Cmd(_LCD_CLEAR); //Pulisci LCD
Lcd_Cmd(_LCD_CURSOR_OFF); //Spegni cursore
Soft_SPI_Init(); //Inizializza SPI
while (1) { //Ciclo infinito
CS=0; //CS=0 avvia lettura
temp_msb = Soft_SPI_Read(170); //Leggi MSB temperatura
temp_lsb = Soft_SPI_Read(170); //Leggi LSB temperatura
temp =((unsigned int )temp_msb <<5) | (temp_lsb>>3 ); //Unisci LSB e MSB
CS=1;
temperatura = temp >> 2;
Lcd_Cmd(_LCD_CLEAR); //Pulisci display
IntToStr(temperatura, text); //Converti in testo
Lcd_Out(1, 1, " Temperatura: "); //Prima riga mostra "Temperatura:"
Lcd_Out(2,1,text); //Scrivi temperatura sulla 2° riga
Lcd_Chr(2,9,223); //Mostra simbolo grado
Lcd_Chr(2,10,'C'); //Mostra C di centrigrado
Delay_ms(1000); //Aspetta 1 secondo
}
}
Prima di tutto si va a definire CS ovvero Chip Select ovvero il pin PORTC.F0, poi si definisce la connessione SPI fatta in software in modo tale che sia possibile usare qualsiasi microcontrollore e si definisce anche la connessione tra il microcontrollore e il display LCD.
Nel programma principale si va ad inizializzare il display LCD e il protocollo software SPI.
Nel ciclo infinito si pone CS a livello basso per far partire la lettura della temperatura, poi si legge prima la parte alta della temperatura e poi la parte LSB, queste due parti si vanno poi ad unire utilizzando le indicazioni sulla rappresentazione dei dati dell’integrato MAX6675.
Una volta letta la temperatura si va a convertire in testo, si stampa sulla prima riga del display “Temperatura:” e sulla seconda riga si stampa la temperatura con il simbolo di grado centigrado.
Ogni secondo si ripete la lettura e scrittura su LCD.
SCHEMA
Lo schema è il seguente:
La tensione di alimentazione è pari a 5V e questa tensione alimenta il microcontrollore con il positivo al pin 20 e GND ai pin 8 e 19, alimenta il display LCD e la sua retroilluminazione e alimenta anche l’integrato o il modulo MAX6675.
Il display LCD è connesso alle PORTB del microcontrollore come indicato nel codice mentre i pin del modulo MAX6675 sono connessi a 3 delle PORTC come indicato sempre nel codice.
R1, R2 ed R3 sono resistori di pull-up per i pin di comunicazione SPI, R4 mantiene in funzione e non in reset il microcontrollore, RV1 controlla il contrasto dell’LCD mentre C3 è un condensatore di filtraggio. Il quarzo da 4MHz e i due condensatori da 22pF formano il circuito di oscillazione.
La termocoppia deve essere connessa correttamente come indicato nel modulo o nel datasheet del MAX6675.
DOWNLOAD
Potete scaricare la simulazione del circuito con PROTEUS e il codice compilato con MIKROC al seguente LINK!!!