0% ont trouvé ce document utile (0 vote)
9 vues4 pages

Commande de feux de carrefour avec PIC

Le document décrit un système de commande de feux de circulation à deux voies utilisant un PIC 16F877, avec des LED représentant les feux. Il précise les connexions entre le microcontrôleur et les LED, ainsi que les durées d'allumage pour chaque couleur de feu. Le document inclut également des instructions pour établir des organigrammes et traduire ceux-ci en programmes assembleur, en fournissant des exemples de code pour la gestion des feux et la lecture de température.

Transféré par

Karan Sama
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)
9 vues4 pages

Commande de feux de carrefour avec PIC

Le document décrit un système de commande de feux de circulation à deux voies utilisant un PIC 16F877, avec des LED représentant les feux. Il précise les connexions entre le microcontrôleur et les LED, ainsi que les durées d'allumage pour chaque couleur de feu. Le document inclut également des instructions pour établir des organigrammes et traduire ceux-ci en programmes assembleur, en fournissant des exemples de code pour la gestion des feux et la lecture de température.

Transféré par

Karan Sama
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

On veut réaliser une commande des feux d’un carrefour, à deux voies, à l’aide du PIC 16F877.

On
utilise le PORTB pour commander les feux de deux voies. Ce qui fait six feux qui sont simuler par des
LED qui sont noté :

➢ Pour la voie1 : R1 ; O1 et V1

➢ Pour la voie2 : R2 ; O2 et V2 (avec R : feux Rouge, O : feux Orange et V : feux Vert)

Liaison entre le PIC et les LED

➢ R1 est relié à PB0, O1 est relié à PB1, V1 est relié à PB2,

➢ R2 est relié à PB3, O2 est relié à PB4, V2 est relié à PB5,

Durée d’allumage des feux pour chaque voie :

➢ Les feux verts s’allument pendant 10s

➢ Les feux oranges s’allument pendant 2s

➢ Les feux rouges s’allument pendant 12s 1.

Etablir l’organigramme générant une temporisation de 2 s

2. Etablir l’organigramme principal

3. Traduire les organigrammes en programmes assembleur.

Prendre fosc=4MHz

BSF STATUS, RP0

CLRF TRISB

BCF STATUS, RP0

MOVLW 0X21

MOVWF PORTB

CALL Tempo 10s

MOVLW 0X11

MOVWF PORTB

CALL Tempo 2s

MOVLW 0X0C

MOVWF PORTB

CALL Tempo 10s

MOVLW 0X0A

MOVWF PORTB

CALL Tempo 2s
Voici un exemple du programme assembleur des organigrammes. Après les calculs nous avons trouvé
la durée de 250ms c’est-à-dire qu’on va utiliser un temporisateur qui compte que 250ms donc pour
faire une temporisation de 2s on va l’appeler 4 fois. Et en fonction de la temporisation de 2s on va
appeler celle de 10s. comme par exemple si on appel 2s on va utiliser ça pour appeler 5 fois pour
avoir celle de 10s.

Fais-moi le programme en fonction de ce que je viens de te donner

float N;

float Tc=92;

float T;

char Temperature[10];

void main() {

TRISB = 0;

TRISC = 0;

TRISA= 0XFF;

Lcd_init();

ADC_init();

Lcd_cmd(_Lcd_clear);

Lcd_cmd(_Lcd_cursor_OFF);

Lcd_out(1,1,"T=");

Lcd_Out(2,1,"Moteur:");

while(1){

N=ADC_Read(0);

T=0.488*N-273;

floatToStr(T,Temperature);

Lcd_out(1,5,Temperature);

if(T>Tc){

PORTC.RC0=1;

Lcd_Out(2,10,"Marche");
}

else{

PORTC.RC0=0;

Lcd_Out(2,10,"Arret");

NOUVEAU/

sbit LCD_RS at RB6_bit;

sbit LCD_EN at RB7_bit;

sbit LCD_D7 at RB5_bit;

sbit LCD_D6 at RB4_bit;

sbit LCD_D5 at RB3_bit;

sbit LCD_D4 at RB2_bit;

sbit LCD_RS_Direction at TRISB6_bit;

sbit LCD_EN_Direction at TRISB7_bit;

sbit LCD_D7_Direction at TRISB5_bit;

sbit LCD_D6_Direction at TRISB4_bit;

sbit LCD_D5_Direction at TRISB3_bit;

sbit LCD_D4_Direction at TRISB2_bit;

unsigned int N;

float Tc= 90;

float T;

char te[15];

void main() {

TRISC=0;

Lcd_Init();

UART1_Init();

ADC_Init();
Lcd_cmd(_Lcd_clear);

Lcd_cmd(_Lcd_cursor_OFF);

Lcd_Out(1,1,"T=");

Lcd_Out(2,1,"Moteur:");

while(1){

N=ADC_Read(0);

T=0.488*N-273;

floatToStr(T,te);

Lcd_Out(1,3,te);

Lcd_Out_cp("C");

if (T>Tc+2){

PORTC.RC6=1;

UART1_Write(1);

Lcd_Out(2,10,"Marche");

if (T<Tc-2){

PORTC.RC6=0;

UART1_Write(0);

Lcd_Out(2,10,"Arret");

Vous aimerez peut-être aussi