LDR ou qualquer outra coisa que varia a sua resistencia de acordo com algum fator externo.. podendo assim modificar o tempo de carga do capacitor e gerar um dado referente ao mesmo...Codigo em ASM (por causa da perda de formatacao coloquei o arquivo fonte no rapidshare):http://rapidshare.com/files/298393643/codigo_v1_0_b.asm;################################# - TITULO - ##########################;# Display 7 Segs, ativado de acordo com o tempo de carga do capacitor#;# Usando capacitor, potenciomentro, Resistencia,display de 7seg #;# inicio do projeto : 24/10/2009 #;# Pic utilizado 16f628A (possui 16pinos de I/O) #;#######################################################################; Definicoes de hardware;----------------------------------------------------------------------=; Mapa do Display (Catodo Comum) 1= acende 0=Apaga;; A; ########; # # pino12 RB6 --------A; F # # B pino11 RB5 --------B ; # G # pino10 RB4 --------C; # ###### # pino9 RB3 --------D; # # pino8 RB2 --------E; E # # C pino7 RB1 --------F; # # pino6 RB0 --------G; ########; D;;;Positivo do capacitor ligado no pino RA2 ---- pino 1 do pic;;VCC ligado no pino 14;GND ligado no pino 5;;RA5 pino 4;;Portas livres : RA0,RA1,RA3,RA4,RA6,RA7,RB7;;------------------------- DIRETIVAS PARA O COMPILADOR ----------------- lIST P=16f628A RADIX DEC ;Todo numero digitado ser interpretado como decimal INCLUDE __CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_OFF & _INTOSC_OSC_NOCLKOUT ;----------------------- VARIAVEIS E EQUIVALENCIAS ---------------------w_temp equ 0x23 ;Quando eu precisar de 2 valores contador equ 0x24 ;contador que armazena o valor a ser mostrado no lcdcountLO equ 0x25countHI equ 0x26;------------------------------ ENDERECO 00000 --------------------------------- org 0x0000 goto INICIO;----------------------------- INTERRUPCAO ------------------------------------- org 0x0004 incf countHI bcf intcon,T0IF retfie ;----------------------- INICIALIZACAO DO PROGRAMA --------------------- INICIO movlw 0x07 ;Desativa a opcao de comparadores nos pinos movwf cmcon ;Ra0-Ra3 (datasheet pag63-64)que bsf status,rp0 ;Vai para o banco 1 da RAM a' clrf trisb ;Portb todo como OUTPUT movlw 0xff movwf trisa ;port A inteiro como INPUT bsf option_reg,PSA ;prescale para o Timer0 ;como o option_reg inteiro fica em nl=1 ao iniciar, o prescale esta para o wdt, ;que no caso nao sera utilizado. bcf option_reg,T0CS ;utiliza o clock interno para fazer a contagem... bcf status,rp0 ;Volta para o banco 0 clrf intcon ;todas as interrupcoes desativas bsf intcon,T0IE ;Habilita a interrupacao do timer0 ;-------------------------- PROGRAMA PRINCIPAL ---------------------------------- clrf contador ;zera o contadorprincipal movf contador,w call decodifica ;pega o valor a ser impresso no display que seja correspondente ao valor de contador movwf portb ;atualiza display call atualiza_contador ;vai ver a situacao do potenciometro goto principal ;----------------------- Sub Rotina - Delay - ------------------------------------atualiza_contador call c_limpa ;garante que o capacitor tera 0V antes de comecar a carregar call c_verifica ;atualiza os valor de countHI e countLO movlw 0x08 subwf countHI,w ;countHI-9=>w btfsc status,c ;Se o valor der negativo entao tudo bem pois c=0 entao pula a proxima linha goto estouro_countHI movf countHI,w ;joga o valor de countHI em w call arruma_countHI movwf contador ; btfsc countLO,7 ;O TMR0 chegou ate a metade aproximadamente 128??? incf contador ;se sim entao soma uma no contador para ser atualizado corretamente retlw 0x00 ;Retornapara o principalestouro_countHi movlw 0x10 movwf contador ;faz o countHi ficar obrigatoriamente com o valor 9 retlw 0x00 arruma_countHI addwf PCL ;Faz com que o programa "Pule" para a linha ;com o