Hagalo usted mismo... Do it yourself...para los manitas "litronicos" y sus cacharros

Moderador: Moderadores de Guitarras

LOOPIC

Notapor potul » 09 Mar 2007 01:07

El Software

Bien, este layout no sirve de gran cosa sin un programa para el PIC que haga el trabajo. Este es mi primer proyecto utilizando un PIC, asi que en cuanto empeze me asaltaron las dudas sobre el lenguaje a utilizar. En un principio pense en utilizar BASIC para simplificar, pero una vez puesto vi que:
-No se necesitan operacione complejas... la logica del programa es bastante simple
-Microchip proporciona con el MPLAB un compilador gratuito de ASM
-Hay mucha documentacion del 16f84 y ejemplos en ASM
-Me apetecia empezar de cero y aprender algo nuevo.

Asi que decidi lanzarme y aprender ASM.
Vaya por delante que no soy muy bueno en esto de la programacion, lo que se traduce normalmente en programas no muy bien estructurados y poco optimizados. Lo que quiero decir es que seguro que si os poneis manos a la obra podeis mejorar el software, pero he intentado centrarme mas en conseguir algo que funcione aunque no sea muy elegante.

Aqui teneis la fuente en ASM:

http://usuarios.lycos.es/mapesicc/loopic_2.asm

Y el fichero HEX ya compilado para los perezosos.

http://usuarios.lycos.es/mapesicc/loopic_2.hex

Y el listado:

Código: Seleccionar todo
;**********************************************************************
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:       loopic.asm                                        *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:        Potul                                             *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************


   list      p=16F84             ; list directive to define processor
   #include <p16F84.inc>         ; processor specific variable definitions

   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.




;***** VARIABLE DEFINITIONS
w_temp        EQU     0x0C        ; variable used for context saving
status_temp   EQU     0x0D        ; variable used for context saving
TRISA         EQU      85h
TRISB         EQU      86h
PORTA         EQU      05h
PORTB         EQU      06h
BANKN         EQU     0Eh
PRESET         EQU      0Fh
PRESET_0      EQU      10h
PRESET_1      EQU      11h
PRESET_2      EQU      12h
PRESET_3      EQU      13h
SELECT         EQU      14h
SHADOWA         EQU      15h
TEMP         EQU      16h
base_addr       equ       17h
count         equ      18h
dlyreg         equ      19h
SHADOWB         equ      1Ah
TEMPB         equ      1Bh
INPUTA         equ      1CH
INPUTB         equ      1DH
PREVA         equ      1EH
PREVB         equ      1FH
blinkcount      equ      20h
blinktimeH      equ    21h
blinktimeL      equ      22h
bitnum         equ      23h
#define eepreset      3Eh
#define eebank         3Fh
#define   timervalue      01h
#define   timervalue2      05h
;#define eepreset_0      20h
;#define eepreset_1      21h
;#define eepreset_2      22h
;#define eepreset_3      23h




;********************************
;    Constant Assignments
;********************************
CARRY     equ       00
MSB       equ       07
BORROW    equ       00
LED       equ       07
W     equ       00
F     equ       01
Z     equ        02
C     equ       00
dx        equ       00


      ORG      0x2100
      de      0AAh
      de      "These are different preset examples ABCD"
      ORG      0x213E
      de      01,05

;**********************************************************************
      ORG     0x000             ; processor reset vector
        goto    main              ; go to beginning of program


      ORG     0x004             ; interrupt vector location
      movwf   w_temp            ; save off current W register contents
      movf   STATUS,w          ; move status register into W register
      movwf   status_temp       ; save off contents of STATUS register


; isr code can go here or be located as a call subroutine elsewhere


      movf    status_temp,w     ; retrieve copy of STATUS register
      movwf   STATUS            ; restore pre-isr STATUS register contents
      swapf   w_temp,f
      swapf   w_temp,w          ; restore pre-isr W register contents
      retfie                    ; return from interrupt



main


      
;**********  init ports **********
      
      bsf   STATUS,5      ;bank 0
      movlw b'00000000'   ;set PORTB as output
      movwf TRISB
      movlw 00h         ;set PORTA as output
      movwf TRISA
      bcf   STATUS,5      ;bank 1
            
      movlw eebank      ;load bank from eeprom
      movwf base_addr
      call ee_rd
      movfw SELECT
      movwf BANKN
      movfw   BANKN      ;init timer for blink
      movwf   blinkcount
      incf   blinkcount
      rlf      blinkcount,f
      movlw   timervalue
      movwf   blinktimeH
      clrf   blinktimeL
      bcf      PORTB,7

      movlw eepreset      ;load preset from eeprom
      movwf base_addr         
      call  ee_rd
      movfw SELECT
      movwf PRESET
      call read_presets   ;read bank presets from eeprom
      call update_ports   ;update ports

      

;***************  switch test loop  *******************

switch_test
      
      call read_A            ;inputs in SHADOWA
      movf    SHADOWA,1      ;see if register is 0 (no button pressed)
      btfsc    STATUS,Z      ;if it's 0, don't change PRESET  (to be checked)
      goto    jump
      call    sw_dbnc         ;debounce delay
      call    read_A            ;inputs in SHADOWA
      movf    SHADOWA,1      ;recheck input
      btfsc    STATUS,Z      
      goto    jump      
      btfsc   SHADOWA,4
      goto    edit      
      movfw   SHADOWA
      movwf   INPUTA
      movwf   PRESET         ;if it's not 0, copy SHADOWA(PORTA copy) in PRESET         
      call    wait0A         ;wait until input is o again
      movfw   INPUTA
      movwf   SELECT         ;save PRESET in EEPROM
      movlw   eepreset
      movwf    base_addr
      call    ee_wr
      call    update_ports   ;update outputs with PRESET values
jump   
      call    read_B         ;inputs in SHADOWB
      movlw   b'11000000'      ;discard outputs [0-5]
      andwf   SHADOWB,f
      movf    SHADOWB,f      ;see if register is 0 (no button pressed)
      btfsc    STATUS,Z      ;if it's 0, do nothing
      goto    jump2
      call    sw_dbnc         ;debounce delay
      call    read_B         ;inputs in SHADOWB
      movlw   b'11000000'      ;discard outputs [0-5]
      andwf   SHADOWB,f
      movfw   SHADOWB
      movwf   INPUTB         ;copy it in INPUTB ???????
      movf    SHADOWB,f      ;recheck input
      btfsc    STATUS,Z      
      goto    jump2
      btfsc   INPUTB,6
      call   BANKUP
      btfsc   INPUTB,7
      call   BANKDOWN
            
jump2
      call    blinkbank
      goto    switch_test      ;loop
      
BANKUP
      call    wait0B         ;wait until input is 0 again.
      incf   BANKN,f         ;increment bank number
      btfsc   BANKN,3
      clrf   BANKN
      call   read_presets
      call   save_bank
      call    blinkreset
      return

BANKDOWN
      call    wait0B         ;wait until input is 0 again.
      decf   BANKN,f         ;decrement bank number
      movlw   b'00000111'
      btfsc   BANKN,7
      movwf   BANKN
      call   read_presets
      call   save_bank
      call    blinkreset
      return

test2bits
      call    read_A
      movlw   b'00000011'
      andwf   SHADOWA,1
      movf    SHADOWA,1
      return

;**********   edit mode   *************

edit   bsf      PORTB,6      ;set edit LED
      call    wait0A
      clrf    TEMP
      movlw   06h
      movwf   bitnum

bitn   call    blinkbank
      call    test2bits
      btfsc    STATUS,Z
      goto    bitn
      call    sw_dbnc
      call    test2bits
      btfsc    STATUS,Z
      goto    bitn      
      bcf      TEMP,7
      btfsc   SHADOWA,0
      bsf      TEMP,7
      rrf      TEMP,f
      call    wait0A
      decfsz   bitnum
      goto    bitn

      rrf      TEMP,f
      bcf      TEMP,7
      bcf      TEMP,6

      movfw   TEMP
      movwf   PORTB

update_preset
            
      btfsc   PRESET,0
      movwf    PRESET_0
      btfsc   PRESET,1
      movwf   PRESET_1
      btfsc   PRESET,2
      movwf   PRESET_2
      btfsc   PRESET,3
      movwf   PRESET_3

      call    save_presets
      bcf      PORTB,6         ;Clear edit LED
      goto    switch_test      
      

; **********  wait until PORTA is 0  **********

wait0A   call    sw_dbnc
      call    read_A
      movf    SHADOWA,1
      btfss    STATUS,Z
      goto    wait0A
      return

; **********  wait until PORTA is 0  **********

wait0B   call    sw_dbnc
      call   read_B
      movlw   b'11000000'
      andwf   SHADOWB,f
      ;movf    SHADOWB,f
      btfss    STATUS,Z
      goto    wait0B
      return
      
;**********   update ports  ***********

update_ports

      call   read_B      ;load current preset in SHADOWB. If no switch pressed it will be kept
      andlw   b'11000000'   ;keep [6-7] in TEMPB
      movwf     TEMPB
      movfw   SHADOWB
      btfsc   PRESET,0
      movfw    PRESET_0
      btfsc   PRESET,1
      movfw   PRESET_1
      btfsc   PRESET,2
      movfw   PRESET_2
      btfsc   PRESET,3
      movfw   PRESET_3
      andlw   b'00111111'   ;discard [6-7]
      addwf   TEMPB,0      ;re-insert saved [6-7]
      movwf   PORTB      ;update outputs
      

      movfw   PRESET      ;update LEDs for new PRESET
      andlw   b'00001111'
      movwf   PORTA
      return

;*****************************************************
;   Read presets from EEPROM
;*****************************************************

read_presets

      movfw    BANKN
      addwf    BANKN,0
      addwf    BANKN,0
      addwf    BANKN,0
      ;movlw    eepreset_0      ;read eeprom and setup preset values
      movwf    base_addr
      call    ee_rd
      movfw    SELECT
      movwf    PRESET_0
      
      incf   base_addr
      ;movlw    eepreset_1         
      ;movwf    base_addr
      call    ee_rd
      movfw    SELECT
      movwf    PRESET_1
      
      incf    base_addr
      ;movlw    eepreset_2
      ;movwf    base_addr         
      call    ee_rd
      movfw    SELECT
      movwf    PRESET_2
      ;movlw    eepreset_3
      ;movwf    base_addr         
      
      incf base_addr
      call    ee_rd
      movfw    SELECT
      movwf    PRESET_3
      return


;*****************************************************
;   Save presets to EEPROM
;*****************************************************

save_presets

      movfw    BANKN
      addwf    BANKN,0
      addwf    BANKN,0
      addwf    BANKN,0
      ;movlw    eepreset_0         ;read eeprom and setup preset values
      movwf    base_addr
      movfw    PRESET_0
      movwf    SELECT
      call    ee_wr
      ;movlw    eepreset_1
      ;movwf    base_addr
      incf    base_addr
      movfw    PRESET_1
      movwf    SELECT
      call    ee_wr
      ;movlw    eepreset_2
      ;movwf    base_addr
      incf   base_addr
      movfw    PRESET_2
      movwf    SELECT
      call    ee_wr
      ;movlw    eepreset_3
      ;movwf    base_addr
      incf   base_addr
      movfw    PRESET_3
      movwf    SELECT
      call    ee_wr
      return

;*****************************************************
;   Save bank to EEPROM
;*****************************************************

save_bank

      movfw    BANKN
      movwf   SELECT         ;save PRESET in EEPROM
      movlw   eebank
      movwf    base_addr
      call    ee_wr
      return


;*****************************************************
;   Write to EEPROM subroutine
;*****************************************************
   
ee_wr   movf    base_addr,W; start addr. EEPROM
      movwf    EEADR   
      movf    SELECT,W
      ;andlw 07Fh
      movwf    EEDATA
   
      bsf    STATUS,RP0 ;writing to eeprom
      bcf    INTCON,GIE
      bsf    EECON1,WREN
      movlw    55h
      movwf    EECON2
      movlw    0AAh
      movwf    EECON2
      bsf    EECON1,WR
      
   
test_wr   btfsc    EECON1,WR; is write finished?
      goto    test_wr
      bsf    INTCON,GIE
      bcf    STATUS,RP0
      
      return


;**************************************
;     Read EEPROM and write to select
;**************************************


ee_rd   ;clrf base_addr; start addr. at 00h?

      movf    base_addr,W
      movwf    EEADR
      bsf    STATUS,RP0
      bsf    EECON1,RD
r1      btfsc    EECON1,RD ; Wait to finish read.
      goto    r1
      bcf    STATUS,RP0
      movf    EEDATA,W
      ;andlw 07Fh
      movwf    SELECT
      return

;************************************
;   Switch Debounce Delay (50mS)
;************************************

sw_dbnc   movlw    080h   ; 0f0 Delay routine
      movwf    count
debnce   call    delay3
      decfsz    count
      goto    debnce
      return

;*************************************
;    Delay Subroutine (770uS)
;*************************************
delay3    movlw    .255
          movwf    dlyreg
dly3      decfsz   dlyreg
          goto       dly3
          nop
          return
;*********************************************
;       read port A and return it in SHADOWA
;*********************************************

read_A      movfw   PORTA   ;save ouputs of portA in PREVA
         movwf   PREVA
         banksel   TRISA   ;set portA as input
         movlw   0FFh
         movwf   TRISA
         banksel   PORTA
         call   delay3
         movfw   PORTA
         movwf   SHADOWA   ;copy portA inputs in SHADOWA
         banksel   TRISA   ;set portA as output
         clrf   TRISA
         banksel   PORTA
         movfw   PREVA   ;restore old outputs
         movwf   PORTA
         return   

;**********************************************
;       read port B and return it in SHADOWB
;**********************************************

read_B      movfw   PORTB   ;save ouputs of portB in PREVB
         movwf   PREVB
         banksel   TRISB   ;set portB[6-7] as input
         movlw   b'11000000'
         movwf   TRISB
         nop
         banksel   PORTB
         movfw   PORTB
         movwf   SHADOWB   ;copy portB inputs in SHADOWB
         banksel   TRISB   ;set portB as output
         clrf   TRISB
         banksel   PORTB
         movfw   PREVB   ;restore old outputs
         movwf   PORTB
         return


;**********************************************
;       Blink PORTB 7 depending on BANKN
;**********************************************


blinkbank
         decfsz   blinktimeL,f
         return
         decfsz   blinktimeH,f
         return
         movlw   timervalue
         movwf   blinktimeH
         clrf   blinktimeL
         movlw   b'10000000'
         xorwf   PORTB,f
         decfsz   blinkcount,f
         return
         call    blinkreset
         return

blinkreset
         movfw   BANKN
         movwf   blinkcount
         incf   blinkcount
         rlf      blinkcount,f
         movlw   timervalue2
         movwf   blinktimeH
         clrf   blinktimeL
         bcf      PORTB,7
         return



      END                     ; directive 'end of program'




Si la audiencia esta interesada, en cuanto tenga un poco de tiempo comentare un poco las partes del programa por si quereis modificarlo.

Potul
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Re: LOOPIC

Notapor Macca » 09 Mar 2007 20:24

Bien, bien.

potul escribió:
Y el fichero HEX ya compilado para los perezosos.

http://usuarios.lycos.es/mapesicc/loopic_2.hex


Este enlace no me lleva a ningún sitio al que yo quisiera ir... ¿Me pasa sólo a mí?

potul escribió:Si la audiencia esta interesada, en cuanto tenga un poco de tiempo comentare un poco las partes del programa por si quereis modificarlo.

Potul


Sí, por favor (si no es un trabajo excesivo...)

Gracias
Macca
Avatar de Usuario
Imparable en el GAS
Imparable en el GAS
 
Mensajes: 1083
Registrado: 16 Oct 2004 19:32
Ubicación: Madrid
Puntos: 5850.000
Ha agradecido: 10 veces
Le han agradecido: 16 veces

Notapor potul » 09 Mar 2007 20:56

Algo pasa con el maldito Lycos... ni las imagenes ni los ficheros se ven. Y otra web que tengo alli tampoco va....
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Notapor potul » 12 Mar 2007 12:01

OK, arreglado el tema del link. Tripod ha estado colgado un par de dias, y ademas habia un error (mayusculas-minusculas) en el link.

Potul
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

LOOPIC

Notapor potul » 14 Mar 2007 20:42

El Software pasito a pasito

(dedicado especialmente a Macca)
Vamos a ver,... para los que os apetezca meteros en berenjenales con la programacion del PIC, voy a intentar explicar un poco como va el programa. Voy a suponer que entendeis assembler y conoceis el PIC 16F84, asi que no voy a entrar en detalles "de base".

El programa empieza como siempre declarando algunas variables y constantes.
Código: Seleccionar todo
;**********************************************************************
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:       loopic.asm                                        *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:        Potul                                             *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************


   list      p=16F84             ; list directive to define processor
   #include <p16F84.inc>         ; processor specific variable definitions

   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.




;***** VARIABLE DEFINITIONS
w_temp           EQU     0x0C        ; variable used for context saving
status_temp      EQU     0x0D        ; variable used for context saving
TRISA      EQU      85h
TRISB      EQU      86h
PORTA      EQU      05h
PORTB      EQU      06h
BANKN      EQU        0Eh
PRESET      EQU      0Fh
PRESET_0   EQU      10h
PRESET_1   EQU      11h
PRESET_2   EQU      12h
PRESET_3   EQU      13h
SELECT      EQU      14h
SHADOWA      EQU      15h
TEMP      EQU      16h
base_addr    equ          17h
count      equ      18h
dlyreg      equ      19h
SHADOWB      equ      1Ah
TEMPB      equ      1Bh
INPUTA      equ      1CH
INPUTB      equ      1DH
PREVA      equ      1EH
PREVB      equ      1FH
blinkcount   equ      20h
blinktimeH   equ       21h
blinktimeL   equ      22h
bitnum      equ      23h
#define eepreset      3Eh
#define eebank         3Fh
#define   timervalue      01h
#define   timervalue2      05h
;#define eepreset_0      20h
;#define eepreset_1      21h
;#define eepreset_2      22h
;#define eepreset_3      23h


;********************************
;    Constant Assignments
;********************************
CARRY     equ       00
MSB       equ       07
BORROW    equ       00
LED       equ       07
W     equ       00
F     equ       01
Z     equ        02
C     equ       00
dx        equ       00

Variables remarcables:

BANKN - Numero de banco actual
PRESET - Preset actual (de cuatro posibles). Se activa el bit correspondiente al preset activo. Valores posibles: 0001 0010 0100 1000
PRESET_0,1,2 y 3 almacenan el contenido de los presets del banco actual, es decir la combinacion de reles activos/inactivos. Un bit para cada rele (del 0 al 5), 1=activado
base_addr y SELECT - variables utilizadas para grabar/leer de la EEPROM
SHADOWA y SHADOWB - Se utilizan para copiar el contenido de PORTA y PORTB y realizar tests con ellos, asi evitamos problemas read/modify/write
TEMP - Se utiliza para almacenar el nuevo PRESET durante una operacion de EDIT
TEMPB - variable temporal
count y dlyreg - contadores para delay
INPUTA y INPUTB - almacenan el contenido de PORTA y PORTB (cuando se utilizan como inputs) temporalmente en algunas rutinas
PREVA y PREVB - almacenan el estado previo de PORTA y PORTB. utilizado para comparar y detectar cambios.
blinkcount - contador de numero de parpadeos del LED indicador de banco.
blinktimeH y blinktimeL - contadores de retardo para el parpadeo del LED
bitnum - numero de bit durante operacion de EDIT
eepreset y eebank - posicion de memoria de EEPROM donde se almacenan el numero de banco y preset actuales
timervalue y timervalue2 - Se utilizan para definir el tiempo que el LED va a estar encendido/apagado y la pausa larga entre ciclos.

Almacenamos "dummy" Presets en la eeprom

Código: Seleccionar todo
      ORG      0x2100
      de      0AAh
      de      "These are different preset examples AB"
      ORG      0x213E
      de      01,05

Inicio de programa, la parte de ORG 0x004 se podria saltar pues no se utilizan interrupciones, pero se me quedo ahi. (algun dia hare limpieza)
Código: Seleccionar todo
;**********************************************************************
      ORG     0x000             ; processor reset vector
        goto    main              ; go to beginning of program


      ORG     0x004             ; interrupt vector location
      movwf   w_temp            ; save off current W register contents
      movf   STATUS,w          ; move status register into W register
      movwf   status_temp       ; save off contents of STATUS register


; isr code can go here or be located as a call subroutine elsewhere


      movf    status_temp,w     ; retrieve copy of STATUS register
      movwf   STATUS            ; restore pre-isr STATUS register contents
      swapf   w_temp,f
      swapf   w_temp,w          ; restore pre-isr W register contents
      retfie                    ; return from interrupt

Inicializamos los puertos. PORTA y PORTB los dos como salidas.
Cargamos el ultimo banco utilizado de la EEPROM y el ultimo PRESET utilizado.
Inicializamos varias variables (contadores y demas)
Código: Seleccionar todo
   
main
   
;**********  init ports **********
      
      bsf   STATUS,5      ;bank 0
      movlw b'00000000'   ;set PORTB as output
      movwf TRISB
      movlw 00h         ;set PORTA as output
      movwf TRISA
      bcf   STATUS,5      ;bank 1
            
      movlw eebank      ;load bank from eeprom
      movwf base_addr
      call ee_rd
      movfw SELECT
      movwf BANKN
      movfw   BANKN      ;init timer for blink
      movwf   blinkcount
      incf   blinkcount
      rlf      blinkcount,f
      movlw   timervalue
      movwf   blinktimeH
      clrf   blinktimeL
      bcf      PORTB,7

      movlw eepreset      ;load preset from eeprom
      movwf base_addr         
      call  ee_rd
      movfw SELECT
      movwf PRESET
      call read_presets   ;read bank presets from eeprom
      call update_ports   ;update ports

"switch_test" es el bucle principal del programa. Basicamente monitorea las entradas y llama subrutinas dependiendo de ellas.
Llama 2 veces a "read_A" que se encarga de leer el contenido del PORTA, con un delay en medio. Si durante las 2 lecturas hay algo en PORTA, almacena el valor en INPUTA y llama a "wait0A". Esta rutina entra en un bucle hasta que no hay ningun boton pulsado. Cuando soltamos el boton, INPUTA se convierte en el nuevo PRESET seleccionado, se almacena en la EEPROM y se actualizan las salidas correspondientes. Si el boton pulsado es el 4 (EDIT), salta a la rutina de EDIT.
Código: Seleccionar todo
;***************  switch test loop  *******************

switch_test
      
      call read_A         ;inputs in SHADOWA
      movf    SHADOWA,1      ;see if register is 0 (no button pressed)
      btfsc    STATUS,Z      ;if it's 0, don't change PRESET  (to be checked)
      goto    jump
      call    sw_dbnc         ;debounce delay
      call    read_A         ;inputs in SHADOWA
      movf    SHADOWA,1      ;recheck input
      btfsc    STATUS,Z      
      goto    jump      
      btfsc   SHADOWA,4
      goto    edit      
      movfw   SHADOWA
      movwf   INPUTA
      movwf   PRESET         ;if it's not 0, copy SHADOWA(PORTA copy) in PRESET         
      call    wait0A         ;wait until input is o again
      movfw   INPUTA
      movwf   SELECT         ;save PRESET in EEPROM
      movlw   eepreset
      movwf    base_addr
      call    ee_wr
      call    update_ports   ;update outputs with PRESET values


A continuacion se lee de manera similar PORTB, con la misma rutina de "debouncing". Si el boton de bankup o bankdown son pulsados los manda a sus correspondientes rutinas.
A continuacion llamamos a blinkbank que se encarga del parpadeo del LED y volvemos al inicio
Código: Seleccionar todo
jump   
      call    read_B         ;inputs in SHADOWB
      movlw   b'11000000'      ;discard outputs [0-5]
      andwf   SHADOWB,f
      movf    SHADOWB,f      ;see if register is 0 (no button pressed)
      btfsc    STATUS,Z      ;if it's 0, do nothing
      goto    jump2
      call    sw_dbnc         ;debounce delay
      call    read_B         ;inputs in SHADOWB
      movlw   b'11000000'      ;discard outputs [0-5]
      andwf   SHADOWB,f
      movfw   SHADOWB
      movwf   INPUTB         ;copy it in INPUTB ???????
      movf    SHADOWB,f      ;recheck input
      btfsc    STATUS,Z      
      goto    jump2
      btfsc   INPUTB,6
      call   BANKUP
      btfsc   INPUTB,7
      call   BANKDOWN
            
jump2
      call    blinkbank
      goto    switch_test      ;loop

BANKUP y BANKDOWN se encargan del cambio de banco. Espera que el boton sea soltado y cambia el numero de banco, a continuacion lee los presets del banco en cuestion en la EEPROM y graba el numero de banco en la EEPROM. Por ultimo hace un reset de los contadores de parpadeo.
Código: Seleccionar todo
BANKUP
      call    wait0B         ;wait until input is 0 again.
      incf   BANKN,f         ;increment bank number
      btfsc   BANKN,3
      clrf   BANKN
      call   read_presets
      call   save_bank
      call    blinkreset
      return

BANKDOWN
      call    wait0B         ;wait until input is 0 again.
      decf   BANKN,f         ;decrement bank number
      movlw   b'00000111'
      btfsc   BANKN,7
      movwf   BANKN
      call   read_presets
      call   save_bank
      call    blinkreset
      return

"test2bits" simplemente descarta todos los bits excepto 0 y 1 del PORTA.
En "edit" vamos a editar el PRESET actual. Primero encendemos el LED de EDIT para indicar que estamos en modo edicion. A continuacion llamamos a la rutina de parpadeo (para asegurar que el LED sigue parpadeando en modo EDIT), y leemos el contenido de los botones 0 y 1 del PORTA. Cada vez que pulsamos uno de los 2, asignamos un 1 o un 0 al bit en curso y rotamos TEMP. Asi, despues de 6 iteraciones definimos los reles que deben ser activos o inactivos.
"update_preset" se encarga de copiar el PRESET_N que corresponda del banco actual a las salidas, y despues de grabar el nuevo preset en la EEPROM, vuelve al inicio.
Código: Seleccionar todo
test2bits
      call    read_A
      movlw   b'00000011'
      andwf   SHADOWA,1
      movf    SHADOWA,1
      return

;**********   edit mode   *************

edit      bsf   PORTB,6      ;set edit LED
      call    wait0A
      clrf    TEMP
      movlw   06h
      movwf   bitnum

bitn      call    blinkbank
      call    test2bits
      btfsc    STATUS,Z
      goto    bitn
      call    sw_dbnc
      call    test2bits
      btfsc    STATUS,Z
      goto    bitn      
      bcf   TEMP,7
      btfsc   SHADOWA,0
      bsf   TEMP,7
      rrf   TEMP,f
      call    wait0A
      decfsz   bitnum
      goto    bitn

      rrf   TEMP,f
      bcf   TEMP,7
      bcf   TEMP,6

      movfw   TEMP
      movwf   PORTB


update_preset
            
      btfsc   PRESET,0
      movwf    PRESET_0
      btfsc   PRESET,1
      movwf   PRESET_1
      btfsc   PRESET,2
      movwf   PRESET_2
      btfsc   PRESET,3
      movwf   PRESET_3

      call    save_presets
      bcf   PORTB,6         ;Clear edit LED
      goto    switch_test      

"wait0A" y "wait0B" ejecutan un bucle indefinido hasta que las entradas en PORTA o PORTB respectivamente estan a cero (no hay ningun boton pulsado)
Código: Seleccionar todo
; **********  wait until PORTA is 0  **********

wait0A   call    sw_dbnc
      call    read_A
      movf    SHADOWA,1
      btfss    STATUS,Z
      goto    wait0A
      return

; **********  wait until PORTA is 0  **********

wait0B   call    sw_dbnc
      call   read_B
      movlw   b'11000000'
      andwf   SHADOWB,f
      ;movf    SHADOWB,f
      btfss    STATUS,Z
      goto    wait0B
      return

"update_ports" se encarga de copiar el PRESET_N adecuado del banco actual en las salidas de los reles. Despues actualiza los LEDs indicadores de PRESET en PORTA.
Código: Seleccionar todo
;**********   update ports  ***********

update_ports

      call   read_B      ;load current preset in SHADOWB. If no switch pressed it will be kept
      andlw   b'11000000'   ;keep [6-7] in TEMPB
      movwf     TEMPB
      movfw   SHADOWB
      btfsc   PRESET,0
      movfw    PRESET_0
      btfsc   PRESET,1
      movfw   PRESET_1
      btfsc   PRESET,2
      movfw   PRESET_2
      btfsc   PRESET,3
      movfw   PRESET_3
      andlw   b'00111111'   ;discard [6-7]
      addwf   TEMPB,0      ;re-insert saved [6-7]
      movwf   PORTB      ;update outputs
      

      movfw   PRESET      ;update LEDs for new PRESET
      andlw   b'00001111'
      movwf   PORTA
      return

"read_presets" coge el numero de banco actual, lo multiplica por 4 y utiliza este resultado como direccion de memoria de la EEPROM donde buscar los PRESETS para ese banco. A continuacion carga PRESET_0 1 2 y 3 de la eeprom.

Hay mucha morralla (lineas comentadas) residuo de una rutina vieja...
Código: Seleccionar todo
;*****************************************************
;   Read presets from EEPROM
;*****************************************************

read_presets

      movfw    BANKN
      addwf    BANKN,0
      addwf    BANKN,0
      addwf    BANKN,0
      ;movlw    eepreset_0      ;read eeprom and setup preset values
      movwf    base_addr
      call    ee_rd
      movfw    SELECT
      movwf    PRESET_0
      
      incf   base_addr
      ;movlw    eepreset_1         
      ;movwf    base_addr
      call    ee_rd
      movfw    SELECT
      movwf    PRESET_1
      
      incf    base_addr
      ;movlw    eepreset_2
      ;movwf    base_addr         
      call    ee_rd
      movfw    SELECT
      movwf    PRESET_2
      ;movlw    eepreset_3
      ;movwf    base_addr         
      
      incf base_addr
      call    ee_rd
      movfw    SELECT
      movwf    PRESET_3
      return

"save_presets" hace lo mismo pero grabando los presets actuales en la memoria eeprom.
Código: Seleccionar todo
;*****************************************************
;   Save presets to EEPROM
;*****************************************************

save_presets

      movfw    BANKN
      addwf    BANKN,0
      addwf    BANKN,0
      addwf    BANKN,0
      ;movlw    eepreset_0         ;read eeprom and setup preset values
      movwf    base_addr
      movfw    PRESET_0
      movwf    SELECT
      call    ee_wr
      ;movlw    eepreset_1
      ;movwf    base_addr
      incf    base_addr
      movfw    PRESET_1
      movwf    SELECT
      call    ee_wr
      ;movlw    eepreset_2
      ;movwf    base_addr
      incf   base_addr
      movfw    PRESET_2
      movwf    SELECT
      call    ee_wr
      ;movlw    eepreset_3
      ;movwf    base_addr
      incf   base_addr
      movfw    PRESET_3
      movwf    SELECT
      call    ee_wr
      return

"save_bank" guarda el banco actual en la EEPROM (en la direccion eebank)
Código: Seleccionar todo
;*****************************************************
;   Save bank to EEPROM
;*****************************************************

save_bank

      movfw    BANKN
      movwf   SELECT         ;save PRESET in EEPROM
      movlw   eebank
      movwf    base_addr
      call    ee_wr
      return

"ee_wr" y "ee_rd" son rutinas basicas de escritura/lectura en la eeprom. El valor a grabar/leer se almacena en SELECT, y la direccion de memoria en base_addr
Código: Seleccionar todo
;*****************************************************
;   Write to EEPROM subroutine
;*****************************************************
   
ee_wr   movf    base_addr,W; start addr. EEPROM
      movwf    EEADR   
      movf    SELECT,W
      ;andlw 07Fh
      movwf    EEDATA
   
      bsf    STATUS,RP0 ;writing to eeprom
      bcf    INTCON,GIE
      bsf    EECON1,WREN
      movlw    55h
      movwf    EECON2
      movlw    0AAh
      movwf    EECON2
      bsf    EECON1,WR
      
   
test_wr   btfsc    EECON1,WR; is write finished?
      goto    test_wr
      bsf    INTCON,GIE
      bcf    STATUS,RP0
      
      return


;**************************************
;     Read EEPROM and write to select
;**************************************


ee_rd   ;clrf base_addr; start addr. at 00h?

      movf    base_addr,W
      movwf    EEADR
      bsf    STATUS,RP0
      bsf    EECON1,RD
r1      btfsc    EECON1,RD ; Wait to finish read.
      goto    r1
      bcf    STATUS,RP0
      movf    EEDATA,W
      ;andlw 07Fh
      movwf    SELECT
      return


"sw_dbnc" es un delay de unos 50ms para evitar rebotes.
Código: Seleccionar todo
;************************************
;   Switch Debounce Delay (50mS)
;************************************

sw_dbnc   movlw    080h   ; 0f0 Delay routine
      movwf    count
debnce   call    delay3
      decfsz    count
      goto    debnce
      return

;*************************************
;    Delay Subroutine (770uS)
;*************************************
delay3    movlw    .255
          movwf    dlyreg
dly3      decfsz   dlyreg
          goto       dly3
          nop
          return

"read_A" se encarga de leer el contenido del PORTA y almacenarlo en SHADOWA. Es una parte un poco liosa del programa. El tema es que PORTA esta configurado como salida casi todo el tiempo. En esta rutina lo que hacemos es, lo reconfiguramos como entrada, leemos el contenido, lo copiamos en SHADOWA y lo volvemos a reconfigurar como salida. Previamente hemos hecho un backup de las salidas en PREVA y lo restituimos.
Asi, los LEDs que iluminamos utilizando PORTA estan apagados solo el minimo tiempo necesario para comprobar si algun boton esta pulsado, y luego se vuelven a encender, de manera que no se nota.
"read_B" hace lo mismo con los 2 primeros bits de PORTB.
Código: Seleccionar todo
;*********************************************
;       read port A and return it in SHADOWA
;*********************************************

read_A      movfw   PORTA   ;save ouputs of portA in PREVA
         movwf   PREVA
         banksel   TRISA   ;set portA as input
         movlw   0FFh
         movwf   TRISA
         banksel   PORTA
         call   delay3
         movfw   PORTA
         movwf   SHADOWA   ;copy portA inputs in SHADOWA
         banksel   TRISA   ;set portA as output
         clrf   TRISA
         banksel   PORTA
         movfw   PREVA   ;restore old outputs
         movwf   PORTA
         return   

;**********************************************
;       read port B and return it in SHADOWB
;**********************************************

read_B      movfw   PORTB   ;save ouputs of portB in PREVB
         movwf   PREVB
         banksel   TRISB   ;set portB[6-7] as input
         movlw   b'11000000'
         movwf   TRISB
         nop
         banksel   PORTB
         movfw   PORTB
         movwf   SHADOWB   ;copy portB inputs in SHADOWB
         banksel   TRISB   ;set portB as output
         clrf   TRISB
         banksel   PORTB
         movfw   PREVB   ;restore old outputs
         movwf   PORTB
         return

En "blinkbank", basicamente encendemos y apagamos alternativamente el LED 7 del PORTB. Si lo hacemos a saco, parpadea demasiado rapido y no se ve. Para que sea visible, utilizamos un contador, y solo cuando este contador se pone a cero cambiamos de estado.
Despues de que el LED parpadee un numero de veces igual al numero de banco, hacemos una pausa mas larga (o sea utilizamos un contador mayor) y volvemos a empezar.
Código: Seleccionar todo
;**********************************************
;       Blink PORTB 7 depending on BANKN
;**********************************************


blinkbank
         decfsz   blinktimeL,f
         return
         decfsz   blinktimeH,f
         return
         movlw   timervalue
         movwf   blinktimeH
         clrf   blinktimeL
         movlw   b'10000000'
         xorwf   PORTB,f
         decfsz   blinkcount,f
         return
         call    blinkreset
         return

blinkreset
         movfw   BANKN
         movwf   blinkcount
         incf   blinkcount
         rlf   blinkcount,f
         movlw   timervalue2
         movwf   blinktimeH
         clrf   blinktimeL
         bcf   PORTB,7
         return



      END                     ; directive 'end of program'

Y basicamente eso es todo. El programa esta un poco guarrillo porque he hecho muchas modificaciones sobre la marcha, e incluso hay algunas sentencias que se podrian eliminar porque son redundantes, pero como ahora mismo me funciona no tengo planes de corregirlo.

Espero no haber sido demasiado toston....

Potul
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Re: LOOPIC

Notapor Macca » 14 Mar 2007 20:57

potul escribió:El Software pasito a pasito
(dedicado especialmente a Macca)


Ja! Gracias, gracias. Le tendré que dedicar un rato...

potul escribió:Espero no haber sido demasiado toston....


No, por favor; más vale que zozobre.

Gracias de nuevo.

macca
Macca
Avatar de Usuario
Imparable en el GAS
Imparable en el GAS
 
Mensajes: 1083
Registrado: 16 Oct 2004 19:32
Ubicación: Madrid
Puntos: 5850.000
Ha agradecido: 10 veces
Le han agradecido: 16 veces

Notapor potul » 19 Mar 2007 02:13

Si alguien tiene pensado montarse esto que se espere un poquito... Este fin de semana me he puesto a soldar y todavia no he conseguido que me funcione. Ya he detectado un par de cosillas a corregir en el layout, o sea que mejor esperais a que lo haya depurado todo.

Potul
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Notapor potul » 20 Mar 2007 22:30

potul escribió:Si alguien tiene pensado montarse esto que se espere un poquito... Este fin de semana me he puesto a soldar y todavia no he conseguido que me funcione. Ya he detectado un par de cosillas a corregir en el layout, o sea que mejor esperais a que lo haya depurado todo.

Potul


Que no cunda el panico, parece que he encontrado el problema. Dios, me ha costado mas de 3 horas de pruebas, hasta descubrir que tengo un problema doble:

-Un corto entre 2 pistas (casi invisible, me he vuelto tarumba...)
-La polaridad del rele del reves.

Y ahi es donde estoy un poco desconcertado. Resulta que la bobina del rele tiene polaridad, y yo sin saberlo. Y claro, la ley de Murphy ha hecho que el layout que he dibujado tiene la polaridad al reves. Pero resulta que el datasheet de reles que habia mirado no mencionaba nada de polaridad... hasta que he encontrado el datasheet del releexacto que compre en una tienda, y ahi si que se menciona la polaridad de la bobina.
Y ahi es donde necesito un poco de ayuda. Sabeis si todos los reles de este tipo (DIL) tienen polaridad, o hay algunos que no tengan polaridad?La verdad es que si los hay sin polaridad, casi que me compro reles nuevos y no toco la placa. (igualmente tengo que comprar todavia 5 reles, porque solo compre 1 para hacer pruebas)

En fin, a ver si alguno lo sabe y me saca de la duda....

Potul
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Notapor Macca » 21 Mar 2007 10:23

Temdría que comprobarlo, pero creo que tanto los OMROM que utilicé en el switch remoto que está por ahí en otro topic como algún otro similar FINDER (más sensible) que compré para intentar optimizar el consumo no tenían polaridad (la bobina se excitaba en cualquiera de las direcciones).

Tengo otros mini DIL que son del tamaño de un chip (ligeramente más altos) y SPDT que sí tienen polaridad porque incorporan el diodo de protección dentro de la capsula. Parece ser lo habitual en estos relés porque son así unos que compré hace poco (no recuerdo la marca ni el modelo) y otros que compré cuando casi iba de pantalón corto.

Pero no parece ser el caso de los que muestras en tu datasheet. Si te interesa puedo comprobarlo el fin de semana próximo. Dime algo, si nadie más aporta otra información, y lo intento.

Saludos.
Macca
Avatar de Usuario
Imparable en el GAS
Imparable en el GAS
 
Mensajes: 1083
Registrado: 16 Oct 2004 19:32
Ubicación: Madrid
Puntos: 5850.000
Ha agradecido: 10 veces
Le han agradecido: 16 veces

Notapor potul » 21 Mar 2007 10:35

Lo que me pensaba. Yo asumí que no tenian polaridad y me lleve una sorpresa ayer cuando finalmente vi el problema....
entonces casi que comprare reles nuevos sin polaridad y santas pascuas. Aunque ya he encontrado la manera de cambiar la polaridad en layout sin tener que hacer grandes estropicios (me costo una horilla de estrujarme el cerebro... :mellado: )

Potul
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Notapor potul » 21 Mar 2007 11:16

Me estoy liando un poco.... Me estaba mirando los Reles FINDER, y segun el datasheetde la casa, la bobina no tiene polaridad, pero si miro esteen BAnzai, el dibujito tiene un + y un - :?: .... Supongo que tendre que hacer caso al datasheet.

Otra preguntilla.... Tanto en Banzai como en Musikding no venden la version de 5v, solo la de 6V. Conseguire excitar la bobina con los 5v que me da el 7805? Generalmente me da 4.8V en las medidas que he hecho. La spec pone de 4.5 a 7.5.... un poco justillo, no? (Macca, los que utilizaste tu eran de 6 o 5?)

Por cierto, como puede haber tanda diferencia de precio? el mismo rele FINDER en diferentes sitios:

Banzai: 1.55€ (bine)
Musikding: 1.85€ (aceptable)
Onda radio (en Barcelona): 3.75€ (coño!! es mas del doble)
Farnell: 4.4€ (pa cagarse)

En fin....
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Notapor Macca » 21 Mar 2007 11:32

:hombrecito:

Buf!

Tanto los OMROM como los FINDER que he utilizado son de 5V si la memoria no me traiciona.

No te sabría decir. Si recuerdo que los pequeñajos que tengo antiguos son de 6V y funcionan con 5V (de hecho no les llegan los 5V, por "culpa" del transistor, que le resta la caída de tensión de un diodo.

Probaré el fin de semana...

:hombrecito:
Macca
Avatar de Usuario
Imparable en el GAS
Imparable en el GAS
 
Mensajes: 1083
Registrado: 16 Oct 2004 19:32
Ubicación: Madrid
Puntos: 5850.000
Ha agradecido: 10 veces
Le han agradecido: 16 veces

Notapor Macca » 24 Mar 2007 22:52

Macca escribió:Probaré el fin de semana...

:hombrecito:


Potul: Lo prometido es deuda. Comprobado.

Tanto los OMRON (GV52) como los FINDER (30.22 5V ---... y verticalmente pone 03 24) no tienen "polaridad" (funcionan en los dos sentidos).

En los que vende Banzai pone 30.22S (¿es esa la diferencia?)

Por cierto, los Omron son ligeramente más silenciosos mecánicamente. Los Finder suenan un poco a lata. Me refiero al sonido del interruptor, no al audio que no veo diferencia.

Saludos
Macca
Avatar de Usuario
Imparable en el GAS
Imparable en el GAS
 
Mensajes: 1083
Registrado: 16 Oct 2004 19:32
Ubicación: Madrid
Puntos: 5850.000
Ha agradecido: 10 veces
Le han agradecido: 16 veces

Notapor potul » 25 Mar 2007 00:28

Ok, gracias por la comprobacion. Pedire los FINDER a Banzai a ver que tal.

Potul
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Notapor Music Toyz » 12 Mar 2008 00:05

Recupero este topic porque me veo en la necesidad de utilizar algo similar a este loopic y mirando precios por la web me han entrado ganas de llorar :| asi que me interesa mucho muchisimo saber como acaba la historia, si Potul o alguien que haya conseguido hacerlo funcionar finalmente puede contarnos la experiencia estoy seguro que es un tema que interesa a mucha gente...




Un saludo :saludos:
Music Toyz
Avatar de Usuario
Este se queda...
Este se queda...
 
Mensajes: 191
Registrado: 19 Oct 2005 20:53
Ubicación: Tarragona
Puntos: 795.000
Ha agradecido: 0 vez
Le han agradecido: 0 vez

Notapor Macca » 12 Mar 2008 10:05

Animo, potul, que ha pasado un año y estamos a medias...
:D

macca
Macca
Avatar de Usuario
Imparable en el GAS
Imparable en el GAS
 
Mensajes: 1083
Registrado: 16 Oct 2004 19:32
Ubicación: Madrid
Puntos: 5850.000
Ha agradecido: 10 veces
Le han agradecido: 16 veces

Notapor potul » 12 Mar 2008 11:40

Os cuento como esta el tema....

Consegui hacerlo funcionar en mi protoboard, pero al ponerlo todo en la placa tuve algunos problemas con los reles.... y con la "multiplexion" de LEDs....

He estado metido en otras cosas y de hecho tengo unos cuantos pedales a medias, o sin caja en mi mesa, entre ellos este.

Os prometo dedicarle unas horas esta semana a ver si entiendo que cojones tengo equivocado en la placa....

Potul
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Notapor potul » 12 Mar 2008 11:51

o quizas la semana que viene..... esto de la paternidad me quita mucho tiempo...
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Notapor Macca » 12 Mar 2008 12:14

potul escribió:o quizas la semana que viene..... esto de la paternidad me quita mucho tiempo...


Bueno, enhorabuena; no sabía nada. Lo primero es lo primero.

Biberones y pañales antes que guitarrones y pedales.

Felicidades,

macca
Macca
Avatar de Usuario
Imparable en el GAS
Imparable en el GAS
 
Mensajes: 1083
Registrado: 16 Oct 2004 19:32
Ubicación: Madrid
Puntos: 5850.000
Ha agradecido: 10 veces
Le han agradecido: 16 veces

Notapor Music Toyz » 13 Mar 2008 03:53

Estoy con Macca, lo primero es lo primero, no te apures Potul! :risamorada:

Estare al acecho...

un saludo!
Music Toyz
Avatar de Usuario
Este se queda...
Este se queda...
 
Mensajes: 191
Registrado: 19 Oct 2005 20:53
Ubicación: Tarragona
Puntos: 795.000
Ha agradecido: 0 vez
Le han agradecido: 0 vez

Notapor M5L » 13 Mar 2008 12:07

Potul,
muy interesante el proyectito, la verdad que pinta bien.. con programacion y todo. Me lo leeré con más detenimiento.

OFFTOPIC: Mi mas sincera enhorabuena por tu paternidad... yo empecé con esto hace algo mas de tres años... los que tiene mi hija, jeje)
-------- GUITARRISTA --------
M5L
Avatar de Usuario
Imparable en el GAS
Imparable en el GAS
 
Mensajes: 1184
Registrado: 26 Ago 2005 12:29
Ubicación: Barcelona
Puntos: 6425.000
Ha agradecido: 1 vez
Le han agradecido: 1 vez

Notapor potul » 13 Mar 2008 13:28

Gracias, gracias.

No os penseis que soy novato, tengo otro niño de 3 años... Lo que pasa es que en esto de los hijos, 1+1 no son 2, y la verdad es que se te acumula el trabajo.

De todas maneras me habeis picado.... voy a desenterrar el proyecto a ver si consigo algo. Tengo la caja comprada y todo desde hace tiempo.

Potul
Mis cacharros DIY
http://potulfx.blogspot.com/
Imagenescuchando:Imagen
potul
Avatar de Usuario
Preparando la bombona de GAS
Preparando la bombona de GAS
 
Mensajes: 1717
Registrado: 26 Mar 2005 11:41
Ubicación: I'll see you on the dark side of the moon
Puntos: 9165.000
Ha agradecido: 3 veces
Le han agradecido: 66 veces

Notapor M5L » 13 Mar 2008 15:19

Claro que si!!!... desenpolva ese protecto... pero primero lo primero. Esto de ser papá y por partida doble yo todavia no lo conozco (digo todavia, jeje)... pero se de lo que hablas cuando se acumula la "faena" y eso que solo tengo a una peque de 3 añitos que dentro de poco va a saber más que yo en eso de pisar pedales... :risaverde:

Pues estaré al "quite" de este proyecto... aunque como ya sabes, paralelamente estoy con el LOOPER... que tambien estamos comentado por quei los foreros.

un abrazo.
-------- GUITARRISTA --------
M5L
Avatar de Usuario
Imparable en el GAS
Imparable en el GAS
 
Mensajes: 1184
Registrado: 26 Ago 2005 12:29
Ubicación: Barcelona
Puntos: 6425.000
Ha agradecido: 1 vez
Le han agradecido: 1 vez

Notapor artefacto » 14 Mar 2008 20:01

Yo tengo uno hecho prácticamente igual pero se programa de forma totalmente analógica (con conmutadores dip). Lo digo por si a alguien le acojona lo de la programación. A ver si preparo documentación y alguna foto y lo subo.
De todas maneras se podría adaptar el mismo layout quitando la parte del programador y derivando todas conexiones a un conmutador dip en cada loop, de manera que accionando un botón puedes seleccionar varios loops según los tengas activados.
artefacto
Se va picando...
Se va picando...
 
Mensajes: 81
Registrado: 12 Mar 2008 13:53
Ubicación: Zaragoza
Puntos: 335.000
Ha agradecido: 0 vez
Le han agradecido: 0 vez

Re: LOOPIC

Notapor baneado1 » 14 Mar 2008 20:22

potul escribió:
Macca escribió:Saludos. Ya vamos teniendo ganas de que aparezca en tu blog, que no se mueve mucho últimamente...

:mrgreen:


Ya lo se, es que no tengo tiempo para mantenerlo al dia.... La verdad es que tengo algunos pedalillos mas que no he metido todavia en el blog, pero voy apuradillo.

A los que pensais montaros el tema, os aconsejo que espereis un poco y sigais este topic, pues conforme yo lo vaya montando voy a actualizar las cosas.

Por cierto, no lo comente pero el proximo capitulo va de software. Preparad vuestras neuronas encargadas de Assembler (lo siento chicos :risaverde: )

Potul


yo quiero un cacharraco de esos,con 6 reles de puta madre,,piesdas en
fabricar algunos para venta?????

un saludo
baneado1
Empezando a llenar la bombona
Empezando a llenar la bombona
 
Mensajes: 2019
Registrado: 21 Jun 2007 13:56
Ubicación: la nada del olvido
Puntos: 3315.000
Ha agradecido: 0 vez
Le han agradecido: 0 vez

AnteriorSiguiente
Foro Estadísticas

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 22 invitados

Opciones

Volver a El rincón del DIY

cron