LusoRobótica - Robótica em Português
Sistemas específicos => PIC => Tópico iniciado por: paulo_mendes em 25 de Janeiro de 2011, 12:52
-
Boas pessoal...
Estou a tentar fazer um código em microC.
Que consiste em configurar e programar uma entrada analógica do microcontrulador ,monitorizar, em tempo-real, o valor da tensão de alimentação do circuito, a bateria é de 9,6 volts, e aparecer no LCD em percentagem.
- Leitura sequencial de várias entradas analógicas.
A pic que utilizo é 16F887.
Junto envio o circuito.
Alguem poderia ajudar?
Cumprimentos
-
O que já tens feito?
-
Boas...
Obrigado pela colaboração,acabei agora mesmo de o concluir...
Abraço a todos.. ;)
-
Boas...
Obrigado pela colaboração,acabei agora mesmo de o concluir...
Abraço a todos.. ;)
Epa... boa colaboração!! LOL
Ja agora.. vai ao sitio das apresentações e faz a tua apresentação.. e coloca entao o que fizeste relativamente ao LCD, pois a tua duvida pode ser a duvida de alguem !
-
Aqui está o código.
// LCD module connections
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections
#include "built_in.h"
unsigned char ch,resultado, *frase; //
unsigned int t; // Declaração das variáveis ("unsigned int adc_rd;")
char a[17]; //
long tlong; //
void main() {
INTCON = 0; // Todas as interrupções desabilitadas
ANSEL = 0x04; // Pin RA2 é configurado como uma entrada analógica
TRISA = 0x04;
ANSELH = 0; // Os pinos restantes são configurados como digital
Lcd_Init(); // inicialização do display doLCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Comando LCD(cursor off)
Lcd_Cmd(_LCD_CLEAR); // Comando LCD (Limpar LCD)
frase= " ESER 2010 "; // Definir a primeira mensagem
Lcd_Out(1,1,frase); // Escreve a primeira mensagem na primeira linha
frase = " Fábio, Paulo, Maciel "; //Definir a segunda mensagem
Lcd_Out(2,1,frase); // Escreve a segunda mensagem na segunda linha
TRISA = 0xFF; // Todas as portas A são configuradas como entradas
Delay_ms(500);
ADCON1 = 0x82; // A / D de referência de tensão é VCC
ANSEL =0b00000001; //o pino RA0 como entrada
frase= "volt :"; // Definir a terceira mensagem
while (1) {
t = ADC_Read(0); // conversão A/D. Pin RA0 é de entrada.
Lcd_Out(2,1,frase); // Escreve o resultado na segunda linha
tlong = (long)t * 9600; // Converte os resultados em milivolts
tlong = tlong / 1023; // 0..1023 -> 0-5000mV
ch = t / 1000; // conversão de volts para milivolts
Lcd_Chr(2,7,48+ch); // Escreve o resultado em formato ASCII
ch = (tlong / 960) % 10; // Conversão das cenenas de milivolts
Lcd_Chr_CP(48+ch); // Escreve o resultado em formato ASCII
ch = (tlong / 96) % 10; // Conversão para dezenas de milivolts
Lcd_Chr_CP(48+ch);
Lcd_Chr_CP('.'); // Escreve o resultado em formato ASCII
ch = tlong % 10; // Extract digits for millivolts
Lcd_Chr_CP(48+ch); // Escreve o resultado em formato ASCII
ch*100;
Lcd_Chr_CP('%');
Delay_ms(1);
}
Espero que seja util a alguém.
Abraço malta.
-
paulo ainda bem que conseguiste ;)
Mais uma vez desculpa por nao te ter ajudado logo, mas como te disse, ando muito atrasado num projecto tambem. Mas agora ja sabes que quando nao conseguires, sempre podes passar aqui no forum que certamente teras ajuda :D
Abraço
-
O unico problema desse código é que é 100% dependente do teu compilador, mas desde que funcione, ainda bem.