Autor Tema: Pic a Pic - Comunicacion Serie  (Leído 5904 veces)

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

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Pic a Pic - Comunicacion Serie
« Respuesta #15 en: 10 de Noviembre de 2006, 21:22:18 »
Gracias por la aclaracion dhmejia, pensaba que hera un shift register normal, la verdad que ve combiene usar uno de estos antes que meter un pic mas jeje

Gracias
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado johnyrpo

  • PIC10
  • *
  • Mensajes: 2
Re: Pic a Pic - Comunicacion Serie
« Respuesta #16 en: 12 de Noviembre de 2006, 10:12:02 »
MAUMIX GRACIAS POR RESPONDER A MI INQUITUD.

Te soy sincero, la verdad apenas estoy dando mis primeros pasos en los micros, el lenguaje de programacion estoy utilizando MPASM del programa MPLAB

Te cuento en detalle que es lo que nececito.

Con un micro 16f877, utilizando el conversor A/D con resolucion de 10bits ,  tomo la señal y la envio por el  pin  TX. esta señal pasa por un modulador FSK y lugo de nuevo por un demodulador FSK. En este punto debo tener de nuevo la señal enviada por el primer micro. La idea es tomar esta señal  y entrarla a un micro   en forma serie y pasarla a  uno delos  puertos  y visualizarla en 10 leds, luego utilizar este puerto y con una escalera R2R hacer un conversor  D/A.
La programacion del primer micro es:

LIST P=16F877A
          INCLUDE P16F877A.INC
      OPCION EQU 81
      CBLOCK 20H
      UNI,DEC,CEN,AUX,
      REG1,REG2,REG3,REG4,REG8,REG9,AUX1
      ENDC
      ORG 00
         GOTO CONFI
      ORG 05
CONFI   NOP
      BANKSEL RCSTA
      BSF RCSTA,SPEN      ;
      BSF STATUS,5      ;Banco 1
      BCF STATUS,6
      MOVLW B'10001110'   ;Justifica ala derecha ADRESH y
      MOVWF ADCON1      ;selecciona AN0
      CLRF TRISC         ;Selecciona puerto C como salida
      MOVLW B'00000010'
      MOVWF TXSTA   
      MOVLW .6
      MOVWF SPBRG   
      BANKSEL PIR1
      BSF PIR1,TXIF
      CLRF PORTC         ;Limpia puerto C
      GOTO TX
TX       NOP
      CALL CONVAD
      CALL BINBCD
      CALL INTX
      GOTO TX
INTX    MOVF CEN,W
      ADDLW 30
      CALL INTX1
      MOVF DEC,W
      ADDLW 30
      CALL INTX1
      MOVF UNI,W
      ADDLW 30
      CALL INTX1
      MOVLW .20
      CALL INTX1
      RETURN
INTX1    MOVWF TXREG
      BANKSEL TXSTA
      BSF TXSTA,TXEN
      BANKSEL PIR1      
PREG2   BTFSS PIR1,TXIF
       GOTO PREG2
      BCF PIR1,TXIF
      BANKSEL TXSTA
      BCF TXSTA,TXEN
      BANKSEL PORTA
      RETURN
CONVAD   MOVLW B'00000001'   ;Frecuencia de nuestreo, canal RA0/AN0 y
      MOVWF ADCON0      ;prende conversor
      CALL PAUSA
      BSF ADCON0,2      ;Inicia proceso de conversión      
PREG   BTFSC ADCON0,2      ;Salta cuando termina proceso de conversión
      GOTO PREG         
      BANKSEL TRISA      ;Banco 1
        MOVF ADRESL,W      ;Lleva el dato a REG8
      BANKSEL PORTA
      MOVWF REG8
      RETURN
PAUSA   MOVLW .5
      MOVWF REG9
PAUSA1   DECFSZ REG9
      GOTO PAUSA1
      RETURN
BINBCD    MOVF REG8,W
         MOVWF AUX
         CLRF UNI
       CLRF DEC
         CLRF CEN
         MOVLW .100
DCENT   SUBWF AUX
         BTFSS STATUS,C   ;Cundo resultado positivo C=1
         GOTO CORREG
         INCF CEN
         GOTO DCENT
CORREG    ADDWF AUX
         MOVLW .10
DDEC    SUBWF AUX
         BTFSS STATUS,C   ;Cundo resultado positivo C=1
         GOTO CORRE1
         INCF DEC
         GOTO DDEC
CORRE1    ADDWF AUX
         MOVF AUX,W
         MOVWF UNI
         RETURN
      END


No tengo ni idea como aherlo, si no es mucho  pedir  y me disculpas la confianza me podrias  hacer un programa que me realice  lo que requiero.


Muchas gracias

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Pic a Pic - Comunicacion Serie
« Respuesta #17 en: 12 de Noviembre de 2006, 15:53:16 »
Hola.
A ver si esto que te hice te sirve:

Antes que nada, SDK_PULSE esta usado en ambos algoritmos como pin envio/recepcion de datos.

#DEFINE   SDK_PULSE PORTB,0   ;//Bit por el cual se envian los datos al FSK

Envio:

Código: ASM
  1. ;REG1 contendria ADRESL
  2. ;REG2 contendria ADRESH
  3.  
  4. ENVIAR                          ;Envio LSB-MSB(Little Indian) de los 10 bits obtenidos del CAD
  5.         MOVLW   .10             ;Indicar que se van a enviar 10 bits
  6.         MOVWF   AUX             ;Guardar valor en variable
  7.  
  8. NEXT_BIT
  9.  
  10.         ;//¿¿¿DEMORA ENTRE BITS???
  11.         RRF     REG2,F          ;Rotar registro hacia la derecha(Afecta flag C)
  12.         RRF     REG1,F          ;Rotar registro hacia la derecha(Afecta flag C)
  13.         BTFSC   STATUS,C        ;¿Enviar alto o bajo?
  14.         GOTO    ALTO           
  15.  
  16.         BCF     SDK_PULSE       ;Bajo
  17.         GOTO    CHECK          
  18.  
  19. ALTO    BSF     SDK_PULSE       ;Alto
  20. CHECK
  21.         DECFSZ  AUX,F           ;¿Enviados los 10?
  22.         GOTO    NEXT_BIT        ;No. seguir con el proximo
  23.  
  24.         RETURN

Recepcion:

Código: ASM
  1. RECIBIR
  2.         MOVLW   .10
  3.         MOVWF   AUX
  4.  
  5. NEXT_BIT2
  6.         ;//DEMORA ENTRE ADQUISICION DE BITS????
  7.         BCF     REG2,2          ;Suponer bajo
  8.         BTFSC   SDK_PULSE       ;Realmente es un bajo?
  9.         BSF     REG2,2          ;No. Poner en alto
  10.  
  11.         RRF     REG2,F          ;Rotar Registro
  12.         RRF     REG1,F          ;Rotar Registro
  13.         DECFSZ  AUX,F           ;10 veces?
  14.         GOTO    NEXT_BIT2       ;No, proximo bit
  15.  
  16.         MOVF    REG1,W          ;REG1<0:7> contiene ADRESL
  17.         MOVWF   PORTB           ;volcar en PUERTOB
  18.  
  19.         MOVF    REG2,W          ;REG2<0:1> contiene ADRESH
  20.         ANDLW   B'00000011'     ;volcar en PUERTOC
  21.         MOVWF   PORTC
  22.        
  23.         RETURN

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: Pic a Pic - Comunicacion Serie
« Respuesta #18 en: 24 de Septiembre de 2015, 11:30:15 »
hola amigos como estan !
tengo una gran duda y estube buscando informacion por google sin exito  :(
se puede hacer una comunicacion sincrona entre 2 pics usando la USART ?
los ejemplos que veo en google de comunicacion sincrona solo lo hacen por SPI o I2C, tendran algun ejemplo con la USART ?
saludos !

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Pic a Pic - Comunicacion Serie
« Respuesta #19 en: 24 de Septiembre de 2015, 11:56:05 »
Si se puede hacer, pero va a depender que tipo de comunicación quieras

Pierdes la capacidad de que sea full-duplex, redondeandolo un poco, termina siendo un SPI que tiene la posibilidad de enviar 9bits en ves de 8.
Tal ves las ventajas son:
- ese 9no bit que permite una detección de error a través de paridad. Por que enviar un 9no bit de información si que es raro.
- Utilizar 2 cables

Y la desventaja frente al SPI
- No poder enviar y recibir al mismo tiempo (como hace el SPI con sus 3 hilos )

O que pueda ser usado como un SPI con 2 cables, ya que el receptor puede enviar 8 bits.

Lo utilizaría? No se, se pierde velocidad usándolo en modo asíncrono, el sincrono es 4 veces mas rápido que el asíncrono solo si te fijas en el reloj ( la UART Sincrona Tiene la misma velocidad que el SPI).
Ademas de eso se le exige enviar 3 bits mas por cada byte, o 2 bits mas por cada 9 bits. Asi que si es mucho mas lento el asíncrono.
Pero tenes la ventaja que es full-duplex y en 2 cables. Que pienso que es una gran ventaja esa.

Nuevamente todo depende de la aplicación que le vayas a dar.

En el datasheet viene explicado paso a paso como setear el modulo como sincrono. tanto como receptor como transmisor.