Carlos, tu idea es genial y me simplifica mucho el trabajo...te lo agradezco mucho.
Con tan solo 8 entradas lo tendria todo...
Una cuestion, cuando al PIC le toca leer la posicion del potenciometro;
1) Cambio la salida (que antes le enviaba la posicion a la que debia colocarse) por entrada mediante programacion?
2) o uso alguna entrada independiente que tenga libre en el PIC?
¿que harias tu?
He estado mirando en analog y no hay rutinas como bien decias, pero buscando en esta misma pagina he encontrado estas dos que servirian para leer y escribir:
RUTINA QUE ENVIA
;SUBRRUTINA "SPI":
;Envia el byte que viene en el registro "w" mediaante el protocolo spi.
;Utiliza los registro temporales "temp1" y "temp2"
spi movwf temp1 ;Salva el byte a transmitir en el
registro temporal "temp1"
movlw 0x08
movwf temp2 ;Inicializa el contador
bck_spi bsf p_spi,sdin ;Sube data
btfss temp1,7 ;Comprueba el bit y lo baja si es cero
bcf p_spi,sdin
nop ;Envia el bit
bsf p_spi,sclk
nop ;Da un pulso de reloj
bcf p_spi,sclk
nop
rlf temp1,f ;Rotamos a la izquierda "temp1"
decfsz temp2,f ;Comprobamos el contador, para ver si hemos enviado los 8 bits
goto bck_spi ;Si no, repetimos el bucle
bcf p_spi,sdin
return ;Fin
Debes definir para usar esta rutina, el puerto que vayas a utilizar como "p_spi" y los bits dentro del puerto, tanto de datos como de reloj, como "sdin" y "sclk". También se utilizan dos resitros temporales "temp1" y "temp2" que debes definir. Aqui va un ejemplo:
;Definición de bits
sdin equ 0x00 ;Bits de control del bus spi: Datos bit 0
sclk equ 0x01 ;Reloj bit 1
;Puertos del PIC
porta equ 0x05
p_spi equ 0x05 ;Puerto A es el puerto utilizado para el spi
portb equ 0x06
;Declaración de variables
temp1 equ 0x20
temp2 equ 0x21
RUTINA QUE RECIBE
;SUBRRUTINA "SPI_RX":
;Recibe un byte por el bus SPI y devuelve el resultado en el registro "w"
;Utiliza los registro temporales "temp1" y "temp2" y el bit de carry del registro "status"
spi_rx movlw 0x08
movwf temp2 ;Inicializa el contador
bck_spi btfss p_spi,sclk
goto bck_spi
bsf status,0
btfss p_spi,sdin ;Copia el valor de data en el carry
bcf status,0
rlf temp1,f ;Para guardarlo en el temporal
bck_sp2 btfsc p_spi,sclk
goto bck_sp2
decfsz temp2,f ;Comprobamos el contador, para ver si hemos recibido los 8 bits
goto bck_spi ;Si no, repetimos el bucle
movf temp1,w
return ;Fin
Serian validas? Cuentan 8 bits y para mi caso serian mas bits, pero en el fondo me serviria no? Saludos!