Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE DO OESTE DE SANTA CATARINA– UNOESC ÁREA DAS CIÊNCIAS EXATAS E DA TERRA AVELINO MORGANTI CAROLINA FRANCO CARLOS STÖCKL EXPERIMENTAÇÃO UTILIZANDO O PIC16F877A Joaçaba 2013 1 AVELINO MORGANTI CAROLINA FRANCO CARLOS STÖCKL EXPERIMENTAÇÃO UTILIZANDO O PIC16F877A Trabalho apresentado à disciplina de Sistemas Embarcados, Curso de Engenharia da Computação. Área das Ciências Exatas e da Terra, Universidade do Oeste de Santa Catarina. Professor: Geovani Rodrigo Scolaro Joaçaba 2013 2 Sumário 1 INTRODUÇÃO .................................................................................................................. 3 1.1 OBJETIVOS GERAIS ................................................................................... 3 1.2 OBJETIVOS ESPECIFICOS DA EXPERIENCIA: ...................................... 3 2 MATERIAIS UTILIZADOS ............................................................................................. 4 3 METODOLOGIA E RESULTADOS ............................................................................... 5 3.1 Exercício 1 ...................................................................................................... 5 3.2 Exercício 2 ...................................................................................................... 7 3.3 Exercício 3 ..................................................... Erro! Marcador não definido. 3.4 Exercício 4 ..................................................... Erro! Marcador não definido. 3.5 Exercício 5 ..................................................... Erro! Marcador não definido. 4 CONCLUSÃO .................................................................................................................. 10 3 1 INTRODUÇÃO 1.1 OBJETIVOS GERAIS O objeto geral da experiência foi realizar a conversão A/D do PIC16F877A, ele permite a conversão de um sinal de entrada analógico para um binário de 10 bits. Primeiro precisamos desenvolver uma rotina de conversão A/D para converter a tensão fornecida pelo potenciômetro. E após, desenvolver uma rotina de conversão A/D para converter a tensão fornecida pelo sensor de temperatura LM35. 1.2 OBJETIVOS ESPECIFICOS DA EXPERIENCIA: � Desenvolver uma rotina de conversão A/D recebendo a tensão fornecida por um potenciômetro; � Desenvolver uma rotina de conversão A/D para converter a tensão forneceda pelo sensor de temperatura LM35; � Fazer a analise do experimento acompanhando os resultados pelo XCTU. 4 2 MATERIAIS UTILIZADOS Os materiais utilizados para a experiencia foram: • Microcontrolador PIC 16F877A • Cristal oscilador de 4MHz • Potenciômetro de 1K Omn • Sensor de Temperatura LM35 • 2 Capacitores ceramicos de 15pF • 2 Resistores de 10Komns • Capacitor de 1µF • Notebook com os seguintes softwares instalados: o Proteus o MikroC o X-CTU 5 3 METODOLOGIA E RESULTADOS Iniciamos nosso experimento estudando um pouco sobre a lógica da conversão A/D. Vimos que o microcontrolador PIC16F877A possui internamente um conversor A/D com resolução de 10 bits, sendo assim necessário 2 bytes para apresentar a informação convertida. Como utilizaremos a linguagem C para implementar as rotinas de conversão, precisamos usar o comando ADC_Init(); esse comando indica para o microcontrolador que o conversor AD deve ser inicializado. Também utilizamos o comando unsigned ADC_Read(unsigned short channel); comando que realiza a leitura de dados analógicos de acordo com o canal especificado pelo parâmetro channel da função, retornando o valor convertido como parâmetro. 3.1 EXERCÍCIO 1 Desenvolver uma rotina de conversão A/D para converter a tensão fornecida pelo potenciômetro. //Início da declaração de variáveis. unsigned int valor_lido; unsigned int temp; unsigned int temperatura; char aux[7]; void main(){ ADCON0 = 0x02; //Configura a entrada AN2 como analógica. CMCON = 0x07; //Desativa comparadores. TRISA = 0xFF; //Configura PORTA como entrada TRISC = 0; //Configura PORTA como saída TRISB = 0; //Configura PORTA como saída UART1_Init(9600); //Inicializa a porta serial. ADC_Init(); //Inicialização do Conversor AD. while(1){ //Realiza a leitura do pino analógico AN2. valor_lido = Adc_Read(2); //Faz a conversão do valor de tensão lido para uma temperatura correspondente. temperatura = (valor_lido * 0.0048828125) * 100; 6 //Converte a centena da temperatura lida. temp = (temperatura / 100) % 10; aux[0] = (48 + temp); //Armazena na 1ª posição do array. //Converte a dezena da temperatura lida. temp = (temperatura / 10); aux[1] = (48 + temp); //Armazena na 2ª posição do array. //Converte a unidade da temperatura lida. temp = temperatura % 10; aux[2] = (48 + temp); //Armazena na 3ª posição do array. //Monta os demais parametros da medida da temperatura. aux[3] = '.'; aux[4] = 'C'; aux[5] = '\0'; IntToStr(temp,aux); //Converte de Inteiro para String UART1_Write_Text(aux); //Envia via UART o conteúdo do array aux Delay_ms(500); UART1_Write(13); //Envia um caractere de quebra de linha (Enter) } } 7 3.2 EXERCÍCIO 2 Desenvolver uma rotina de conversão A/D para converter a tensão fornecida pelo sensor de temperatura LM35. //Início da declaração de variáveis. unsigned int valor_lido; unsigned int temp; unsigned int temperatura; char aux[7]; void main(){ ADCON0 = 0x02; //Configura a entrada AN2 como analógica. CMCON = 0x07; //Desativa comparadores. TRISA = 0xFF; //Configura PORTA como entrada TRISC = 0; //Configura PORTA como saída TRISB = 0; //Configura PORTA como saída UART1_Init(9600); //Inicializa a porta serial. ADC_Init(); //Inicialização do Conversor AD. while(1){ //Realiza a leitura do pino analógico AN2. valor_lido = Adc_Read(2); //Faz a conversão do valor de tensão lido para uma temperatura correspondente. temperatura = (valor_lido * 0.0048828125) * 100; //Converte a centena da temperatura lida. temp = (temperatura / 100) % 10; 8 aux[0] = (48 + temp); //Armazena na 1ª posição do array. //Converte a dezena da temperatura lida. temp = (temperatura / 10); aux[1] = (48 + temp); //Armazena na 2ª posição do array. //Converte a unidade da temperatura lida. temp = temperatura % 10; aux[2] = (48 + temp); //Armazena na 3ª posição do array. //Monta osdemais parametros da medida da temperatura. aux[3] = '.'; aux[4] = 'C'; aux[5] = '\0'; IntToStr(temperatura,aux); //Converte de Inteiro para String UART1_Write_Text(aux); //Envia via UART o conteúdo do array aux Delay_ms(500); UART1_Write(13); //Envia um caractere de quebra de linha (Enter) } } 9 10 4 CONCLUSÃO Com essas experiências, aprendemos a desenvolver uma rotina que efetua leituras apartir de uma entrada analógica e fizemos a conversão desse valor utilizando uma escala de 10mV para cada grau de temperatura, para enviar os dados de temperatura do LM35 via comunicação UART. Usamos o mesmo principio para fazer a experiencia usando um potenciometro para os valores de entrada no lugar do LM35, com tensão de 0 a 5V sendo isso equivalente a 0 a 255 em valores digitais.
Compartilhar