Hay muchos hilos abiertos sobre LCD, de hecho mas arriba de este post hay uno. Suerte.
Consegui mover el potenciometro como dije mas arriba, pero no logro que haga lo que quiero. Ahora estoy probando el siguiente codigo pero tampoco obedece, sino mas bien hace lo que quiere.
Tengo desactivado el pulsador. El clock del pote esta conectado con un pin del PIC que hace de reloj, todo via software. Envio 11bits solamente, que es lo que entiende el pote.
He desactivado la configuracion del SPI porque lo estoy haciendo en modo manual.
Echadme una manilla por favor.
;---------------Encabezado-------------
LIST p=16f876
radix hex
INCLUDE <P16F876.INC>
;------------mapa de memoria---------
reg1 equ 0x20 ; Estos 3 registros los utilizaré
reg2 equ 0x21 ; para hacer el retardo
reg3 equ 0x22
R_ContB equ 0x23
R_ContA equ 0x24
R_ContC equ 0x25
R_ContE equ 0x28
R_ContD equ 0x29
temp1 equ 0x26
temp2 equ 0x27
#DEFINE UP PORTB,1 ; direccion del pulsador UP
#DEFINE DOWN PORTB,2 ; direccion del pulsador DOWN
#DEFINE MIDS PORTB,3
#DEFINE CS1 PORTC,0 ; direccion del pin de seleccion del CHIP 1
#DEFINE PR PORTC,2 ; pin del PRESET para poner los potes a midscale
#DEFINE SHDN PORTC,6
POT_GANANCIA EQU .32
GR_GA macro
bcf PORTC,0 ; pone un 0 para activar pot graves-ganancia
endm
NO_CHIP macro
bsf PORTC,0 ; pone un 1 para desactivar pot graves-ganancia
endm
;-------Configuración de puertos-------
reset org 0x00 ; origen del programa, aquí comenzará siempre que ocurra un reset
goto inicio ; salta a "inicio"
inicio bcf STATUS,RP0
bcf STATUS,RP1
clrf POT_GANANCIA
clrf PORTA
clrf PORTB
clrf PORTC
bsf STATUS,RP0 ; banco1
movlw 0x06
movwf ADCON1
movlw 0XCF
movwf TRISA
movlw b'11111111'
movwf TRISB ; y pasa el valor a trisb
movlw b'00010000'
movwf TRISC
; movlw B'10000000'
; movwf SSPSTAT ; cargo el reguistro SSPSTAT con el valor anterior
bcf STATUS,RP0 ; banco 0
; movlw B'00110010' ; no collision, no overflow, habilito el puerto SPI, clock inactivo en nivel alto, FOSC/64
; movwf SSPCON ; pasamos estos valores a control SPI
call Retardo_1s
NO_CHIP ; llama a la macro de deshabilitar los 4 potes.
call Retardo_1s
bsf PORTC,1 ; ponemos un 1 en LED para encenderlo y ver que funciona el circuito
bsf PORTC,6 ; ponemos un 1 en SHUTDOWN
bsf PORTC,2 ; ponemos un 1 en PRESET
call Retardo_1s
GR_GA
call Retardo_1s
bcf STATUS,RP1
bcf STATUS,RP0 ; banco 0
bit1 bsf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit2 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit3 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit4 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit5 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit6 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit7 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit8 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit9 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit10 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
bit11 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms
NO_CHIP
call Retardo_1s
test goto test
Retardo_1s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_1Decima
movwf R_ContC ; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
movlw d'100' ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
movwf R_ContB ; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno
nop ; Aporta KxMxNx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina.
decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
Retardo_100ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardos_ms
movwf R_ContD ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
movlw d'249' ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
movwf R_ContE ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
nop ; Aporta KxMx1 ciclos máquina.
decfsz R_ContE ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina.
decfsz R_ContD ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina
;------------------------------------------
end ; se acabó
;------------------------------------------