Autor Tema: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A  (Leído 757777 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado gasparin

  • PIC10
  • *
  • Mensajes: 20
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #45 en: 13 de Abril de 2009, 00:30:11 »
Suky te has mandado con este excelente y completo tutorial
Mi reconocimiento a gran esfuerzo de tu parte
El que no nace para servir no sirve para vivir

Desconectado gcgiron

  • PIC10
  • *
  • Mensajes: 42
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #46 en: 18 de Abril de 2009, 22:56:56 »
Suki, y demas participantes del foro, muchas gracias por este tutorial; para mi que estoy empezando es una buena forma de ser guiado paso a paso.

Les animo a que sigan compartiendo la información y los conocimientos, que ya nos llegará el momento, a los que somos nuevos, de compartir y enseñar.

Guido.
En este mundo he visto algo más: que no son los veloces los que ganan la carrera, ni los valientes los que ganan la batalla; que no siempre los sabios tienen pan, ni los inteligentes son ricos, ni los instruidos son bien recibidos; todos ellos dependen de un momento de suerte.

Eclesiastes 9:11

Desconectado kaneda

  • PIC12
  • **
  • Mensajes: 52
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #47 en: 30 de Abril de 2009, 19:05:55 »
Muy buena info sobre los perifericos del PIC16F628A... queria saber si tienes idea de cuanto es el valor maximo de tension que soportan las entradas analogicas del pic para usarlo como comparador. supongo que es vdd pero no estoy seguro. muchas gracias

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #48 en: 30 de Abril de 2009, 19:58:26 »
Muy buena info sobre los perifericos del PIC16F628A... queria saber si tienes idea de cuanto es el valor maximo de tension que soportan las entradas analogicas del pic para usarlo como comparador. supongo que es vdd pero no estoy seguro. muchas gracias

Si exactamente, entre Vss y Vdd. Fíjate en el datasheet del micro que internamente tiene 2 diodos en serie que limitan la tensión de entrada entre -0.3V y 5.3V...
No contesto mensajes privados, las consultas en el foro

Desconectado acervantes

  • PIC10
  • *
  • Mensajes: 4
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #49 en: 09 de Mayo de 2009, 14:01:59 »
Muy buen aporte para personas como yo que estan empezando en esto de los PICs, gracias por tu aporte.

Solo que tengo la siguiente duda. Encontre el siguiente programador PIC JDM, creen que funcione para un 16F628A? o hay que modificar algo para que funcione bien?.

« Última modificación: 09 de Mayo de 2009, 14:14:38 por acervantes »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #50 en: 09 de Mayo de 2009, 16:42:55 »
Al principio del hilo, donde esta el índice, deje un comprimido con un JDM más general. Te conviene armarte ese ya que tiene casi los mismos componentes y vas a poder grabar mayor variedad de micros (Para el futuro). :wink:
No contesto mensajes privados, las consultas en el foro

Desconectado acervantes

  • PIC10
  • *
  • Mensajes: 4
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #51 en: 10 de Mayo de 2009, 03:41:02 »
Al principio del hilo, donde esta el índice, deje un comprimido con un JDM más general. Te conviene armarte ese ya que tiene casi los mismos componentes y vas a poder grabar mayor variedad de micros (Para el futuro). :wink:

Gracias por responder. En efecto armare el programador que tu tienes ya que lo tienes probado para un 16F628A-I/P.
Otra duda: ¿Crees que funcione de igual forma si le pongo el sustituto de los Transistores?

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #52 en: 10 de Mayo de 2009, 03:59:59 »
A que sustituto te refieres? Igual no creo que haya problemas...
No contesto mensajes privados, las consultas en el foro

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #53 en: 17 de Mayo de 2009, 01:24:21 »
Control de Displays con 74LS164

Aquí realizo un nuevo ejemplo de manejo de varios displays de 7 segmentos. En este caso realizaremos el control de 3 displays con la ayuda del registro de desplazamiento 74LS164. Las ventajas que conlleva el uso de este CI es que no necesitaremos multiplexar la señal enviada a los displays, algo que limita mucho al microcontrolador, ya que debe refrescarlos continuamente. Y la desventaja es que necesitaremos un 74LS164 por cada display.

Hardware: (los pines 7 y 14 del 74LS164 van a GND y 5V, y se debe agregar una resistencia a cada linea que une el 74LS164 con el display)

Con este circuito se pueden manejar 3 displays + los 3 puntos. El primer bit que ingresa será empujado por los demás. Ejemplo para enviar 12.7:


Código: ASM
  1. ; **** Encabezado ****
  2. list p=16F84A
  3. #include P16F84A.inc
  4. __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
  5. ;**** Definicion de variables ****
  6. Display1        equ             0x0C    ; Valor que luego de convertido se enviara al Display 1
  7. Display2        equ             0x0D    ; Valor que luego de convertido se enviara al Display 2
  8. Display3        equ             0x0E    ; Valor que luego de convertido se enviara al Display 3
  9. DataEnviar      equ             0x0F    ; Dato convertido a codigo 7 Segmentos a enviar
  10. ContBits        equ             0x10    ; Para controlar el envio de bits
  11.  
  12. Desc            equ             0               ; Definimos Pulsador descendente.-
  13. Asc                     equ             1               ; Definimos Pulsador ascendente.-
  14. BClock          equ             0               ; Pin reloj del 74LS164
  15. BData           equ             1               ; Pin data del 74LS164
  16. BReset          equ             2               ; Pin Reset del 74LS164
  17. Pto                     equ             0               ; Bit punto, Con este indicamos si se muestra punto.-
  18.        
  19. Resett          org             0x00            ; Aquí comienza el micro.-
  20.                         goto    Inicio          ; Salto a inicio de mi programa.-
  21.                        
  22. ;**** Tabla de conversion BCD a 7 Segmentos ****
  23. ; Se coloca al inicio para asegurar ubicacion en Pagina.-
  24.                         org             0x05            ; Origen del código de tabla.-
  25. BCD7SEG:                                                ; retlw b'abcdefg0'  para display catodo comun
  26.                         addwf   PCL,1           ; Se incrementa el contador del programa.-
  27.                         DT 0xFC , 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6 
  28.  
  29. ;**** Programa principal ****
  30. ;**** Configuracion de puertos ****
  31. Inicio          bsf             STATUS,RP0      ; Pasamos de Banco 0 a Banco 1.-
  32.                         movlw   b'11111000'     ; RB7 como entrada y los demas como salida.-
  33.                         movwf   TRISB
  34.                         bcf             STATUS,RP0      ; Paso del Banco 1 al Banco 0
  35.                         clrf    Display1
  36.                         clrf    Display2
  37.                         clrf    Display3
  38.                         bsf             PORTB,BReset    ; Habilitamos 74LS164.-
  39.                         bcf             PORTB,BData
  40.                         bsf             PORTB,BClock    ; Seteamos Clock.-
  41.  
  42.                         goto    ActualizoDisplays
  43.  
  44. ;**** Testeo de Pulsador ****
  45. Testeo
  46.                         btfss   PORTA,Desc      ; Testeamos si esta a 1 logico.-
  47.                         goto    Descender       ; No
  48.                         btfss   PORTA,Asc       ; Testeamos si esta a 1 logico.-
  49.                         goto    Ascender                                               
  50.                         goto    Testeo          ; Si, Testeamos nuevamente.-
  51.  
  52.  
  53.  
  54. ;**** Rutinas ****
  55. Descender
  56.                         btfss   PORTA,Desc      ;
  57.                         goto    $-1                     ; Esperamos hasta que se suelte.-
  58.                         decf    Display1,1      ; Decremento Display1.
  59.                         movlw   d'255'          ; Si paso de 0 a 255...
  60.                         subwf   Display1,0      ; decremento Display2
  61.                         btfss   STATUS,Z        ;
  62.                         goto    ActualizoDisplays       ; no es 255
  63.                         movlw   d'9'
  64.                         movwf   Display1        ; Si, cargo 9.-        
  65.                         decf    Display2,1      ; Decremento Display2.-
  66.                         movlw   d'255'          ; Si paso de 0 a 255...
  67.                         subwf   Display2,0      ; decremento display3
  68.                         btfss   STATUS,Z        ;
  69.                         goto    ActualizoDisplays       ; No es 10.-
  70.                         movlw   d'9'
  71.                         movwf   Display2        ; Si, cargo 9.-
  72.                         decf    Display3,1      ; Decremento Display3.-
  73.                         movlw   d'255'          ; Si paso de 0 a 255...
  74.                         subwf   Display3,0     
  75.                         btfss   STATUS,Z
  76.                         goto    ActualizoDisplays       ; No es 10.-
  77.                         movlw   d'9'
  78.                         movwf   Display3        ; Si, cargo 9.-
  79.                         goto    ActualizoDisplays
  80. ;.........................................................
  81. Ascender       
  82.                         btfss   PORTA,Asc       ;
  83.                         goto    $-1                     ; Esperamos hasta que se suelte.-
  84.                         incf    Display1,1      ; Incremeto Display1.
  85.                         movlw   d'10'           ; Si es 10 reseteo e incremento Display2
  86.                         subwf   Display1,0      ;
  87.                         btfss   STATUS,Z        ;
  88.                         goto    ActualizoDisplays       ; no es 10
  89.                         clrf    Display1        ; Si, reseteo.-        
  90.                         incf    Display2,1      ; Incremento Display2.-
  91.                         movlw   d'10'           ; Si Decena = 10, reseteo e incremento Display3
  92.                         subwf   Display2,0      ;
  93.                         btfss   STATUS,Z        ;
  94.                         goto    ActualizoDisplays       ; No es 10.-
  95.                         clrf    Display2                ; Si, reseteo.-
  96.                         incf    Display3,1      ; Incremento Display3.-
  97.                         movlw   d'10'           ; Si es 10 Reseteo.-
  98.                         subwf   Display3,0
  99.                         btfss   STATUS,Z
  100.                         goto    ActualizoDisplays       ; No es 10.-
  101.                         clrf    Display3                ; Si, reseto
  102.                         goto    ActualizoDisplays
  103. ;...................................................   
  104. ActualizoDisplays
  105.                         movfw   Display1
  106.                         call    BCD7SEG                 ; Convertimos BCD a codigo 7 Segmentos.-
  107.                         movwf   DataEnviar              ; Cargamos dato a enviar devuelto x BCD7SEG.-
  108.                         call    EnviaDato
  109.                         movfw   Display2
  110.                         call    BCD7SEG                 ; Convertimos BCD a codigo 7 Segmentos.-
  111.                         movwf   DataEnviar              ; Cargamos dato a enviar devuelto x BCD7SEG.-
  112.                         bsf             DataEnviar,Pto  ; A ejemplo cargamos punto a enviar.-
  113.                         call    EnviaDato
  114.                         movfw   Display3
  115.                         call    BCD7SEG                 ; Convertimos BCD a codigo 7 Segmentos.-
  116.                         movwf   DataEnviar              ; Cargamos dato a enviar devuelto x BCD7SEG.-
  117.                         call    EnviaDato
  118.                         goto    Testeo
  119. ;**** Se envia Dato a los registros de desplazamiento ****
  120. ;-----------------------------------------------------------------------------------------
  121. ; 1º se envia el LSB, luego se va rotando a la derecha y se envian los bits de mayor peso.-
  122. ;-----------------------------------------------------------------------------------------
  123. EnviaDato
  124.                         movlw   d'8'                    ; Número de bits a transmitir.
  125.                         movwf   ContBits
  126. EnviaBit                                                        ; Comienza a enviar datos.
  127.                         btfss   DataEnviar,0    ; ¿Es un "1" el bit a transmitir?
  128.                         bcf             PORTB,BData             ; No, pues envía un "0".
  129.                         btfsc   DataEnviar,0    ; ¿Es un "1" el bit a transmitir?
  130.                         bsf             PORTB,BData             ; Si, Transmite un "1".
  131.                         bcf             PORTB,BClock    ; Clock=0.-
  132.                         nop
  133.                         bsf             PORTB,BClock    ; Clock=1.-
  134.                         rrf             DataEnviar,1    ; Rota para envia siguiente bit.-
  135.                         decfsz  ContBits,1              ; Comprueba si es el último bit.
  136.                         goto    EnviaBit                ; No es el último bit repite la operación.
  137.                         return                                  ; Retornamos.-
  138. ;.................................................................................
  139.                         end
No contesto mensajes privados, las consultas en el foro

Desconectado ing_alqa

  • PIC10
  • *
  • Mensajes: 12
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #54 en: 20 de Mayo de 2009, 18:51:13 »
Gracias, muchas gracias. Literalmente aplaudí al finalizar de leer las primeras aplicaciones con el PIC16F84A. Saludos desde Colombia. A propósito, sabes donde puedo encontrar información para iniciarme en las comunicaciones PIC-Ethernet? Gracias de nuevo.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #55 en: 20 de Mayo de 2009, 18:56:49 »
En este mismo foro hay mucha información, mira aquí.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado acervantes

  • PIC10
  • *
  • Mensajes: 4
Re: Mis primeros programas. PIC16F84A y PIC16F628A
« Respuesta #56 en: 21 de Mayo de 2009, 10:56:54 »
Otro ejemplo:
En este se fija la frecuencia de PWM en 2 kHz y se varía el ciclo de trabajo con 2 pulsadores de control conectados a RB0 y RB1. Solo se modifica en byte alto del CT, ósea el registro CCPR1L con lo que CT se varía de 4 en 4.

Hardware necesario:


Código: ASM
  1. ; **** Encabezado ****
  2.         list            p=16f628A       ; list directive to define processor
  3.         #include        <p16f628A.inc; processor specific variable definitions
  4.         __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON
  5.  
  6. ;**** Definicion de variables ****
  7.         Contador1       equ             0x20    ;
  8.         Contador2       equ             0x21    ;
  9.        
  10.         decre   equ             0       ; Pulsador para decrementar Ciclo de Trabajo
  11.         incre   equ             1       ; Pulsador para incrementar Ciclo de Trabajo
  12.        
  13.        
  14. ;/////////////////////////////////
  15. ;**** Inicio del Micro ****
  16. Reset.         
  17.         org             0x00            ; Aquí comienza el micro.-
  18.         goto    Inicio          ; Salto a inicio de mi programa.-
  19.  
  20. ; **** Programa Principal ****
  21.         org             0x05
  22. Inicio
  23.         bsf             STATUS,RP0      ; Banco 1
  24.         bsf             TRISB,incre     ; Como Entrada.-
  25.         bsf             TRISB,decre     ; Como Entrada.-
  26.         bcf             TRISB,3         ; RB3 como Salida.
  27.         bcf             STATUS,RP0      ; Banco 0.-
  28.         movlw   b'00000110'     ; Se selecciona TMR2, preescaler de 1/16.-
  29.         movwf   T2CON
  30.         bsf             STATUS,RP0      ; Banco 1
  31.         movlw   0x1E            ; Señal de 2kHz
  32.         movwf   PR2    
  33.         bcf             STATUS,RP0      ; Banco 0
  34.         clrf    CCPR1L          ; Ciclo de trabajo 0%
  35.         bcf             CCP1CON,CCP1X
  36.         bcf             CCP1CON,CCP1Y
  37.         bsf             CCP1CON,CCP1M3  ; Configura modulo CCP modo PWM.-
  38.         bsf             CCP1CON,CCP1M2
  39. Bucle
  40.         btfsc   PORTB,decre     ; Testea si se quiere reducir CT.-
  41.         goto    Decrementa
  42.         btfsc   PORTB,incre     ; Testea si se quiere aumentar CT.-
  43.         goto    Incrementa
  44.         goto    Bucle
  45. Incrementa
  46.         incf    CCPR1L,1
  47.         call    Demora_50ms
  48.         goto    Bucle
  49. Decrementa
  50.         decf    CCPR1L,1
  51.         call    Demora_50ms
  52.         goto    Bucle
  53.  
  54.  
  55. ;**** Demora ****
  56. Demora_50ms
  57.         movlw   0xFF                    ;
  58.         movwf   Contador1               ; Iniciamos contador1.-
  59. Repeticion1
  60.         movlw   0x40                    ;
  61.         movwf   Contador2               ; Iniciamos contador2
  62. Repeticion2
  63.         decfsz  Contador2,1             ; Decrementa Contador2 y si es 0 sale.-        
  64.         goto    Repeticion2             ; Si no es 0 repetimos ciclo.-
  65.         decfsz  Contador1,1             ; Decrementa Contador1.-
  66.         goto    Repeticion1             ; Si no es cero repetimos ciclo.-
  67.         return                                  ; Regresa de la subrutina.-
  68. ;..............................................
  69.         end


En este ejemplo ¿la frecuencia que estas utilizando es de 4Mhz, lo que es lo del oscilador interno.? Tengo una pregunta: ¿Puedes cambiar la frecuencia de oscilacion a 48khz? ¿Como puedo cambiar el duty cycle no de 4 en 4 si no de 1 en 1? ¿Tendras algun ejemplo para controlar el angulo de disparo del TRIAC o SCR? Gracias
« Última modificación: 21 de Mayo de 2009, 10:59:22 por acervantes »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #57 en: 21 de Mayo de 2009, 11:23:14 »
Si exactamente, utilizo el oscilador interno. Para cambiarlo a 48kHz debes configurar el bit OSCF en el registro PCON(8Eh)

1 =  Selección de 4MHz para el oscilador interno.
0 = Selección de 48kHz para el oscilador interno.


Con respecto a variar CT en 1 en 1 hay que trabajar con los bits CCP1X y CCP1Y. No me he dado el tiempo para hacer un ejemplo, pero cuando pueda lo are.
No contesto mensajes privados, las consultas en el foro

Desconectado acervantes

  • PIC10
  • *
  • Mensajes: 4
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #58 en: 23 de Mayo de 2009, 02:42:06 »
Se puede limitar el ciclo de trabajo de este ejemplo ya que cuando llega a 0% de Duty Cycle, le das otro decremento, se dispara a 1 logico. Es decir, darle un rango de maximo y minimos, decrementos e incrementos. Gracias :)

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #59 en: 23 de Mayo de 2009, 21:30:48 »
Claro que si, fíjate en este ejemplo como se hace un control de estos.
No contesto mensajes privados, las consultas en el foro


 

anything