C:\Users\House\Desktop\fluxo.c 1: /****************************************************************************** 2: * Objetivo: Este projeto visa

Documentos relacionados
Usando display LCD tipo 16x2

EL08D - MICROCONTROLADORES

Na figura abaixo é mostra os pinos do microcontrolador utilizado no montagem da placa, o PIC16F628A.

Microprocessadores. Cap. 3 Treinamento em C para o compilador CCS

PIC - PROGRAMAÇÃO LINGUAGEM C. AUTOR: ENG. ANTONIO CARLOS LEMOS JÚNIOR

Desenvolvimento de um Medidor de Campo Magnético Microcontrolado para Aplicações em Física Experimental

Usando Display Gráfico com C18 e C30

Comunicação de LCD em 4 vias

LCDs Inteligentes. LCD Inteligente. Gabriel Kovalhuk DAELN / UTFPR

PSI2662 Projeto em Sistemas Eletrônicos Embarcados: Sensores e Atuadores. Temporizadores e Interrupção, AD/DA, Display, Integração com MatLab

Como utilizar o CI LM35 para ler Temperaturas com o PIC16F877A

ELETRÔNICA DIGITAL APOSTILA 01

Projeto para interligação do Teclado Matricial 4X3 o módulo PIC PCI-208 Princípio de Funcionamento:

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Introdução a Engenharia Elétrica

Guia da Placa de desenvolvimento PD Mega16 N1

Microcontroladores PIC. Operação com Displays de Cristal Líquido LCDs

Por Fernando Koyanagi

Introdução ao Uso do LCD Inteligente (Versão Preliminar) Por Gilson Yukio Sato. Introdução

Exemplos de Programas em C para o 8051 para o compilador crossware EEL Prof. Raimes Moraes

Linguagem C Princípios Básicos (parte 1)

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

MSP430 Lab 06 Comunicação com display de 40 2 e análise das formas de onda no analisador lógico

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Instituto Federal de Educação, Ciência e Tecnologia da Paraíba. Microcontrolador PIC 16F877

Exemplo: Leitura de Teclado Matricial com o NIOS II

01/08/2011 PROGRAMAÇÃO EM LINGUAGEM C. Histórico

Linguagem C Aplicações baseadas no KIT PIC Básico 28P

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Introdução à programação de microcontroladores PIC. Introdução à programação de microcontroladores

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

CONTROLE DE LUMINOSIDADE DE UMA SALA

Plano de Aula. 1 o semestre. Aula número 011 Periféricos Display LCD, Conversor AD e conversor DA (PWM)

Linguagem C para microcontroladores PIC

LINGUAGEM C PARA O 8051

MSP430 Lab 05 Biblioteca básica para comunicação com o Display do Nokia5110

Funções dos Microcontroladores Microcontroladores e Microprocessadores Especialização em Automação Industrial

TEM VÁRIOS ESTADOS: 0V,0.1V,3V,3.3V,4V,5V,10V, ETC.

Módulo de Cristal Líquido LCD

A linguagem C (visão histórica)

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA CURSO DE ENGENHARIA DE COMPUTAÇÃO. EletroTerm

TECLADO MATRICIAL. Universidade Tecnológica Federal do Paraná - UTFPR Sistemas Microcontrolados Monitor da disciplina: Luís Paulo Custódio

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação para Pic CCS primeira parte

Linguagem C para Microcontroladores

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Sistemas Microcontrolados

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

Introdução à Programação em C

3. Linguagem de Programação C

Métodos Computacionais. Comandos Condicionais e de Repetição em C

Introdução à Programação em C Input / Output

OMicrocontrolador PIC16F877A implementa um conversor

LINGUAGEM C PARA O 8051

Introdução a Linguagem C para PICmicro Programação de PIC em C CCS. 9/12/2003 Slide 1

RESUMO DE CONCEITOS BÁSICOS DE C

ET53C - SISTEMAS DIGITAIS

2a Prova de ELT024 Programação para Sistemas Embarcados Prof. Rodrigo Maximiano Antunes de Almeida

Introdução à Programação em C (I)

Sistemas Embarcados. Introdução aos sistemas embarcados

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Revisão para Prova 2. Mirella M. Moro

Prof. Adilson Gonzaga

Programação ARM. Engenharia de Sistemas Embarcados Prof. Abel Guilhermino

Placa de desenvolvimento USB AFSmartBoard utiliza PIC18F4550 da Microchip, microcontrolador com o Flash 32kb, 2048 bytes de memória RAM

Estruturas de Controle em c#

Microcontroladores: Programação em C

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Métodos Computacionais

Linguagem de Programação C. Prof. Fabrício Olivetti de França

Estudar os passos que devem ser feitos (ponto de partida até o objetivo)

Introdução à Programação em C (I)

Matrizes em C. Lucas Ferrari de Oliveira Professor Adjunto. Universidade Federal do Paraná

TUTORIAL ROBÔ CACO ROBÔ PARA MOVIMENTAÇÃO EM LABIRINTO UNIVERSIDADE FEDERAL DO PARANÁ PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA

Introdução à Programação

Algoritmos e Estruturas de dados

BANKSEL ADCON1 clrf ADCON1 bsf ADCON1,ADFM ; seta AD para VCC, GND e entradas analogicas, setando o bit ADFM configura como justificado a direita

Revisão Linguagem C Parte 1

K&R: Capitulo 2 IAED, 2012/2013

Laboratório de Microprocessadores e Microcontroladores

O Pino P2.7 não está sendo usado e cada Display mostrará valores de 0 a 9.

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

Introdução à Programação. Expressões Booleanas e Comandos Condicionais

Copyright 2011 VW Soluções

Cerne Tecnologia e Treinamento (21) (11) MSN: Skipe: cerne-tec

Linguagens de Programação I

SEL PROGRAMAÇÃO EM C

Aula 06 Introdução à Programação Matrizes

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

Tutoriais PET-Tele. Introdução à Amostragem de Sinais com o kit Arduino (Versão: A2016M06D21)

Introdução a Programação de Jogos

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Laboratório de Microprocessadores e Microcontroladores

Introdução a Engenharia Elétrica Comunicação serial, Acelerômetro, Display LCD

Transcrição:

1: /****************************************************************************** 2: * Objetivo: Este projeto visa monitorar uma tensão de um sensor e mostrar * 3: * e após a conversão necessária da escala de Fluxo mostra seu valor em um * 4: * display de LCD. * 5: * A finalidade deste programa é ser utilizado como um Fluxometro * 6: * * 7: * Compilador: CCS Versão 4.125 * 8: * * 9: * Atuor: Leandro R. Alves * 10: *******************************************************************************/ 11: #include < 16f876a. h > //Define o Dispositivo a ser utilizado 12: #device adc = 10 //Configura o compilador para conversor A/D de 10 bits 13: #use delay ( clock = 4000000 ) //Cristal 14: #fuses HS, NOWDT, PUT, PROTECT, BROWNOUT, NOLVP, NOWRT 15: #include < regs_16f87x. h > 16: #include < MATH. h > //biblioteca de funcóes matemáticas 17: #include < stdio. h > //biblioteca para manipulação com matrizes 18: 19: #define lcd_enable pin_a5 // pino enable do LCD 20: #define lcd_rs pin_a1 // pino rs do LCD 21: //#define lcd_rw pin_a3 // pino rw do LCD 22: #define lcd_d4 pin_b4 // pino de dados d4 do LCD 23: #define lcd_d5 pin_b5 // pino de dados d5 do LCD 24: #define lcd_d6 pin_b6 // pino de dados d6 do LCD 25: #define lcd_d7 pin_b7 // pino de dados d7 do LCD 26: 27: /****************************************************************************** 28: * definição dos port s de I/O * 29: /******************************************************************************/ 30: #use fast_io ( a ) // Para inicialização ra pida dos port s 31: #use fast_io ( b ) 32: #use fast_io ( c ) 33: 34: #byte porta = 0x05 35: #byte portb = 0x06 36: #byte portc = 0x07 37: 38: /********************************************************************** 39: * Envio de NIBBLE para o lcd 40: * 41: **********************************************************************/ 42: 43: void lcd_envia_nibble ( int dado ) 44: // envia um dado de quatro bits para o display 45: //Carrega as vias de dados (pnos) do lcd de acordo com o nibble lido 46: { 47: // coloca os quatro bits nas saidas 48: output_bit ( lcd_d4, bit_test ( dado, 0 )); 49: output_bit ( lcd_d5, bit_test ( dado, 1 )); 50: output_bit ( lcd_d6, bit_test ( dado, 2 )); 51: output_bit ( lcd_d7, bit_test ( dado, 3 )); 52: 53: // dá um pulso na linha enable 54: output_high ( lcd_enable ); //enable = 1 55: delay_us ( 2 ); 56: output_low ( lcd_enable ); //enable = 0 57: 58: return ; // retorna ao ponto de chamada da função 59: } 60: 61: 62: /*********************************************************************** 63: * Envio de um byte para o lcd 64: * 65: ************************************************************************/ 66: //Esta rotina irá enviar um byte ou um comando para o lcd conforme abaixo: 67: // endereco = 0 => a variavel dado será uma instrução 68: // endereco = 0 => a variavel dado será um caracter 1

69: 70: void lcd_envia_byte ( boolean endereco, int dado ) 71: { 72: 73: // aguarda o display ficar desocupado 74: //while ( bit_test(lcd_le_byte(),7) ) ; 75: // configura a linha rs dependendo do modo selecionado 76: output_bit ( lcd_rs, endereco ); // seta o bit rs para instrução ou caracter 77: delay_us ( 100 ); // aguarda 100 us 78: 79: //delay_cycles(1); 80: //output_low(lcd_rw); 81: // desativa linha enable 82: output_low ( lcd_enable ); // desativa a linha de enable 83: lcd_envia_nibble ( dado >> 4 ); // envia a primeira parte do byte 84: lcd_envia_nibble ( dado & 0x0f ); // limpa a primeira parte e envia a segunda 85: 86: delay_us ( 40 ); 87: return ; 88: } 89: 90: /*************************************************************************** 91: * Envio de caracter para o display 92: * 93: ***************************************************************************/ 94: 95: 96: void lcd_escreve ( char c ) 97: // envia caractere para o display 98: { 99: 100: lcd_envia_byte ( 1, c ); 101: } 102: 103: /************************************************************************ 104: * função para limpar o lcd 105: * 106: ************************************************************************/ 107: // como esta função pode vir a ser muito utilizada, transformando-a numa 108: // função deixa o código HEX menor 109: 110: void limpa_lcd () 111: { 112: lcd_envia_byte ( 0, 0x01 ); // envia a instrução para limpar o lcd 113: delay_us ( 10 );//2ms 16/04/10 114: return ; 115: } 116: 117: 118: /**************************************************************************** 119: * Inicialização do display 120: * 121: ****************************************************************************/ 122: 123: 124: void lcd_ini () 125: // rotina de inicialização do display 126: { 127: output_low ( lcd_d4 ); //garante que o pino d4 está em 0 128: output_low ( lcd_d5 ); //garante que o pino d5 está em 0 129: output_low ( lcd_d6 ); //garante que o pino d6 está em 0 130: output_low ( lcd_d7 ); //garante que o pino d7 está em 0 131: output_low ( lcd_rs ); //garante que o pino rs está em 0 132: //output_high(lcd_rw); 133: output_low ( lcd_enable ); //garante que o pino enable está em 0 134: delay_ms ( 10 );//15ms 16/04/10 135: 136: lcd_envia_nibble ( 0x03 ); // Envia comando para inicializar o display 2

137: delay_ms ( 5 ); // Aguarda 5ms para estabilizar o LCD 138: lcd_envia_nibble ( 0x03 ); // Envia comando para inicializar o display 139: delay_ms ( 5 ); // Aguarda 5ms para estabilizar o LCD 140: lcd_envia_nibble ( 0x03 ); // Envia comando para inicializar o display 141: delay_ms ( 5 ); // Aguarda 5ms para estabilizar o LCD 142: lcd_envia_nibble ( 0x02 ); // CURSOR HOME - Envia comando para zerar o 143: // contador de caracteres e retornar à posição 144: // inicial (0x80) 145: 146: delay_ms ( 1 ); // aguarda 1 ms 147: lcd_envia_byte ( 0, 0x28 ); // FUNCTION SET - Configura o LCD para 4 bits, 148: // 2 linhas, fonte 5X7 149: lcd_envia_byte ( 0, 0x0c ); // DISPLAY CONTROL - Display ligado, sem cursor 150: limpa_lcd (); // chama a função para limpar o lcd 151: lcd_envia_byte ( 0, 0x06 ); // ENTRY MODE SET - Desloca o cursor para a 152: // direita 153: delay_ms ( 1 ); 154: 155: return ; 156: 157: } 158: 159: 160: /****************************************************************************** 161: * Rotina Principal 162: * 163: *******************************************************************************/ 164: main () 165: { 166: long int valor, parcial_1, parcial_2 ; 167: float resultado, resp, med_1, med_2, med_3, med_4, med_5, med_6, med_7, med_8 ; 168: int i, media ; 169: int32 matriz_ad [] = { 176, 217, 247, 313, 368, 418, 460, 500, 530, 568, 592, 170: 625, 675, 711, 753, 777, 806, 841, 855 }; 171: int32 matriz_f [] = { 0, 30, 51, 101, 150, 200, 250, 300, 350, 401, 450, 172: 500, 603, 702, 801, 901, 1002, 1200, 1300 }; 173: int32 display ; 174: 175: porta = 0 ; 176: portb = 0 ; 177: portc = 0 ; 178: 179: // configura os tris 180: set_tris_a ( 0b11010101 ); // configuração da direção dos pinos de I/O 181: set_tris_b ( 0b00001111 ); 182: set_tris_c ( 0b11111111 ); 183: 184: 185: 186: limpa_lcd (); 187: lcd_ini (); 188: printf ( lcd_escreve," - JIG FLUXOMETRO - "); 189: 190: setup_adc_ports ( RA0_analog ); // RA0_RA1_RA3_analog 191: setup_adc ( ADC_CLOCK_INTERNAL ); 192: set_adc_channel ( 0 ); 193: 194: delay_ms ( 300 ); 195: delay_ms ( 300 ); 196: 197: limpa_lcd (); 198: lcd_ini (); 199: printf ( lcd_escreve," - # ELETROLOKOS # - "); 200: 201: delay_ms ( 300 ); 202: delay_ms ( 300 ); 203: 204: 3

205: while ( true ) 206: { 207: valor = read_adc (); // efetua a conversão A/D 208: // Se o valor é > 0,soma 1 ao valor 209: if ( valor ) 210: { 211: valor += 1 ; 212: } 213: //limpa_lcd();//lcd_escreve ('\f'); // apaga o display 214: 215: // calculo da curva de fluxo separada por intervalos entre os AD s 216: if ( valor <= 177 ) // fluxo = 0 217: { 218: limpa_lcd (); 219: printf ( lcd_escreve,"=> Fluxo = 0.0 l/min" ); 220: } 221: 222: else 223: { 224: for ( i = 0 ; i < sizeof ( matriz_ad )/ sizeof ( int ); i ++) 225: { 226: if ( valor < matriz_ad [ i ]) 227: { 228: // i--; 229: break ; 230: } 231: } 232: 233: parcial_1 = ((( matriz_f [ i ] - matriz_f [ i - 1 ])*( valor - matriz_ad [ i - 1 ])) 234: + ( matriz_f [ i - 1 ]*( matriz_ad [ i ] - matriz_ad [ i - 1 ]))); 235: parcial_2 = (( matriz_ad [ i ] - matriz_ad [ i - 1 ])* 10 ); 236: 237: resultado = (( float ) parcial_1 / parcial_2 ); 238: 239: media ++; 240: 241: if ( media == 1 ) 242: { 243: med_1 = resultado ; 244: } 245: if ( media == 2 ) 246: { 247: med_2 = resultado ; 248: } 249: if ( media == 3 ) 250: { 251: med_3 = resultado ; 252: } 253: if ( media == 4 ) 254: { 255: med_4 = resultado ; 256: } 257: if ( media == 5 ) 258: { 259: med_5 = resultado ; 260: } 261: if ( media == 6 ) 262: { 263: med_6 = resultado ; 264: } 265: if ( media == 7 ) 266: { 267: med_7 = resultado ; 268: } 269: if ( media == 8 ) 270: { 271: med_8 = resultado ; 272: } 4

273: if ( media == 9 ) 274: { 275: resp = (( med_1 + med_2 + med_3 + med_4 + med_5 + med_6 + med_7 + med_8 ) 276: media = 0 ; 277: } 278: 279: display ++; 280: if ( display = 4000000 ) 281: { 282: limpa_lcd ();//lcd_escreve ('\f'); // apaga o display 283: printf ( lcd_escreve,"=> Fluxo = %3.1f0 l/min", resp ); 284: 285: lcd_envia_byte ( 0, 0xc0 ); // vai para primeira colun 286: 287: printf ( lcd_escreve,"ad %lu", valor ); 288: display = 0 ; 289: delay_ms ( 175 ); 290: } 291: 292: } 293: 294: } 295: } 296: 297: 298: 299: 5