Autor Tema: Mesa de mezclas  (Leído 21816 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Mesa de mezclas
« Respuesta #60 en: 25 de Febrero de 2006, 14:58:00 »
Hola fito20, aparentemente la secuencia que utilizaras esta correcta, yo me e equivocado en el comentario del post anterior, lo único que no me queda en claro de mirar le datasheet es el uso del pin CS, no creo que se tenga que poner a 1 para que envíe los datos por la salida, pero como dije, no estoy seguro, de todas formas ya lo probaras tu en la practica.

Un saludo.

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Mesa de mezclas
« Respuesta #61 en: 26 de Febrero de 2006, 13:50:00 »
Ok Carlos...mañana subo parte del codigo

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Mesa de mezclas
« Respuesta #62 en: 27 de Febrero de 2006, 05:33:00 »
;---------------Encabezado-------------

LIST   p=16f876       
radix   hex       

;------------mapa de memoria---------

status   equ   0x03      ; Aquí le asignamos nombres a los
trisa   equ   0x05      ; registros indicando
porta   equ   0x05
trisb   equ   0x06      ; la posición
portb   equ   0x06      
trisc   equ   0x07
portc   equ   0x07      ; en la que se encuentran

temp1   equ   0x20      ; temporal 1
temp2   equ   0x21      ; temporal 2

cont   equ   0x20      ; defino contador

sspcon   equ   0x14      ; control SPI
sspstat   equ   0x94      ; estado SPI
sspbuf   equ   0x13      ; buffer SPI


; INICIO


reset   org   0x00      ; origen del programa, aquí comenzaré
            ; siempre que ocurra un reset
   goto    inicio      ; salto a "inicio"
   org   0x05      ; origen del código de programa
inicio   bsf   status,5   ; pongo rp0 a 1 y paso al banco1
   movlw   b"00000"   ; cargo W con 00000 salidas
   movwf   trisa      ; y paso el valor a trisa puerto A display
   movlw   b"11111111"   ; cargo W con 11111111 entradas
   movwf   trisb      ; y paso el valor a trisb puerto B interruptores
   movlw   b"00010000"   ; cargo W con 00010000
   movwf   trisc      ; y paso el valor a trisc puerto C solo entrada SPI data in
   bcf   status,5   ; pongo rp0 a 0 y regreso al banco0

   clrf   portb      ; limpio el puerto B
   clrf   cont      ; limpio el contador   

   movlw   b"00110000"   ; no collision, no overflow, autoconfigure, clock high level, FOSC/4
   movwf   sspcon      ; pasamos estos valores a control SPI



; ORDENAR LECTURA DEL POT GRAVES


   bsf   portc,1      ; pone un 1 para desactivar pot medios-altos
   bcf   portc,0      ; pone un 0 para activar pot graves-ganancia

   movlw   b"10010001"   ; leer memoria EEMEM RDAC2 graves
   movwf   temp1      ; la pasamos a temp1
   movlw   0x08
   movwf   temp2      ; Inicializa el contador

spi   bsf   portc,5      ; Sube data
   btfss   temp1,7      ; Comprueba el bit y lo baja si es cero
   bcf   portc,5
   nop         ; Envia el bit
   bsf   portc,3
   nop         ; Da un pulso de reloj
   bcf   portc,3
   nop
   rlf   temp1,f      ; Rotamos a la izquierda "temp1"
   decfsz   temp2,f      ; Comprobamos el contador, para ver si hemos enviado los 8 bits
   goto   spi      ; Si no, repetimos el bucle
   bcf   portc,5
   return         ; Fin

   
   movlw   b"00000000"   ; el resto de bits son X, la cadena es de 16 bits
   movwf   temp1      ; la pasamos a temp1
   movlw   0x08
   movwf   temp2      ; Inicializa el contador

spi2   bsf   portc,5      ; Sube data
   btfss   temp1,7      ; Comprueba el bit y lo baja si es cero
   bcf   portc,5
   nop         ; Envia el bit
   bsf   portc,3
   nop         ; Da un pulso de reloj
   bcf   portc,3
   nop
   rlf   temp1,f      ; Rotamos a la izquierda "temp1"
   decfsz   temp2,f      ; Comprobamos el contador, para ver si hemos enviado los 8 bits
   goto   spi2      ; Si no, repetimos el bucle
   bcf   portc,5
   return         ; Fin

   

; LEER POSICION POT GRAVES


   bsf   portc,0      ; pone un 1 para desactivar pot graves-ganancia

spi_cnt   movlw   0x08
   movwf   temp2      ;Inicializa el contador

spi_lee   btfss   portc,3
   goto   spi_lee
   bsf   status,0
   btfss   portc,4      ;Copia el valor de data en el carry
   bcf   status,0
   rlf   temp1,f      ;Para guardarlo en el temporal

spi_bck   btfsc   portc,3
   goto   spi_bck
   decfsz   temp2,f      ;Comprobamos el contador, para ver si hemos recibido los 8 bits
   goto   spi_lee      ;Si no, repetimos el bucle
   movf   temp1,w
   return         ;Fin. Tenemos la posicion del POT GRAVES en el registro w



MOSTRAR POSICION EN EL LCD





test   btfsc   portb,0      ; Si alguien presiona interruptor 1 CAMBIO
   call   cambio      ; voy a etiqueta cambio
   btfsc   portb,1      ; si alguien presiona interruptor 2 UP
   call   up      ; voy a etiqueta up
   btfsc   port,2      ; si alguien presiona interruptor 3 DOWN
   call   down      ; voy a etiqueta down
   btfsc   port,3      ; si alguien presiona interruptor 4 MEM1
   call   mem1      ; voy a etiqueta mem1
   btfsc   port,4      ; si alguien presiona interruptor 5 MEM2
   call   mem2      ; voy a etiqueta mem2
   btfsc   port,5      ; si alguien presiona interruptor 6 MEM3
   call   mem3      ; voy a estiqueta mem3
   btfsc   port,6      ; si alguien presiona interruptor 7 MEM4
   call   mem4      ; voy a estiqueta mem4
   btfsc   port,7      ; si alguien presiona interruptor 8 MEM5
   call   mem5      ; voy a estiqueta mem5
   







DUDAS:


1) El clock del PIC que lo genero a traves de un cristal de cuarzo 4MHz?

2) Esta bien configurado sspcon? que es FOSC/4?

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Mesa de mezclas
« Respuesta #63 en: 02 de Marzo de 2006, 17:28:00 »
Hola fito20, el programa que propones, aparte de no funcionar de manera correcta tú implementas la comunicación SPI por medio de software pudiendo esta realizarse por medio de hardware, acá te dejo un programita para el uso y configuración del modulo SSP:

Codigo:
;---------------Encabezado--------------------------------------------------------------------------

   LIST      P = 16F876
   INCLUDE      <P16F876.INC>

;------------Configuración de bits------------------------------------------------------------------
__CONFIG   _CP_OFF&_DEBUG_OFF&_WRT_ENABLE_ON&_CPD_OFF&_LVP_OFF&_BODEN_ON&_PWRTE_ON&_WDT_OFF&_XT_OSC

;------------Configuración de pines-----------------------------------------------------------------
#DEFINE      CAMBIO   PORTB,0       ; direccion del pulsador CAMBIO
#DEFINE      UP   PORTB,1      ; direccion del pulsador UP
#DEFINE      DOWN   PORTB,2      ; direccion del pulsador DOWN
#DEFINE      MEM1   PORTB,3      ; direccion del pulsador MEM1
#DEFINE      MEM2   PORTB,4      ; direccion del pulsador MEM2
#DEFINE      MEM3   PORTB,5      ; direccion del pulsador MEM3
#DEFINE      MEM4   PORTB,6      ; direccion del pulsador MEM4
#DEFINE      MEM5   PORTB,7      ; direccion del pulsador MEM5

#DEFINE      CS1   PORTC,0      ; direccion del pin de seleccion del CHIP 1
#DEFINE      CS2   PORTC,1      ; direccion del pin de seleccion del CHIP 2
#DEFINE      SCK   PORTC,3      ; pin del CLOCK para la comunicacion SPI
#DEFINE      SDI   PORTC,4      ; pin de entrada de datos para la comunicacion SPI
#DEFINE      SDO   PORTC,5      ; pin de salida de datos para la comunicacion SPI

;------------Definicion de memoria RAM--------------------------------------------------------------
POT_GANANCIA   EQU   .32
POT_GRAVES   EQU   .33

;------------Definicion de macros-------------------------------------------------------------------
GR_GA   macro
   bcf   PORTC,0         ; pone un 0 para activar pot graves-ganancia
   bsf   PORTC,1         ; pone un 1 para desactivar pot medios-altos
   endm

ME_AL   macro
   bsf   PORTC,0         ; pone un 1 para desactivar pot graves-ganancia
   bcf   PORTC,1         ; pone un 0 para activar pot medios-altos
   endm

NO_CHIP   macro
   bsf   PORTC,0         ; pone un 1 para desactivar pot graves-ganancia
   bsf   PORTC,1         ; pone un 1 para desactivar pot medios-altos
   endm

;---------------------------------------------------------------------------------------------------
   ORG   .0         ; vector de RESET
   goto   INICIO         ;
   ORG   .4         ; vector de INTERRUPCION
   goto   INICIO         ;

;---------------------------------------------------------------------------------------------------
OUTPUT   movwf   SSPBUF         ; Coloca el dato de W en wl bufer
RET   bsf   STATUS,RP0      ; selecciona el banco 1
   btfss   SSPSTAT,BF      ; verifica si la recepcion termino
   goto   RET         ; si no a terminado regresa a RET
   bcf   STATUS,RP0      ; selecciona el banco 0
   movf   SSPBUF,W         ; coloca el dato recibido en W
   return            ; retorna de la sub-rutina

;---------------------------------------------------------------------------------------------------
;SENSADO DE PULSADORES
TEST   btfsc   CAMBIO         ; Si alguien presiona interruptor 1 CAMBIO
   call   SUB_CAMBIO      ; voy a etiqueta cambio
   btfsc   UP         ; si alguien presiona interruptor 2 UP
   call   SUB_UP         ; voy a etiqueta up
   btfsc   DOWN         ; si alguien presiona interruptor 3 DOWN
   call   SUB_DOWN         ; voy a etiqueta down
   btfsc   MEM1         ; si alguien presiona interruptor 4 MEM1
   call   SUB_MEM1         ; voy a etiqueta mem1
   btfsc   MEM2         ; si alguien presiona interruptor 5 MEM2
   call   SUB_MEM2         ; voy a etiqueta mem2
   btfsc   MEM3         ; si alguien presiona interruptor 6 MEM3
   call   SUB_MEM3         ; voy a estiqueta mem3
   btfsc   MEM4         ; si alguien presiona interruptor 7 MEM4
   call   SUB_MEM4         ; voy a estiqueta mem4
   btfsc   MEM5         ; si alguien presiona interruptor 8 MEM5
   call   SUB_MEM5         ; voy a estiqueta mem5
   return

;---------------------------------------------------------------------------------------------------
INICIO   clrf   PORTB         ; limpio el puerto B

   bsf   STATUS,RP0      ; pongo rp0 a 1 y paso al banco1
   bcf   STATUS,RP1
   movlw   b"11100000"      ; cargo W con 00000 salidas
   movwf   TRISA         ; y paso el valor a trisa puerto A display
   movlw   b"11111111"      ; cargo W con 11111111 entradas
   movwf   TRISB         ; y paso el valor a trisb puerto B interruptores
   movlw   b"00010000"      ; cargo W con 00010000
   movwf   TRISC         ; y paso el valor a trisc puerto C solo entrada SPI data in
   movlw   B"10000000"      ;
   movwf   SSPSTAT         ; cargo el reguistro SSPSTAT con el valor anterior
   bcf   STATUS,RP0      ; pongo rp0 a 0 y regreso al banco0

   NO_CHIP            ; llama a la macro de deshabilitar los 4 potes.
   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

; LEER POSICION POT GANANCIA
   GR_GA            ; llama a la macro de habilitar el pote. de graves-ganancia
   movlw   B"10010000"      ; coloca el byte para leer memoria EEMEM RDAC1 graves
   call   OUTPUT         ; transmite el byte anterior
   movlw   B"00000000"      ; coloca 8 bits 0 para generar el clock
   call   OUTPUT         ; transmite el byte anterior
   movwf   POT_GANANCIA      ; el dato de W lo pasa a la memoria POT_GANANCIA
; LEER POSICION POT GRAVES
   movlw   B"10010001"      ; coloca el byte para leer memoria EEMEM RDAC2 graves
   call   OUTPUT         ; transmite el byte anterior
   movlw   B"00000000"      ; coloca 8 bits 0 para generar el clock
   call   OUTPUT         ; transmite el byte anterior
   movwf   POT_GRAVES      ; el dato de W lo pasa a la memoria POT_GRAVES
   NO_CHIP            ; llama a la macro de deshabilitar los 4 potes.

   goto   $

;---------------------------------------------------------------------------------------------------
   END


Espero te sea de utilidad, lo que no entiendas solo tienes que consultar.

Un saludo

Atte. CARLOS
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Mesa de mezclas
« Respuesta #64 en: 03 de Marzo de 2006, 05:22:00 »
Muchisimas gracias Carlos, ya te estaba echando de menos por aqui...claro que me sirve...es muchisimo mas facil asi...

Le voy a echar un ojo y te comento las dudas que tenga. Un saludo y muchisimas gracias por tu tiempo

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Mesa de mezclas
« Respuesta #65 en: 03 de Marzo de 2006, 05:46:00 »
Hola fito20, en realidad estaba ausentado por problemas con mi servicio de internet, no es que te haya dejado sin ayuda.

Un saludo.

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Mesa de mezclas
« Respuesta #66 en: 03 de Marzo de 2006, 08:23:00 »
Ok Carlos, no te preocupes.

Tu programa esta muy bien organizado usando macros.

No es necesario definir las variables a una direccion de memoria (mapa de memoria) como por ejemplo:

status       eq       0x20

O eso debo añadirselo al codigo que han puesto arriba?

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Mesa de mezclas
« Respuesta #67 en: 03 de Marzo de 2006, 09:35:00 »
Carlos, ya tengo parte del codigo programado en base a modelo.

Sobre todo quiero que le eches un ojo a como hago el cambio de un potenciometro a otro al pulsar el interruptor de CAMBIO.

Lo que he hecho es memorizar en un contador un 1 despues de la lectura del GAIN. Asi, para despues de la lectura del GRAVES coloco un 2, despues de la lectura del MEDIOS un 3 y despues de la lectura de ALTOS, un 0.


Para 0: 00000000
Para 1: 00000001
Para 2: 00000010
Para 3: 00000011

Cuando pulsamos CAMBIO, se comprueba el contador. Se mira primero el 2º bit, si es 1 puede ser medios-altos, asi que nos vamos a MEDAL. Alli examinamos el 1º bit y si es 0 es medios y si es 1 es altos.

En caso de que el 2º bit sea 0, comprobamos es 1º bit, si tambien es 0 es gain, y si es 1 es graves.

¿Como puedo subir el codigo como tu para que no se descentre?

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Mesa de mezclas
« Respuesta #68 en: 04 de Marzo de 2006, 04:25:00 »
Codigo:
;---------------Encabezado-------------

LIST      P = 16F876
INCLUDE      <P16F876.INC>


;------------Configuración de bits------------------------------------------------------------------

__CONFIG   _CP_OFF&_DEBUG_OFF&_WRT_ENABLE_ON&_CPD_OFF&_LVP_OFF&_BODEN_ON&_PWRTE_ON&_WDT_OFF&_XT_OSC


;------------mapa de memoria---------

status   equ   0x03      ; Aquí le asignamos nombres a los
trisa   equ   0x05      ; registros indicando
porta   equ   0x05
trisb   equ   0x06      ; la posición
portb   equ   0x06      
trisc   equ   0x07
portc   equ   0x07      ; en la que se encuentran

temp1   equ   0x20      ; temporal 1
temp2   equ   0x21      ; temporal 2

gananc   equ   0x22      ; posicion GAIN
graves   equ   0x23      ; posicion GRAVES
medios   equ   0x24      ; posicion MEDIOS
altos   equ   0x25      ; posicion ALTOS


mem1gr   equ   0x28      ; Preset mem1 graves
mem1me   equ   0x29      ; Preset mem1 medios
mem1al   equ   0x30      ; Preset mem1 altos
mem2gr   equ   0x31      ; Preset mem2 graves
mem2me   equ   0x32      ; Preset mem2 medios
mem2al   equ   0x33      ; Preset mem2 altos
mem3gr   equ   0x34      ; Preset mem3 graves
mem3me   equ   0x35      ; Preset mem3 medios
mem3al   equ   0x36      ; Preset mem3 altos
mem4gr   equ   0x37      ; Preset mem4 graves
mem4me   equ   0x38      ; Preset mem4 medios
mem4al   equ   0x39      ; Preset mem4 altos
mem5gr   equ   0x40      ; Preset mem5 graves
mem5me   equ   0x41      ; Preset mem5 medios
mem5al   equ   0x42      ; Preset mem5 altos

cont   equ   0x20      ; defino contador

sspcon   equ   0x14      ; control SPI
sspstat   equ   0x94      ; estado SPI
sspbuf   equ   0x13      ; buffer SPI


;------------Configuración de pines-----------------------------------------------------------------

#DEFINE      CAMBIO   PORTB,0    ; direccion del pulsador CAMBIO
#DEFINE      UP   PORTB,1      ; direccion del pulsador UP
#DEFINE      DOWN   PORTB,2      ; direccion del pulsador DOWN
#DEFINE      MEM1   PORTB,3      ; direccion del pulsador MEM1
#DEFINE      MEM2   PORTB,4      ; direccion del pulsador MEM2
#DEFINE      MEM3   PORTB,5      ; direccion del pulsador MEM3
#DEFINE      MEM4   PORTB,6      ; direccion del pulsador MEM4
#DEFINE      MEM5   PORTB,7      ; direccion del pulsador MEM5

#DEFINE      CS1   PORTC,0      ; direccion del pin de seleccion del CHIP 1
#DEFINE      CS2   PORTC,1      ; direccion del pin de seleccion del CHIP 2
#DEFINE      SCK   PORTC,3      ; pin del CLOCK para la comunicacion SPI
#DEFINE      SDI   PORTC,4      ; pin de entrada de datos para la comunicacion SPI
#DEFINE      SDO   PORTC,5      ; pin de salida de datos para la comunicacion SPI


;------------Definicion de memoria RAM--------------------------------------------------------------

POT_GANANCIA   EQU   .32
POT_GRAVES   EQU   .33
POT_MEDIOS   EQU   .34
POT_ALTOS   EQU   .35


;------------Definicion de macros-------------------------------------------------------------------

GR_GA   macro
   bcf   PORTC,0         ; pone un 0 para activar pot graves-ganancia
   bsf   PORTC,1         ; pone un 1 para desactivar pot medios-altos
   endm

ME_AL   macro
   bsf   PORTC,0         ; pone un 1 para desactivar pot graves-ganancia
   bcf   PORTC,1         ; pone un 0 para activar pot medios-altos
   endm

NO_CHIP   macro
   bsf   PORTC,0         ; pone un 1 para desactivar pot graves-ganancia
   bsf   PORTC,1         ; pone un 1 para desactivar pot medios-altos
   endm



;---------------------------------------------------------------------------------------------------
   ORG   .0         ; vector de RESET
   goto   INICIO         ;
   ORG   .4         ; vector de INTERRUPCION
   goto   INICIO         ;

;---------------------------------------------------------------------------------------------------
OUTPUT   movwf   SSPBUF         ; Coloca el dato de W en wl bufer
RET   bsf   STATUS,RP0      ; selecciona el banco 1
   btfss   SSPSTAT,BF      ; verifica si la recepcion termino
   goto   RET         ; si no a terminado regresa a RET
   bcf   STATUS,RP0      ; selecciona el banco 0
   movf   SSPBUF,W      ; coloca el dato recibido en W
   return            ; retorna de la sub-rutina

;---------------------------------------------------------------------------------------------------
;SENSADO DE PULSADORES

TEST   btfsc   CAMBIO         ; Si alguien presiona interruptor 1 CAMBIO
   call   SUB_CAMBIO      ; voy a etiqueta cambio
   btfsc   UP         ; si alguien presiona interruptor 2 UP
   call   SUB_UP         ; voy a etiqueta up
   btfsc   DOWN         ; si alguien presiona interruptor 3 DOWN
   call   SUB_DOWN      ; voy a etiqueta down
   btfsc   MEM1         ; si alguien presiona interruptor 4 MEM1
   call   SUB_MEM1      ; voy a etiqueta mem1
   btfsc   MEM2         ; si alguien presiona interruptor 5 MEM2
   call   SUB_MEM2      ; voy a etiqueta mem2
   btfsc   MEM3         ; si alguien presiona interruptor 6 MEM3
   call   SUB_MEM3      ; voy a estiqueta mem3
   btfsc   MEM4         ; si alguien presiona interruptor 7 MEM4
   call   SUB_MEM4      ; voy a estiqueta mem4
   btfsc   MEM5         ; si alguien presiona interruptor 8 MEM5
   call   SUB_MEM5      ; voy a estiqueta mem5
   return

;---------------------------------------------------------------------------------------------------
;CAMBIO DE POTENCIOMETROS

SUB_CAMBIO   btfsc   cont,1      ; comprobamos el 2ºbit del contador, si es 0 salta 1 instruccion
      goto   MEDALT
      btfsc   cont,0      ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   GRAVES
      goto   GAIN      ; el valor del contador es 0, GAIN.

GRAVES      GR_GA
      movlw   B"10010001"   ; coloca el byte para leer memoria EEMEM RDAC2 graves
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_GRAVES   ; el dato de W lo pasa a la memoria POT_GRAVES
      NO_CHIP
      MOSTRAR POSICION POT GRAVES EN LCD

      movlw   B"00000010"   ; ponemos un 1 en el contador
      movwf   cont

      goto   TEST

MEDALT      btfsc   cont,0      ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   ALTOS
      goto   MEDIOS


MEDIOS      ME_AL
      movlw   B"10010000"   ; coloca el byte para leer memoria EEMEM RDAC1 medios
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_MEDIOS   ; el dato de W lo pasa a la memoria POT_MEDIOS
      NO_CHIP
      MOSTRAR POSICION POT MEDIOS EN LCD

      movlw   B"00000011"   ; ponemos un 1 en el contador
      movwf   cont
      goto   TEST

ALTOS      ME_AL
      movlw   B"10010001"   ; coloca el byte para leer memoria EEMEM RDAC2 altos
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_ALTOS   ; el dato de W lo pasa a la memoria POT_ALTOS
      NO_CHIP
      MOSTRAR POSICION POT ALTOS EN LCD

      movlw   B"00000000"      ; ponemos un 1 en el contador
      movwf   cont
      goto   TEST


;---------------------------------------------------------------------------------------------------
;SUBIR UNA POSICION EN EL POTENCIOMETRO

SUB_UP   btfsc   cont,1         ; comprobamos el 2ºbit del contador, si es 0 salta 1 instruccion   
   goto   MEDALTUP
   btfsc   cont,0         ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
   goto   GRAVESUP
   goto   GAINUP         ; el valor del contador es 0, GAIN.

GAINUP   GR_GA
   movlw   B"11100000"   ; coloca el byte para subir en una posicion el valor de RDAC1
   call   OUTPUT      ; transmite el byte anterior
   movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
   call   OUTPUT      ; transmite el byte anterior
   movwf   POT_GANANCIA   ; el dato de W lo pasa a la memoria POT_GANANCIA
   NO_CHIP
   MOSTRAR POSICION POT GANANCIA EN LCD
   goto   TEST

GRAVESUP   GR_GA
      movlw   B"11100001"   ; coloca el byte para subir en una posicion el valor de RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_GRAVES   ; el dato de W lo pasa a la memoria POT_GRAVES
      NO_CHIP
      MOSTRAR POSICION POT GRAVES EN LCD
      goto   TEST

MEDALTUP   btfsc   cont,0      ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   ALTOSUP
      goto   MEDIOSUP

MEDIOSUP   ME_AL
      movlw   B"11100000"   ; coloca el byte para subir en una posicion el valor de RDAC1
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_MEDIOS   ; el dato de W lo pasa a la memoria POT_MEDIOS
      NO_CHIP
      MOSTRAR POSICION POT MEDIOS EN LCD
      goto   TEST

ALTOSUP      ME_AL
      movlw   B"11100001"   ; coloca el byte para subir en una posicion el valor de RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_ALTOS   ; el dato de W lo pasa a la memoria POT_ALTOS
      NO_CHIP
      MOSTRAR POSICION POT ALTOS EN LCD
      goto   TEST

;---------------------------------------------------------------------------------------------------
;BAJAR UNA POSICION EN EL POTENCIOMETRO

SUB_DOWN   btfsc   cont,1         ; comprobamos el 2ºbit del contador, si es 0 salta 1 instruccion   
      goto   MEDALTDW
      btfsc   cont,0         ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   GRAVESDW
      goto   GAINDW         ; el valor del contador es 0, GAIN.

GAINDW   GR_GA
   movlw   B"01100000"   ; coloca el byte para bajar en una posicion el valor de RDAC1
   call   OUTPUT      ; transmite el byte anterior
   movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
   call   OUTPUT      ; transmite el byte anterior
   movwf   POT_GANANCIA   ; el dato de W lo pasa a la memoria POT_GANANCIA
   NO_CHIP
   MOSTRAR POSICION POT GANANCIA EN LCD
   goto   TEST

GRAVESDW   GR_GA
      movlw   B"01100001"   ; coloca el byte para bajar en una posicion el valor de RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_GRAVES   ; el dato de W lo pasa a la memoria POT_GRAVES
      NO_CHIP
      MOSTRAR POSICION POT GRAVES EN LCD
      goto   TEST

MEDALTDW   btfsc   cont,0      ; comprobamos el 1º bit del contador, si es 0 salta 1 instruccion
      goto   ALTOSDW
      goto   MEDIOSDW

MEDIOSDW   ME_AL
      movlw   B"01100000"   ; coloca el byte para bajar en una posicion el valor de RDAC1
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_MEDIOS   ; el dato de W lo pasa a la memoria POT_MEDIOS
      NO_CHIP
      MOSTRAR POSICION POT MEDIOS EN LCD
      goto   TEST

ALTOSDW      ME_AL
      movlw   B"01100001"   ; coloca el byte para bajar en una posicion el valor de RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   B"00000000"   ; coloca 8 bits 0 para generar el clock
      call   OUTPUT      ; transmite el byte anterior
      movwf   POT_ALTOS   ; el dato de W lo pasa a la memoria POT_ALTOS
      NO_CHIP
      MOSTRAR POSICION POT ALTOS EN LCD
      goto   TEST


;---------------------------------------------------------------------------------------------------
;ALMACENAR O CARGAR PRESET EN MEM1

SUB_MEM1   call   retardo2s   ; esperamos 2 segundos y volvemos a comprobar
      btfsc   port,3      ; vuelve a comprobar el Interruptor de mem1
      goto   almprst      ; el boton ha estado presionado durante 2 segundos y se almacena el preset
               ; en caso que se suelte, se carga el preset anteriormente guardado
      GR_GA
      movlw   B"10110000"   ; cargar lo que envio por serie a RDAC1
      call   OUTPUT      ; transmite el byte anterior
      movlw   POT_GAEEPROM   ; coloca el valor del GAIN almacenado
      call   OUTPUT      ; transmite el byte anterior
      
      movlw   B"10110001"   ; cargar lo que envio por serie a RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   POT_GREEPROM   ; coloca el valor del GRAVES almacenado
      call   OUTPUT      ; transmite el byte anterior

      ME_AL
      movlw   B"10110000"   ; cargar lo que envio por serie a RDAC1
      call   OUTPUT      ; transmite el byte anterior
      movlw   POT_MEEEPROM   ; coloca el valor del MEDIOS almacenado
      call   OUTPUT   

      movlw   B"10110001"   ; cargar lo que envio por serie a RDAC2
      call   OUTPUT      ; transmite el byte anterior
      movlw   POT_ALEEPROM   ; coloca el valor del ALTOS almacenado
      call   OUTPUT   
      
      goto   GAIN

;---------------------------------------------------------------------------------------------------
INICIO   clrf   PORTB         ; limpio el puerto B
   

   bsf   STATUS,RP0      ; pongo rp0 a 1 y paso al banco1
   bcf   STATUS,RP1
   movlw   B"11100000"      ; cargo W con 00000 salidas
   movwf   TRISA         ; y paso el valor a trisa puerto A display
   movlw   B"11111111"      ; cargo W con 11111111 entradas
   movwf   TRISB         ; y paso el valor a trisb puerto B interruptores
   movlw   B"00010000"      ; cargo W con 00010000
   movwf   TRISC         ; y paso el valor a trisc puerto C solo entrada SPI data in
   movlw   B"10000000"      ;
   movwf   SSPSTAT         ; cargo el reguistro SSPSTAT con el valor anterior
   bcf   STATUS,RP0      ; pongo rp0 a 0 y regreso al banco0

   NO_CHIP            ; llama a la macro de deshabilitar los 4 potes.
   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


   
; LEER POSICION POT GANANCIA
GAIN   GR_GA            ; llama a la macro de habilitar el pote. de graves-ganancia
   movlw   B"10010000"      ; coloca el byte para leer memoria EEMEM RDAC1 gain
   call   OUTPUT         ; transmite el byte anterior
   movlw   B"00000000"      ; coloca 8 bits 0 para generar el clock
   call   OUTPUT         ; transmite el byte anterior
   movwf   POT_GANANCIA      ; el dato de W lo pasa a la memoria POT_GANANCIA
   NO_CHIP
   MOSTRAR POSICION POT GANANCIA EN LCD
   
   movlw   B"00000001"      ; ponemos un 1 en el contador
   movwf   cont

   goto   TEST

   goto   $
;---------------------------------------------------------------------------------------------------
   END


Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Mesa de mezclas
« Respuesta #69 en: 04 de Marzo de 2006, 11:07:00 »
Hola fito20, para subir los programas y que queden bien primero lo que hago es copiar el programa en el notepad de windows, hay lo centro todo y luego lo paso al post, después usando la función PRESENTAR EN CODIGO que ofrece miarroba, de las teclas superiores
de donde se encuentra el espacio del mensaje  redactado, la N° 10 de izquierda a derecha.

La otra forma de hacer que se cambie la función con la tecla CAMBIO es haciendo 4 rutinas diferentes (una por cada función) dentro de cada rutina se comprueba el estado de la tecla y si esta presionada se salta a la rutina siguiente, llegando a la ultima se salta a la primera, de esta forma no necesitas andar sumando ni comprobando el estado de los bits dentro de una variable, solo sensas la tecla y saltas a la otra, es realmente sencillo.

Acuérdate que luego de presionada la tecla debes hacer que los comandos de esta se anulen por un periodo determinado de tiempo por ejemplo 1 segundo, porque en el caso de no hacerlo te será muy difícil seleccionar una función ya que saltaría demasiado rápido de una a otra, lo mismo sucedería con el programa que as implementado vos.

Un saludo.

Atte. CARLOS  

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Mesa de mezclas
« Respuesta #70 en: 04 de Marzo de 2006, 11:28:00 »
Escrito originalmente por fito20
Codigo:

status   equ   0x03      ; Aquí le asignamos nombres a los
trisa   equ   0x05      ; registros indicando
porta   equ   0x05
trisb   equ   0x06      ; la posición
portb   equ   0x06      
trisc   equ   0x07
portc   equ   0x07      ; en la que se encuentran




Hola fito20, veo que defines los registros, te comento que si usas (como en este caso) en el encabezado el “include” no es necesario que definas las direcciones de los registros, solo usando letras mayúsculas con para el nombre del registro alcanza ej. STATUS, TRISA, PORTA, etc.

Un saludo

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Mesa de mezclas
« Respuesta #71 en: 04 de Marzo de 2006, 11:52:00 »
Ok Carlos, voy a modificar el CAMBIO como indicas. Tambien tengo ya programado el almacen y carga de presets. Lo subo aqui mañana o te lo mando a alguna direccion de correo...es bastante largo...lo que tu me digas. Un saludo.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Mesa de mezclas
« Respuesta #72 en: 04 de Marzo de 2006, 17:59:00 »
Hola fito20, puedes usar mi e-mail: fcp_19@hotmail.com

Un saludo.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Mesa de mezclas
« Respuesta #73 en: 05 de Marzo de 2006, 05:57:00 »
Carlos te he enviado un mail. Un saludo.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Mesa de mezclas
« Respuesta #74 en: 05 de Marzo de 2006, 14:19:00 »
Hola fito20, si lo e recibido, lo miro y luego comento, ok.

Un saludo

Atte. CARLOS
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.


 

anything