Autor Tema: Pregunta sobre la Comunicacion serie sincrona del Pic 16F877  (Leído 2397 veces)

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

Desconectado pajarraco25

  • PIC10
  • *
  • Mensajes: 2
Pregunta sobre la Comunicacion serie sincrona del Pic 16F877
« en: 05 de Diciembre de 2005, 14:04:00 »
Hola a todos!! necesito algunos ejemplos de la comunicacion seria sincrona con el pic 16F877, especificamente en el modo SPI maestro.

Agradeceria cualquier ayuda que me puedan brindar, ejemplos, procedimientos, cosas que hay que tomar en cuenta para que se pueda dar la transmision..

Gracias

Desconectado kuauhtemok

  • PIC16
  • ***
  • Mensajes: 116
RE: Pregunta sobre la Comunicacion serie sincrona del Pic 16F877
« Respuesta #1 en: 06 de Diciembre de 2005, 09:59:00 »
Yo te puedo ayudar ampliamente con eso del SPI, pero necesito que me digas que lenguaje de programacion usas....   porq yo solo trabajo con ensamblador...

Supongo que vas a usar el Hardware del 877, porq ya viene el modulo SPI incluido alli.

El protocolo SPI es muy sencillo. Asin que solo espero que me digas si el ensamblador es el lenguaje que usas...

Bajte esta presentacion que hice hce medio año ... solo es para que entiendas lo mas basico del SPI

SPI.pps

Saludos
La felicidad no es mas q la ausencia momentanea del dolor

Desconectado pajarraco25

  • PIC10
  • *
  • Mensajes: 2
RE: Pregunta sobre la Comunicacion serie sincrona del Pic 16F877
« Respuesta #2 en: 08 de Diciembre de 2005, 08:50:00 »
el lenguaje que manejo es ensamblador, estoy usando el pic 16F877A, yo realice el programa pero no obtuve los resultados que esperaba.

yo me quiero comunicar con un generador de tonos, es el W91082. es un Chip de 8 pines de los cuales voy a manipular 3 para su funcionamiento, ellos son:
el Chip enable CE, no es mas que el hablilitador del chip, que funciona cuando este se pone a cero, el Clock que debe estar configurado para leer la Data en flancos descendentes, y la Data que es la informacion..

En el programa que hice preguntaba por una señal alta (BTFSS)un pin que estaba relacionado con un numero en binario que es el destinado a enviarse al generador de tonos y dependiendo si estaba en uno o en cero saltaba a transmitir o bajaba a preguntar por el siguiente numero.  los numeros a transmitir eran del uno al cuatro y los pines que use fueron, RC2, RC1, RC0 y RB4.

en transmitir lo que hice fue descargar los numeros binarios y colocarlos en el registro SSPBUF para su salida.

te anexo el programa que realice para que lo veas y me puedas sugerir que puedo hacer..


      LIST   P= 16F877A
      #INCLUDE   "P16F877A.INC"
      
         DIGITO EQU 27H
         REG1  EQU  28H
         REG2  EQU  29H
         REG3  EQU  30H              

          
ORG    00h
GOTO   CONFIGU
        
CONFIGU       BCF       STATUS,6
                    BSF        STATUS,5    ;paso al banco 1 para configurar puertos   
                  MOVLW  B"10001110"   
       MOVWF  ADCON1     ;decirle al micro que voy a utilizar E/S digitales para PORTA y PORTE     
       MOVLW   B"00001111"
       MOVWF   TRISA
       MOVLW   B"00010011"
       MOVWF   TRISB
                    MOVLW   B"10000111"    
                    MOVWF   TRISC
       CLRF   TRISD         ;puerto D como salida
       CLRF    TRISE         ;puerto E como salida
                    MOVLW   .207         ;se carga .207 en W para XT 4Mhz
       MOVWF   SPBRG         ;se carga el valor en el registro SPBRG con lo que se trabaja a 1200 baudios
                    BCF     STATUS,6
       BCF     STATUS,5          ;devuelta al banco 0      
       CLRF   DIGITO          
       BSF     SSPCON,SSPEN
                    BSF     SSPCON,SSPM0
       BCF     SSPCON,CKP
                    CLRF    PORTA         ;limpia puerto A
       CLRF    PORTB         ;limpia puerto B
                    CLRF    PORTC         ;limpia puerto c
                    CLRF    PORTD         ;limpia puerto D
        BCF     STATUS,6
                     BSF    STATUS,5          ;paso al banco 1 para configura               
                     BCF     SSPSTAT,CKE
                     BCF     STATUS,6
        BCF     STATUS,5   
         
INICIO         BSF    PORTD,1
          BCF     PORTB,7
      BTFSS    PORTC,2
          GOTO     TXDOS
          MOVLW    B"00000001"
          MOVWF    DIGITO
       
      GOTO     TRANSMITIR

TXDOS                      BTFSS    PORTC,1
         GOTO     TXTRES
                             MOVLW    B"00000010"
          MOVWF    DIGITO
       
      GOTO     TRANSMITIR

TXTRES                     BTFSS    PORTC,0
          GOTO     TXCUATRO
          MOVLW    B"00000011"
          MOVWF    DIGITO
          
                   GOTO     TRANSMITIR

TXCUATRO                BTFSS    PORTB, 4
          GOTO     INICIO
          MOVLW    B"00000100"
          MOVWF    DIGITO
          GOTO     TRANSMITIR

TRANSMITIR              BCF      PORTD, 1
                    BSF      PORTB,7
                                 MOVF      DIGITO, W            
       MOVWF    SSPBUF
                                 CALL    DELAY        
                                 GOTO    INICIO


DELAY                       MOVLW     B"00010100"
                    MOVWF     REG3
TERCERO                    MOVLW     B"11111111"
                                 MOVWF     REG2
SEGUNDO                  MOVLW     B"11111111"
                                 MOVWF     REG1
PRIMERO       DECFSZ    REG1
                     GOTO      PRIMERO
       DECFSZ    REG2
       GOTO      SEGUNDO
       DECFSZ    REG3
       GOTO      TERCERO
      RETURN
         
      END            


El delay lo coloque porque puse unes led que encendieran y apagaran cuando habilitaba para transmitir y deshabilitaba..

agradezco cualquier ayuda que me puedas brindar..


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Pregunta sobre la Comunicacion serie sincrona del Pic 16F877
« Respuesta #3 en: 18 de Diciembre de 2005, 07:25:00 »
Fijate lo siguiente, tu haces esto:
Escrito originalmente por pajarraco25

Codigo:

                    MOVLW   B"10000111"    
                    MOVWF   TRISC





Y al hacer eso, estas poniendo al pin RC4/SDI (input) como salida!
Ponlo asi:

Codigo:

                    MOVLW   B"10010111"    
                    MOVWF   TRISC



y vuelve a probar,  si sigues teniendo problemas seguiremos revisando tu código.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)