P. 1
Projetos úteis com PIC em C

Projetos úteis com PIC em C

|Views: 9,252|Likes:
Published by paivafrota

More info:

Published by: paivafrota on Aug 25, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

08/18/2013

pdf

text

original

Usando Conversor A/D do PIC 12F675

Através deste simples circuito, é demonstrada uma das diversas formas de se usar este PIC de apenas 8 pinos para monitorar uma tensão e passar via comunicação serial para o PC, onde um simples aplicativo, recebe os dados. Alerta-se que no circuito, não é usado um MAX232, já que o PIC apenas envia dados, não recebendo do PC, não estando assim submetido aos 12V da porta serial que podem danificar o PIC. Código fonte Esquema Básico 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)

puts(" Volts "). delay_ms(100). setup_adc_ports(pin_a4).4 MHz.nomclr #include <regs_12f6xx. puts("Voltimetro: "). setup_adc(ADC_CLOCK_INTERNAL).valor). delay_ms(1000). O circuito é relativamente simples.put. valor = read_adc(). valor = (valor * 488)/100000. delay_ms(2000). usando apenas 2 chaves NA .h> #rom 0x3ff = { 0x34b4 } main() { float valor.nowdt.nobrownout. } } PRÁTICO RELOGIO COM PIC Usando o Timer0 do PIC 16F84. assim como um display LCD 2x16 e o próprio microcontrolador. set_adc_channel(3).#fuses intrc_io. while(true) { delay_ms(500). facilmente constrói-se um relógio com relativa precisão. tendo em vista o uso de um oscilador a cristal . printf("%f". Código fonte Esquema Básico do Relógio .para ajuste da hora/minuto. valor = read_adc().

#int_timer0 void trata_t0 () { . i.////////////////////////////////////////////////////////////////////// //// // PROGRAMA RELOGIO COM TIMER0 DO PIC 16F84 // V.c> signed long int t0_conta.nowdt.put.h> #use delay(clock=4000000) #fuses xt. int8 hora=9. 2 ////////////////////////////////////////////////////////////////////// /// #include <16f84. segundo. minuto=0.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.

enable_interrupts (global | int_timer0). } } } } } void demora(void) { // funcao de atraso para evitar uso de delay afim de evitar erros no timer0 do PIC for(i==0. if (!input(pin_a3)) acertar_m(). } void acertar_h() { if (hora <23) hora++. delay_ms(300).static boolean led."). else minuto = 0.i++).i>10000. t0_conta -= 256. lcd_goto_xy(5.1). . } void acertar_m() { if (minuto<59) minuto++. hora++. delay_ms(500). else hora = 0. lcd_putc(" . lcd_init(). demora(). delay_ms(500). // subtrai 256 da contagem if (t0_conta<=0) // se a contagem é igual ou menor que zero { // soma 15625 ao valor da contagem t0_conta += 15625. delay_ms(300). while (true) { if (!input(pin_a2)) acertar_h(). lcd_putc("\f"). demora(). minuto++. delay_ms(10). delay_ms(500). segundo++. if (minuto == 60) { minuto = 1. if (hora == 24) { hora = 0.RELOGIO . if (segundo == 60) { segundo = 1. } main() { t0_conta = 15625. setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_64 ).

minuto. caso adicionado um número maior de indicadores. No projeto proposto."\n%2u:%2u:%2u". } Multiplexando Displays de 7 Segmentos Através deste simples circuito. são usados 2 displays que são multiplexados através de um PIC 16F84 que ainda conta com 2 transistores para escolha do display que estará acesso. É necessário. Espera-se que o objetivo de demonstrar de uma forma prática e didática tenha sido alcançado. demora(). é apresenta uma das formas de se multiplexar displays de 7 segmentos.} printf(lcd_putc. usando um microcontrolador PIC para isto. porém fácil de entender. a alteração dos tempos que cada display é comandado.hora. a interrupção do TIMER0 de uma forma bastante simples. Código fonte Esquema Básico do Circuito .segundo). Foi usada no programa feito em C.

int8 dado. . output_low(pin_a1).0xff. /////////////////////////////////////////////////////////// // tratar interrupção timer0 /////////////////////////////////////////////////////////// #int_timer0 void trata_t0 () { if (display) { display = 0.0xe6.0xfd. int1 display = 1.noprotect.0xe7}.0x86.0x87.h> #use delay(clock=4000000) // fixa frequencia cristal e apos fusiveis #fuses xt. // variavel boolean para determinar display acesso int8 numero = 1.#include <16f84.0xdb.put // declara tabela de valores byte const tabela[]={0xbf.nowdt.0xcf.0xed.

enable_interrupts (global | int_timer0). // pega resto da divisao e joga para display } } /////////////////////////////////////////////////////////// // funcao principal do programa /////////////////////////////////////////////////////////// main() { delay_ms(500). // liga display das dezenas e desliga unidades } else { display = 1. if(numero==100) { numero = 1. output_low(pin_a2). } } output_b(tabela[numero / 10]). setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_64 ). } delay_ms(500). // liga display das unidades e desliga dezenas output_high(pin_a1). // joga dezena para display . output_b(tabela[numero % 10]). while(1) { numero++.output_high(pin_a2).

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->