Buscar

Experimentação utilizando o PIC16F877A

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.

Continue navegando