0% ont trouvé ce document utile (0 vote)
146 vues3 pages

Projet MikroC : Bus OneWire et LCD

Ce document décrit un programme pour la lecture de température à partir d'un capteur DS18B20 connecté en bus 1-Wire au microcontrôleur PIC16F887. Le programme affiche la température mesurée sur un écran LCD et fait sonner un buzzer en cas d'alarme. Il présente les étapes pour réaliser le circuit sur Proteus et modifier le texte affiché.

Transféré par

M'hamed Saadi Bachir
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
146 vues3 pages

Projet MikroC : Bus OneWire et LCD

Ce document décrit un programme pour la lecture de température à partir d'un capteur DS18B20 connecté en bus 1-Wire au microcontrôleur PIC16F887. Le programme affiche la température mesurée sur un écran LCD et fait sonner un buzzer en cas d'alarme. Il présente les étapes pour réaliser le circuit sur Proteus et modifier le texte affiché.

Transféré par

M'hamed Saadi Bachir
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

TP4 : Communication par le bus série OneWire

Manipulation :

Travail à faire :
Créer un projet avec MikroC on utilisant le Pic16f887 avec une fréquence de 8MHz, activer les librairies
suivantes : (Conversions, C_String, LCD, LCD_Constats, One_Wire, Sound).
Ecrire le programme suivant :
// Connexion du module LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Fin de connexion du module LCD
//------------------------- DECLARATION VARIABLE ET I/O -----------------------------------------------
char Flag_alarme;
unsigned int temperature; // Création d'une variable pour stocker la temperature sur 2 Octets
char text[15]; // Création d'une chaine de caractère pour stocker le texte à afficher
//------------------------------------------ PROTOTYPE --------------------------------------------------------
void Calcul_temperature(unsigned int);
void main() {
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0; // Configure le PORTB et le PORTE en digital
TRISB = 0; // Configure le PORTB en sortie pour le LCD
Lcd_Init(); // Initialisation du LCD
Lcd_Cmd(_LCD_CLEAR); // On efface l'écran
Lcd_Cmd(_LCD_CURSOR_OFF); // On arrête le clignotement du curseur
Lcd_Out(1, 1, "DS18B20+"); // Texte de fond 1ere ligne
Lcd_Out(2, 1, "Temp = C"); // Texte de fond 2iéme ligne
Lcd_Chr(2,13,178); // Rajoute le petit signe "°"
Sound_Init(&PORTE, 1); // On initialise le buzzer sur RE1
while (1) {
//--- On effectue une lecture de température
Ow_Reset(&PORTE, 2); // On reset le signal sur le BUS
Ow_Write(&PORTE, 2, 0xCC); // Saute lecture du code 64 bits en ROM (si 1 seul DS18B20+)
Ow_Write(&PORTE, 2, 0x44); // Demande d'effectuer une conversion "CONVERT_T"
Delay_us(800); // Délais d'attente de la DS. Pour une conversion sur 12 bit c'est 750ms
Ow_Reset(&PORTE, 2); // On reset le signal sur le BUS
Ow_Write(&PORTE, 2, 0xCC); // Saute lecture du code 64 bits en ROM (si 1 seul DS18B20+)
Ow_Write(&PORTE, 2, 0xBE); // On demande la lecture du scratchpad "READ_SCRATCHPAD"
temperature = Ow_Read(&PORTE, 2); // On lit la premiére valeur du Scratchpad
temperature += (Ow_Read(&PORTE, 2) << 8); // La seconde qui est la MSB donc on décale de 8 bit
// La variable "temperature" est maintenant sur 16 bit correspondant à notre temperature
Calcul_temperature(temperature); // Fonction qui convertit les valeurs et les affichent
delay_ms(1000); // Petite pause
}
}
void Calcul_temperature(unsigned int temperature_hex) {
float temperature_flt ; // Création d'une variable locale flottante
// On regarde si la temperature est négative
if (temperature_hex & 0x8000) { // On test le bit du signe qui est le bit15 .
text[0] = '-'; // Si la réponse est 1 ,elle est négative, donc on place le signe moins dans le texte
temperature_hex = ~temperature_hex + 1 ;
}
temperature_flt = temperature_hex * 0.0625; // on convertir la valeur hexadecimale sur 16bit en float
FloatToStr(temperature_flt, text); // On convertit le Flottant en string pour l'afficher
text[4] = 0; // On coupe la chaine de caractère à 4 valeurs
// Cela revient à arrondir à un chiffre après la virgule
Lcd_Out(2, 8, text); // On affiche notre température
}
Travail demander
1- Réaliser sur Proteus le circuit électronique puis téléverser le programme dans le microcontrôleur
16f887 le DS18b20 est placer sur le port RE2, et le switch J11 sur RE2 ?
2- Modifier le Texte qui s’affiche dans l’écran par une phrase de 16 caractères et fait là d’effiler ?
3- Utiliser les connaissances de TP1 et TP2 pour réaliser une calculatrice simple ?

Vous aimerez peut-être aussi