Autor Tema: Adicionar 8 entradas a un PIC.  (Leído 6936 veces)

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

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Adicionar 8 entradas a un PIC.
« en: 21 de Abril de 2007, 12:11:20 »
Hola a Todos:

Bueno, borré el mensaje anterior por no poder adjuntar el .zip.
Este proyecto pienso que es muy interesante.
Recibe 8 entradas Paralelas y las envía a un PIC
por comunicación Serial(no RS232) desde un 74165 (Paralelo a Serial Chip).

Una parte del código no es mio, lo adapte a Isis para ver si funcionaba.
Y trabajó perfecto despues de rabias y frustraciones.

Amigos no puedo adjuntar archivos. Lo lamento.
Les dejo el .ASM que funciona, bueno a mi me funciona.
Código: [Seleccionar]
;**********************************************************************************************
;Thomas McGahee email:tom_macgahee@sigmais.com (06-18-1998) <--Autor
;Modificado por: IAO.
;==============================================================================================
;PIC PORT REQUIREMENTS FOR PARALLEL to SERIAL INPUT PORT
;
;Two outputs, one input. (PS_IN stands for Parallel to Serial INput device)
;Outputs: PS_IN_CLOCK and PS_IN_SHIFT_NOT_LOAD (I like descriptive names).
;Input: PS_IN_SDATA
;
;SAMPLE ROUTINE TO READ 8 BITS FROM PARALLEL TO SERIAL PORT
;Assume 74165 chip used, and allow port sharing on both outputs.
;Assume Clock Inhibit is tied LOW.
;==============================================================================================
;
;=====DIRECTIVAS DEL PROGRAMA.======================================================
LIST P=16F84 ;micro PIC16f84
RADIX HEX ;
include "P16F84.INC"  ; Include header file

__config _XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF

;Igualdades
PS_CTR EQU 0x10 ;Parallel to Serial INput CouNTer, used to keep track of current bit , use any SRAM location desired. Sample 0x10
; *** This register can be shared with other   *** routines. Local Variable.
PS_REG EQU 0x11 ;Storage for 8 bit serial input data , use any SRAM location desired. Sample 0x11

PS_CLOCK EQU 0x00 ;Assign to PORTA0, bit 1 (OUTPUT)
PS_SHIFT_NOT_LOAD EQU 0x01 ;Assign to PORTA1, bit 2 (OUTPUT)
PS_DATA EQU 0x02 ;Assign to PORTA2, bit 4 (INPUT)

;********************VECTOR DE RESET****************************************
  ORG     0X00    ;Dirección del vector de reset.
  GOTO      inicio    ;El programa comienza luego del vector de reset.
      ORG       5
;


;Assume user has set up PIC, including PORTA I/O direction for each bit
PS_IN: ;Entry Label for Parallel to Serial INput
MOVLW D'8' ;8 bits to be read
MOVWF PS_CTR ;Save count
BCF PORTA,PS_CLOCK ;Ensure that clock is low (may be shared)
BCF PORTA,PS_SHIFT_NOT_LOAD ;That LOW latched the data for sure
BSF PORTA,PS_SHIFT_NOT_LOAD ;Now we keep it high so data doesn't change

;Lectura del dato serial transmitido por el 74165. Recibido por PORTA2 del PIC.
PS_LOOP:
BTFSS PORTA,PS_DATA ;Read serial data from port one bit at a time
GOTO GOT_ZERO
BSF STATUS,C ;Load a 1 into carry if bit was a 1
GOTO SHIFT_IN

GOT_ZERO:
BCF STATUS,C ;Load a 0 into carry if bit was a 0

SHIFT_IN:
  RLF PS_REG,F ;Assemble bit into Left-shifting byte     ??????-->RRC
  BSF PORTA,PS_CLOCK ;Shift the data in the 74165 to get ready
;to possibly read the NEXT bit...
  BCF PORTA,PS_CLOCK ;Terminate the Clock pulse!
  DECFSZ PS_CTR,F ;Update our counter
  GOTO PS_LOOP ;If not done, do next bit
  RETURN ;Return with data in PS_IN_REG

 
;********************INICIALIZACIÓN******************************************
inicio  BSF STATUS,RP0   ;Seleccion de la página 1 o Banco 1 de la memoria de datos,
                                ;colocando un 1, sobre el bit RPO. Porque el registro trisb, ;esta en la pagina 1.
CLRF PORTB ;Borra el Puerto B. Se hace salida tris B ya que coloca, todas las salidas a cero cuando lo borra.
        MOVLW B'11100'        ;Carga el literal 11100 que es igual a 1C en reg. trabajo W.      ----------0x04
        MOVWF PORTA          ;Descarga registro de trabajo W en Puerto A y lo hace Entrada y 1 Salida.
        BCF STATUS,RP0   ;Vuelve a la página 0 o Banco 0.
        CLRF  PORTA          ;Coloca las entradas del PuertoA en 0.
CLRW ;Borra el contenido de W, para eliminar basura estatica.

CALL PS_IN

MOVF PS_REG,W
MOVWF PORTB

END    


Pines a conectar.
CHIP 74165          PIC16F84
--Pin 9--Serial>--------1
--Pin 2--Clock---------17
--Pin 1--Load----------18

CHIP74165
Pines 15 y 10 a GND.
Pines 11,12,13,14,3,4,5,6 a unos interruptores.(D0...D7)

PIC16F84 PuertoB salidas a unos Leds.


El objeto es: Si selecciono un Interruptor, lo mandará por serial(PIN 9)
 al PIC y lo mostrará en los Leds.

Si algún día puedo les paso el .Zip.

Espero les guste.
Bye('_').
« Última modificación: 21 de Abril de 2007, 12:44:31 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.


Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Adicionar 8 entradas a un PIC.
« Respuesta #2 en: 27 de Abril de 2007, 19:03:18 »
Citar
Recibe 8 entradas Paralelas y las envía a un PIC
por comunicación Serial(no RS232) desde un 74165 (Paralelo a Serial Chip).

Hola!

¿No sera al reves? El 74165 es un conversor SERIE-->PARALELO, y por lo que explicas, deberia comportarse al reves: convertir 8 entradas en un flujo de datos serie.

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Adicionar 8 entradas a un PIC.
« Respuesta #3 en: 29 de Abril de 2007, 20:22:18 »
Hola a todos:

Sr. aitopes:
Según lo que he leido, el 74165 es un Paralelo a Serial y el 74164 es el Serial a Paralelo.
Pero puede que mis libros esten mal :shock: Voy a revisar.

Ya actualize el link del box.net:
http://www.box.net/shared/cldgpz6jb4
Espero que ahora si se pueda bajar.
Ojo. el archivo .dsn No me trabaja bien en Atlon3000. No sé el motivo.
El .dsn carga pero no hace lo que el programa requiere, porque el 74LS165 del esquema
se comporta en modo diferente en un Atlon Computador. No sé el motivo.


Bye('_')
« Última modificación: 09 de Mayo de 2007, 11:16:17 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Adicionar 8 entradas a un PIC.
« Respuesta #4 en: 30 de Abril de 2007, 07:49:21 »
Hola IAO!

No revises nada, que tienes razón! Se ve que la edad me jugo una mala pasada, y confundi los numero. PERDON!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Adicionar 8 entradas a un PIC.
« Respuesta #5 en: 30 de Abril de 2007, 12:10:06 »
Hola a todos.

Sr. aitopes:
Ayer fui preocupado a casa y revisé, todo esta bien. (Me asusté)
Yo tengo 40 años y me pasan cosas parecidas. :mrgreen:
Espero que la edad no nos afecte tanto, para poder seguir con todo esto. :D

;===============================
Para los demás que intentan simular el 74165:
El 74LS165 del esquema se comporta en modo diferente en un Atlon Computador. No sé el motivo

Citar
Editado el 11-04-08
Comento que tuve un problema con el atlon 3000, corrìa en cualquier màquina con Intel.
Vendì mi atlon me cambiè a un 2 core duo y sorpresa mi problema continuò.
Por ùltimo y para resumir, me dì cuenta que tenìa instalado el winxp en una tabla de particiòn tipo VFAT32 por conveniencia con linux Suse.
La converti a NTFS y nada. Formateo el disco a NTFS desde el principio y solucionè el problema.
Me arrepentì de vender el atlon 3000, pero eso ya es pasado.


Bye('_').
« Última modificación: 11 de Abril de 2008, 21:44:44 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado mincho

  • PIC12
  • **
  • Mensajes: 81
Re: Adicionar 8 entradas a un PIC.
« Respuesta #6 en: 09 de Julio de 2007, 18:30:12 »
Gracias IAO, Yo tengo un atlon y me funciono bien.

Entonces con este metodo se podrian ampliar mas el numero de entrada poniendo 2 o 3 74ls165 ???

Creo que tambien se podria poner el IC CD4021.

Voy a hacer pruebas con el 4021....



Hay dejo una imagen con la idea de forma de uso de 2 ic, seria cuestio de agregarle mas???

Un Saludo....
« Última modificación: 09 de Julio de 2007, 18:33:29 por mincho »

:-/ Saludos  :-/ Desde  :-/ Colombia  :-/

Desconectado mincho

  • PIC12
  • **
  • Mensajes: 81
Re: Adicionar 8 entradas a un PIC.
« Respuesta #7 en: 09 de Julio de 2007, 21:44:43 »
Aqui pongo el .DSN modificado por hardware para que funcione con un CD4021, hay que agregar una puerta inversora 7ls04.

Se podra modificar el Software para no tener que agregar la puerta inversora???

Un Saludo...

:-/ Saludos  :-/ Desde  :-/ Colombia  :-/

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Adicionar 8 entradas a un PIC.
« Respuesta #8 en: 27 de Agosto de 2007, 19:20:07 »
Hola a todos....


Sr. mincho
Saludos.. Recien estoy viendo su mensaje, voy a probar su nuevo agregado, y mañana le informaré.

No tengo a mano el fuente de la simulación, porque no estoy en casa. Pero me imagino que cambiando LOS COMANDOS BSF o BCF
no hace falta un gate inversor (Puerta Inversora).

Te comento que si se pueden usar más de un 74165. Hay que conectarlos en serie, por medio del pin que  no recuerdo
y cambiar un poco el programa para que pueda activar los que estan en cascada.

Es un placer poder ayudar.
Bye('_').

« Última modificación: 28 de Agosto de 2007, 14:16:31 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Adicionar 8 entradas a un PIC.
« Respuesta #9 en: 28 de Agosto de 2007, 14:49:16 »
Hola de Nuevo:

Aquí te mando el fuente para la modificación del CD4021. No hace falta el Inversor Gate que le colocaste.
Código: [Seleccionar]
;**********************************************************************************************
;Thomas McGahee email:tom_macgahee@sigmais.com (06-18-1998)
;modificado por: IAO.
;==============================================================================================
;PIC PORT REQUIREMENTS FOR PARALLEL to SERIAL INPUT PORT
;
;Two outputs, one input. (PS_IN stands for Parallel to Serial INput device)
;Outputs: PS_IN_CLOCK and PS_IN_SHIFT_NOT_LOAD (I like descriptive names).
;Input: PS_IN_SDATA
;
;SAMPLE ROUTINE TO READ 8 BITS FROM PARALLEL TO SERIAL PORT
;Assume CD4021 chip used, and allow port sharing on both outputs.
;Assume Clock Inhibit is tied LOW.
;==============================================================================================
;
;=====DIRECTIVAS DEL PROGRAMA.======================================================
LIST P=16F84 ;micro PIC16f84
RADIX HEX ;Va sin el signo de igualdad (=)
include "P16F84.INC"  ; Include header file

; __config  _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON
__config _XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF

;Igualdades
PS_CTR EQU 0x10 ;Parallel to Serial INput CouNTer, used to keep track of current bit , use any SRAM location desired. Sample 0x10
; *** This register can be shared with other   *** routines. Local Variable.
PS_REG EQU 0x11 ;Storage for 8 bit serial input data , use any SRAM location desired. Sample 0x11

PS_CLOCK EQU 0x00 ;Assign to PORTA0, bit 0 (OUTPUT)
PS_SHIFT_NOT_LOAD    EQU 0x01 ;Assign to PORTA1, bit 1 (OUTPUT)
PS_DATA EQU 0x02 ;Assign to PORTA2, bit 2 (INPUT)

;********************VECTOR DE RESET****************************************
  ORG     0X00    ;Dirección del vector de reset.
  GOTO          inicio    ;El programa comienza luego del vector de reset.
                  ORG            0x05
;==============================================================================================

;********************INICIALIZACION******************************************
inicio  BSF STATUS,RP0 ;Seleccion de la página 1 o Banco 1 de la memoria de datos,
                                              ;colocando un 1, sobre el bit RPO. Porque el registro trisb, ;esta en la pagina 1.
CLRF PORTB ;Borra el Puerto B. Se hace salida tris B ya que coloca, todas las salidas a cero cuando lo borra.
        MOVLW B'11100'        ;Carga el literal 11100 que es igual a 1C en reg. trabajo W.      ----------0x04
        MOVWF PORTA          ;Descarga registro de trabajo W en Puerto A y lo hace Entrada y 1 Salida.
        BCF STATUS,RP0 ;Vuelve a la página 0 o Banco 0.
        CLRF  PORTA          ;Coloca las entradas del PuertoA en 0.
       ;CLRF  PORTB          ;Coloca las entradas del PuertoB en 0.
      CLRW ;Borra el contenido de W, para eliminar basura estatica.

Aqui:
;CALL PS_IN
MOVF PS_REG,W
MOVWF PORTB

;Assume user has set up PIC, including PORTA I/O direction for each bit
PS_IN:                 ;Entry Label for Parallel to Serial INput
MOVLW D'8' ;8 bits to be read
MOVWF PS_CTR ;Save count
BCF PORTA,PS_CLOCK ;Ensure that clock is low (may be shared)
BSF PORTA,PS_SHIFT_NOT_LOAD ;That HIGH latched the data for sure
NOP
NOP
NOP
NOP
BCF PORTA,PS_SHIFT_NOT_LOAD ;Now we keep it LOW so data doesn't change
NOP
NOP
NOP
NOP

;Lectura del dato serial transmitido por el CD4021. Recibido por PORTA2 del PIC.
PS_LOOP:
BTFSS PORTA,PS_DATA ;Read serial data from port one bit at a time
GOTO GOT_ZERO
BSF STATUS,C ;Load a 1 into carry if bit was a 1
GOTO SHIFT_IN

GOT_ZERO:
BCF STATUS,C ;Load a 0 into carry if bit was a 0

SHIFT_IN:   ;Aqui me genera un mensaje pero no se si es rlf o PS_REG.
  RLF PS_REG,F ;Assemble bit into Left-shifting byte     ??????-->RRC
  BCF PORTA,PS_CLOCK ;Shift the data in the 74165 to get ready
  NOP ;to possibly read the NEXT bit...
  NOP
  NOP
  BSF PORTA,PS_CLOCK ;Terminate the Clock pulse!
  NOP
  NOP
  NOP
  DECFSZ PS_CTR,F ;Update our counter
  GOTO PS_LOOP ;If not done, do next bit
  GOTO Aqui
 

  END ;Fin del programa.

Te comento que se puede utilizar el 4014, pero me ha dado problemas, no logro hacer que trabaje.
Bueno ayer cambié: BSF y BCF   PORTA,PS_SHIFT_NOT_LOAD y me trabajó bien.
Compáralo con el código viejo. Espero te sirva.

Nos vemos.
Bye('_').

"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re: Adicionar 8 entradas a un PIC.
« Respuesta #10 en: 29 de Agosto de 2007, 14:45:21 »
Saludos amigos del foro,

Les cuento que hice la simulación del 4021 en Proteus, y en efecto el integrado lee las 8 entradas paralelas y las envia serialmente. Lo que me gustaría es saber como debe ser el programa en PICBASIC para poder capturar esos 8 bits y luego mostrarlos en 8 leds, tal como hizo el amigo IAO con el 74LS165, el asunto es que yo no sé nada de asembler.
Gracias de antemano.
okapi

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Adicionar 8 entradas a un PIC.
« Respuesta #11 en: 29 de Agosto de 2007, 17:13:53 »
Holaaaa:

Sr. okapi:
Te comento que por allí hay uno en lenguaje C en este foro pero no recuerdo donde. Busca con el botón
Buscar que esta arriba. Aparece el fuente en lenguaje C, pero no aparece el esquemático.

Puede que se te haga más fácil, pasarlo de C a Basic, que de Asembler a Basic.

Aquí esta:
Huy que lejos estaba este Tema. http://www.todopic.com.ar/foros/index.php?topic=885.msg8106#msg8106


Bye('_').
« Última modificación: 30 de Agosto de 2007, 12:32:07 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re: Adicionar 8 entradas a un PIC.
« Respuesta #12 en: 31 de Agosto de 2007, 14:38:54 »
Gracias amigo IAO!
Voy a revisar dicho link, pero de todas maneras si alguien, puede dar una ayudita en PicBasic, se lo agradesco de antemano.
okapi

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Adicionar 8 entradas a un PIC.
« Respuesta #13 en: 14 de Septiembre de 2007, 09:02:26 »
Ahora en el enlace dado por IAO ya aparece el PROBLEMA 21 completo: enunciado, imagenes explicativas, programa en C y simulación en PROTEUS.  :-/   :-/   :-/

Un saludo


 

anything