3

Click here to load reader

Trabalho Final Gcc152

Embed Size (px)

DESCRIPTION

Embarcados

Citation preview

Page 1: Trabalho Final Gcc152

Trabalho Final da Disciplina Sistemas Embarcados e Microcontroladores GCC-152

Autores: Larissa de Souza Pinto Rodrigo Andrade Lima

#define EMERG portb.rb1 // colocando nome em algumas entradas de acordo com nosso esquemático#define Green portb.rb2 // colocando nome em algumas entradas de acordo com nosso esquemático#define Yellow portb.rb4 // colocando nome em algumas entradas de acordo com nosso esquemático#define Red portb.rb6 // colocando nome em algumas entradas de acordo com nosso esquemático#define Bomba portb.rc2 // colocando nome em algumas entradas de acordo com nosso esquemático#define Analog porta.ra0 // colocando nome em algumas entradas de acordo com nosso esquemático

sbit LCD_RS at RE2_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_EN at RE1_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_D4 at RD4_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_D5 at RD5_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_D6 at RD6_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_D7 at RD7_bit; // Configurações obrigatórias para io uso do LCD

sbit LCD_RS_Direction at TRISE2_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_EN_Direction at TRISE1_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_D4_Direction at TRISD4_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_D5_Direction at TRISD5_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_D6_Direction at TRISD6_bit; // Configurações obrigatórias para io uso do LCDsbit LCD_D7_Direction at TRISD7_bit; // Configurações obrigatórias para io uso do LCD

char nivel_lcd[8]; // declarando variaveisfloat ana_bits=0, nivel=0; // declarando variaveis

void main() { // iniciando a rotina principal trisb = 0b00000010; // define o bit 1 do portb como entrada, e os outros bits como saida (0000 0010) // o push-botton esta conectado no bit 1 do portb trisd = 0;// tudo saida

trisa = 0x01; //define RA0/AN0 como entrada, outros pinos como saida

trisc = 0x00; //tudo como saída trise=0x00; //tudo com saídaPORTB=1; // Inicia as portas B com nivel logico 1PORTA=0; // Inicia as portas B com nivel logico 0PORTC=0; // Inicia as portas B com nivel logico 0PORTD=0; // Inicia as portas B com nivel logico 0

Page 2: Trabalho Final Gcc152

PORTE=0; // Inicia as portas B com nivel logico 0

ADCON2 = 0b10000111; // Configurando o conversor analogico digital ADCON1 = 0b00001110; // Configurando o conversor analogico digital ADCON0 = 0b00000001; // Configurando o conversor analogico digital

ADC_init(); // inicializando o conversor

INTCON=0b10010000;

Lcd_init(); // inicializando o lcd

lcd_cmd(_lcd_cursor_off); // desliga o cursorpwm1_init(2000); // atribui uma frequencia =2000 ao pwmpwm1_start(); // inicializa o pwm while(1) // loop infinito {

if(portb.rb1 == 1) // se o push botton não foi apertado

{

ana_bits=adc_read(0); // a variavel anabits recebe o valor do conversor analogico-digitalnivel=(10*ana_bits)/1024; // a variavel nivel recebe o valor de anabits / 1024 devido ao numero de bit do conversor, e multiplica -se por dez pois nosso tanque possui 10 litros

floattostr(nivel,nivel_lcd); // converte a variavel nivel de float para strig para que essa possa ser exibida no LCDlcd_out(1,1,"NIVEL(L):"); // escreve na primeira coluna do LCDlcd_out(1,12,nivel_lcd); // escreve na segunda coluna do LCDpwm1_start(); // inicia o PWMpwm1_set_duty(255/nivel); // configura o duty cicle que a vetuinha deve girarif (nivel>=7){ // Condição se nivel >7 o tanque esta com nivel altopwm1_set_duty(0); // ventuinha não gira, duty igual a 0portb.rb2=1; // Led da porta rb2 apagaportb.rb4= 0; // Led da porta rb2 acende LED YELLOwportb.rb6=1; // Led da porta rb2 apaga

lcd_out(2,1,"NIVEL ALTO "); //escreve no LCD}if (nivel<=3){ //Condição, se nivel <3 o tanque esta com nivel baixo

portb.rb2=1; // Led da porta rb2 apagaportb.rb4= 0; // Led da porta rb4 acende LED Yellowportb.rb6=1; // Led da porta rb6 apagalcd_out(2,1,"NIVEL BAIXO "); // escreve no LCD}

if (nivel >3 && nivel<7){ // //Condição, 7>se nivel >3 o tanque esta com nivel normal

Page 3: Trabalho Final Gcc152

portb.rb2=0; // Led da porta rb2 acende LED GREENportb.rb4=1; // Led da porta rb4 apagaportb.rb6=1; // Led da porta rb6 apaga

lcd_out(2,1,"NIVEL NORMAL"); // escreve no LCD} } if(portb.rb1 == 0) // Condição, se o push botton da porta rb1 foi apertado

{ delay_ms(50); do { //Faça pwm1_set_duty(0); // PWM gira com velocidade 0, ou seja parado.

portb.rb6=0; // Led da porta rb6 acende LED RED portb.rb2=1; // Led da porta rb2 apagaportb.rb4=1; // Led da porta rb4 apaga

// resseta todos os pinos do portd - apaga LEDs lcd_out(1,1,"BOMBA PARADA "); // escreve no LCD lcd_out(2,1," "); // escreve no LCD } while (portb.rb1 == 1); // Enquanto rb1 não for pressionado novamente lcd_out(1,1," "); // escreve no LCD portb = 0; // portb recebe 0 } delay_ms(100); portb.rb1 == 1; } }