objetivo do projeto é gerar fequencias de audio, ajustaveis atravez dos botões de + e - , gostaria que sua frequencia variase entra 10hz ate o maximo que conseguir, o codifgo fonte que coloque esta variando mais não esta linear, gostaria de um help do pessoal ai do forum
aqui esta o circuito

aqui esta o codigo fonte
- Código: Selecionar todos
#include <p16f628a.inc>
__CONFIG _BODEN_ON & _CP_OFF & _WDT_OFF & _LVP_OFF
& _MCLRE_OFF & _XT_OSC
errorlevel -302
errorlevel -305
; CONFIGURAÇÕES DOS BANCOS
; RP0 | RP1
; 0 | 0 => BANK0
; 0 | 1 => BANK1
; 1 | 0 => BANK2
; 1 | 1 => BANK3
; DEFINIÇÃO DOS BANCOS
#DEFINE BANK0 BCF STATUS, RP0
#DEFINE BANK1 BSF STATUS, RP0
; ESPAÇO RESERVADO PARA OS REGISTRADORES
; CBLOCK 0x20
VARIAVEL1 ORG 0X20
VARIAVEL2 ORG 0X21
CONT_AUX1 ORG 0X22
CONT_AUX2 ORG 0X23
TEMPO1 ORG 0X24
TEMPO0 ORG 0X25
FILTRO_BOTOES ORG 0X26 ; FILTRO PARA RUIDOS
; ENDC
; VETOR
ORG 0x00 ; ENDEREÇO DE INICIO
GOTO CONFIGURA
ORG 0x04 ; ENDEREÇO DE INTERUPÇÃO
GOTO LOOP
delayTmr0:
btfss INTCON,T0IF
goto $-1
MOVFW VARIAVEL1
movwf TMR0
bcf INTCON,T0IF
RETURN
INCRE:
CALL DELAY_150MS
DECFSZ FILTRO_BOTOES,1
GOTO INCRE
INCF VARIAVEL1,F
MOVLW D'10'
MOVWF FILTRO_BOTOES
RETURN
DECREM:
CALL DELAY_150MS
DECFSZ FILTRO_BOTOES,1
GOTO DECREM
DECF VARIAVEL1,F
MOVLW D'10'
MOVWF FILTRO_BOTOES
RETURN
CONFIGURA
BANK0 ; MUDA PARA O BANK0, ONDE ESTÃO OS PORTS
MOVLW B'00000111'
MOVWF CMCON
BCF RCSTA,SPEN
BANK1 ; MUDA PARA O BANK1, ONDE ESTÃO OS TRIS
MOVLW B'11111111' ; SETA O TRISB COMO SAÍDA
MOVWF TRISB ; MOVE DO WORK PARA FILE TRISB
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF OPTION_REG
BANK0 ; MUDA PARA O BANK0, ONDE ESTÃO OS PORTS
INICIO:
CLRF PORTB
CLRF PORTA
MOVLW D'255'
MOVWF VARIAVEL1
MOVLW D'10'
MOVWF FILTRO_BOTOES
LOOP:
BSF PORTA,0
CALL delayTmr0
BCF PORTA,0
CALL delayTmr0
BTFSS PORTB,0
CALL INCRE
BTFSS PORTB,1
CALL DECREM
GOTO LOOP
DELAY_150MS:
MOVLW .50
MOVWF CONT_AUX1
LODOP:
CALL DELAY_1MS
DECFSZ CONT_AUX1
GOTO LODOP
RETURN
DELAY_1MS:
MOVLW .248
MOVWF CONT_AUX2
LOOP2:
NOP ; NÃO OPERA, NÃO FAZ NADA, SÓ PERDE O TEMPO DE 1MS
DECFSZ CONT_AUX2
GOTO LOOP2
RETURN
END