Escolar Documentos
Profissional Documentos
Cultura Documentos
Projetos Uteis Com PIC em C
Projetos Uteis Com PIC em C
Atravs deste simples circuito, demonstrada uma das diversas formas de se usar este
PIC de apenas 8 pinos para monitorar uma tenso e passar via comunicao serial
para o PC, onde um simples aplicativo, recebe os dados. Alerta-se que no circuito,
no usado um MAX232, j que o PIC apenas envia dados, no recebendo do PC,
no estando assim submetido aos 12V da porta serial que podem danificar o PIC.
Cdigo fonte
Esquema Bsico do Circuito
// *********************************************
// programa teste de voltimetro com pic 8 pinos
// v. 1
// *********************************************
#include <12f675.h>
#device ADC=10
#use delay(clock=4000000)
#use rs232(baud=2400, bits=8,parity=n,xmit=pin_a1,rcv=pin_a2,invert)
#fuses intrc_io,nowdt,put,nobrownout,nomclr
#include <regs_12f6xx.h>
#rom 0x3ff = { 0x34b4 }
main()
{
float valor;
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(pin_a4);
set_adc_channel(3);
delay_ms(2000);
puts("Voltimetro: ");
valor = read_adc();
while(true)
{
delay_ms(500);
valor = (valor * 488)/100000;
printf("%f",valor);
delay_ms(1000);
puts(" Volts ");
delay_ms(100);
valor = read_adc();
}
//////////////////////////////////////////////////////////////////////
////
// PROGRAMA RELOGIO COM TIMER0 DO PIC 16F84
// V. 2
//////////////////////////////////////////////////////////////////////
///
#include <16f84.h>
#use delay(clock=4000000)
#fuses xt,nowdt,put,noprotect
#define lcd_enable pin_b3
#define lcd_rs pin_b2
#define lcd_d4 pin_b4
#define lcd_d5 pin_b5
#define lcd_d6 pin_b6
#define lcd_d7 pin_b7
#include <lcd_acpel.c>
signed long int t0_conta;
int8 hora=9, minuto=0, segundo, i;
#int_timer0
void trata_t0 ()
{
printf(lcd_putc,"\n%2u:%2u:%2u",hora,minuto,segundo);
demora();
#include <16f84.h>
#use delay(clock=4000000) // fixa frequencia cristal e apos fusiveis
#fuses xt,noprotect,nowdt,put
// declara tabela de valores
byte const
tabela[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xe7};
int1 display = 1; // variavel boolean para determinar display acesso
int8 numero = 1;
int8 dado;
///////////////////////////////////////////////////////////
// tratar interrupo timer0
///////////////////////////////////////////////////////////
#int_timer0
void trata_t0 ()
{
if (display) {
display = 0;
output_low(pin_a1);
}
else {
display = 1;
output_low(pin_a2); // liga display das unidades e desliga
dezenas
output_high(pin_a1);
output_b(tabela[numero % 10]); // pega resto da divisao e
joga para display
}
}
///////////////////////////////////////////////////////////
// funcao principal do programa
///////////////////////////////////////////////////////////
main()
{
delay_ms(500);
setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_64 );
enable_interrupts (global | int_timer0);
while(1) {
numero++;
if(numero==100) {
numero = 1;
}
delay_ms(500);
}
}