Autor Tema: transmision con SPI  (Leído 3054 veces)

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

Desconectado arturo98370

  • PIC10
  • *
  • Mensajes: 4
transmision con SPI
« en: 25 de Febrero de 2009, 21:58:30 »
hola !!!

Quisiera que por favor alguen me ayudara con este problema que tengo, estoy tratando de transmitir datos por medio de el SPI con un pic 16f873 hacia un registro de desplazamiento 74hc595. Tengo entendido que se manejan solo 3 pines para esto entrada, salida pero no se como iniciar con esto se que los datos para sacarlos se colocan en el registro sspbuf y que salen los datos uno a uno segun el pulso de el reloj . pero no se quien es el reloj, ni como es que lo saco por el puerto RC3 por favor ayudenme estoy desesperado por que no puedo transmitir nada
puede alguin instruirme en como hacerlo se que hay mucha gente muy sabia en este foro por favor ayudenme 

muchas gracias de antemano

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: transmision con SPI
« Respuesta #1 en: 26 de Febrero de 2009, 00:37:35 »
Hola.

En que lenguaje?
El papel lo aguanta todo

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: transmision con SPI
« Respuesta #2 en: 26 de Febrero de 2009, 05:08:26 »
Este ejemplo lo hice en assembler, si te sirve. Es para una memoria eeprom externa pero los principios son idénticos

http://www.todopic.com.ar/foros/index.php?topic=24218.0
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado arturo98370

  • PIC10
  • *
  • Mensajes: 4
Re: transmision con SPI
« Respuesta #3 en: 26 de Febrero de 2009, 14:07:53 »
hola MLO

lo estoy realizando en lenguanje ensamblador .....


pibe ...

no pude transmitir con la rutina que me recomendaste .....  mira hice cambios en tu rutina para probar y me quedo asi, el Puerto c7 yo lo coloque en C2 lo estoy enviando Storage register clock pin (latch pin) del 74hc595  los datos los estoy sacando por el puerto C5 el reloj por C3 ( la interrupcion la estoy manejando para un teclado matricial que voya ocupar  ) ayudame por favor ...

mil gracias de antemano


        LIST   p=PIC16F873A        ; Directiva para definir micro.
       include <P16F873A.inc>        ; Fichero standard de cabezera.
                                       
        ; __CONFIG   _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
;#################### DEFINICIONES ###########################



;Include p16f873a.inc
   
   
PUERTOA      EQU 05
PUERTOB      EQU 06
PUERTOC      EQU 07
UNI      EQU16
STATUS      EQU03
PDel2      EQU 0c          
PDel1      EQU 0d         
PDel0      EQU 0e         
loops       EQU 18
TRISC      EQU 87
T2CON      EQU12
TMR2      EQU 11   
PIR2      EQU 0D   
      org H'0000'



 
   goto    Inicio                ;Se salta el vector de interrupción
   org H'0004'                 ;VECTOR DE INTERRUPCION



   btfsc    INTCON,RBIF      ;Comprueba si es int. de RB0/INT
   goto    IntExt
   retfie




Inicio:    BSf    STATUS,5
         bcf    STATUS,6       ;Activa la pagina 1
         MOVLW    0x06          ; Configure all pins
         MOVWF    ADCON1   
         Movlw    b'000000'          ;RA0..RA4 como salida.
         Movwf    TRISA
         Movlw    b'11110000'       ;Todo el puerto B como entrada.
         Movwf    TRISB
         movlw   B'00010000'
         movwf   TRISC
         bcf    OPTION_REG,NOT_RBPU ;Activa Pull-up en puerto B
         bcf    OPTION_REG,INTEDG    ;Flanco de bajada en interrupcion.
         Bcf    STATUS,RP0          ;Activa la pagina 0
         bsf    INTCON,GIE         ;Activa todas las interrupciones.
         bsf    INTCON,RBIE ;INTE    ;Activa la interrupcion RA0/INT.
          MOVLW   B'01000000'      ;MUESTREO MITAD DATO, TRANSMISION EN ALTO
                            MOVWF   SSPSTAT
         MOVLW   B'00110001'      ;MODE 1,1 SPI MAESTRO,RELOG ALTO, FOSC/16
                            MOVWF   SSPCON
         BCf    STATUS,5
                                   bsf      PUERTOC,2                 ; make sure cs is set high

       

Main


         call  Wren                                        
         bcf   PUERTOC,2                ; set chip select line low
         movlw b'00000000'            ; high addr byte is all 0's
         call  output                        ; call the output subroutine
         bcf   SSPCON,4                 ; set clock idle low, mode 0,1
         bsf   PUERTOC,2                 ; set chip select, begin write cycle
         bsf   SSPCON,4         ; set clock idle high, mode 1,1
         call  wait               ; little delay between SPI sequence
         call DEMORA1s
         goto  Main              ; do it all over again
                                  ; loop can be used to evaluate SPI
                                  ; signals on oscilloscope
       

 
output    movwf SSPBUF             ; place data in buffer to send
loop1     bsf   STATUS,RP0         ; specify bank 1
             btfss SSPSTAT,0         ; has data been received (xmit done)?
             goto  loop1              ; not done yet, keep trying
             bcf   STATUS,RP0         ; specify bank 0
         
           return                   ; return from subroutine

                                       
Wren        bcf   PORTC,7                 ; set chip select line low
          movlw B'00000110'               ; WREN control byte
          call  output             ; Call the output subroutine
            bcf   SSPCON,4         ; set clock idle low, mode 0,1
            bsf   PUERTOC,2                 ; set chip select, begin write
            bsf   SSPCON,4         ; set clock idle high, mode 1,1
            return                   ; return from subroutine

;********************* BEGIN SUBROUTINES*******************************
;*** DELAY ROUTINE - 400uS ***
; Subrutina de espera 400us

wait     movlw .200               ; timing adjustment variable
           movwf loops              ; move variable into loops
top      nop                      ; sit and wait
           nop                      ; no operation
           decfsz loops,f           ; loop complete?
           goto   top               ; no, go again
           return                   ; yes, return from sub

DEMORA1s  movlw     .22       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .134      ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .211      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return 

      END

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: transmision con SPI
« Respuesta #4 en: 27 de Febrero de 2009, 04:33:19 »
"Wren        bcf   PORTC,7                 ; set chip select line low
          movlw B'00000110'               ; WREN control byte
          call  output             ; Call the output subroutine
            bcf   SSPCON,4         ; set clock idle low, mode 0,1
            bsf   PUERTOC,2                 ; set chip select, begin write
            bsf   SSPCON,4         ; set clock idle high, mode 1,1
            return                   ; return from subroutine "

Me parece a mi o le estas indicando chip select con otro pin?
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"


 

anything