Autor Tema: Spi master slave con proton  (Leído 28483 veces)

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

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Spi master slave con proton
« Respuesta #15 en: 13 de Agosto de 2008, 21:47:47 »
Ok mi pana rafael!
No te preocupes, cualquier duda solo avisame  :mrgreen:

Voy con otro ejemplo proximamente!

Saludos

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Spi master slave con proton
« Respuesta #16 en: 14 de Agosto de 2008, 03:53:01 »
Hola Raul, estupendos ejemplos. Como sabes he estado unos días sin Internet y también tengo que terminar un par de cosas, pero cuando acabe los copiar..... estooo los estudiare a fondo. :mrgreen:
Saludos desde Granada, España.

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Spi master slave con proton
« Respuesta #17 en: 14 de Agosto de 2008, 10:29:08 »
Ok Carlos, No te preocupes!
Si tienes alguna duda, por aqui estaremos  :mrgreen:
Es increible lo que se puede hacer con el spi cuando uno aprende a utilizarlo bien  :mrgreen:  y las velocidades a las que se puede operar son muy altas en comparacion con el I2C  :shock:

Saludos

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 666
Re: Spi master slave con proton
« Respuesta #18 en: 16 de Agosto de 2008, 09:11:43 »
Hola, Buenos dias, tenia dias sin entrar y leer ya que el foro esta presentando mucho problemas de estabilidad y en muy repetidas oportunidades, pero en fin ya es otra te ver lo que me perdi; el tema del protocolo SPI via hardware usando los pic me tiene full confundido sobre todo las parte de registro del pic para aplicarlo en proton yo en lo personal estoy tratando de actualizar mi programador de eeprom que meses atras me hice con pic 16f877A pero usando simulacion por software tanto para I2c como para Spi y quiero como ya dije actualizarlo pero usando el hardware del pic para asi conseguir mas provecho del hard del pic y asi tener lo mas optimizado el programador de eeprom que de momento me funciona para i2c,spi y microwire.

Siguiendo los post del grand colega raul me nacion la iniciativa de usarlo para spi hardaware pero por mas que pruebo no logro leer ni escribir una eeprom spi ni completa ni una sola direccion de la eeprom pero mis confucion esta en como usar los registros del pic para dale ordenes a la eeprom tanto de lectura o de escritutura y en el caso de leer o escribir una direccion nose como hacer para enviarle esa direccion que deseo leer o escribir.

Saludos y cualquier documentacion o informacion que me pueda ayudar al respecto se lo agradesco, ya la datasheets del pic me la he leido y no caigo en la idea de dominar esos registros.

Atten: Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Spi master slave con proton
« Respuesta #19 en: 16 de Agosto de 2008, 11:22:06 »
Que tal astrocar!
Mira para configurar el SPI utilizado en el pic debes operar sobre tres registros, estos son:
El SSPSTAT, el SSPCON y el SSPBUF.
Los dos primeros son para el control del modulo spi y el ultimo es por donde envias y recibes los datos  :mrgreen:
Paso a comentar cada uno:
SSPSTAT: este es el registro de status utilizado por el spi ( y tambien por el i2c) de este registro nos interesan tres bit de los cuales yo utilice solo dos  :mrgreen: estos son el SMP en modo master este bit indica el punto donde se muestrean los datos que ingresan al master los cuales pueden ser en el medio del pulso de reloj (generado por el master) o al final del pulso de reloj.
Cuando opera en modo esclavo este bit debe ser siempre colocado a cero.
Luego tenemos el bit CKE, el cual depende a su vez del bit CKP, este define el flanco activo de la señal de reloj.
Por ejemplo si CKP = 0 y CKE = 0 el flanco activo del reloj sera el de bajada (transicion de uno a cero).
Esto esta mejor explicado en el pdf del pic18f252  :shock:

Y por ultimo tenemos el bit BF este solo opera en recepcion tanto master como slave he indica que se a recibido un dato en el SSPBUF y debe ser leido, este se borra solo por hardware cuando es leido el sspbuf.

Luego tenemos el registro SSPCON
Alli tenemos el bit Wcol que indica cuando se ha produciodo una colicion (ver data sheet)
el bit SSPOV solo opera en modo slave para la recepcion he indica que hay un dato en el sspbuf que no ha sido leido y llego otro nuevo, esto provoca que el dato nuevo  que llego se pierda   :shock:
Luego tenemos el bit sspen que es para habilitar el spi.
El bit CKP este bit indica el estado de reposo del reloj que puede ser alto o bajo y junto con el che conforman los llamdos modos del spi  :mrgreen:

Luego tenemos los bit sspm0 a sspm3 los cuales definen el modo de operacion del spi (master o slave) y la frecuencia de la señal de reloj.

Luego tenemos el bit SSPIF este bit se encuentra en el registro PIR1 y se emplea para indicar cuando a finalizado una transferencia de datos (transmision- recepcion).

Recuerden que el spi cuando se saca un bit por SDO l mismo tiempo entra un bit por SDI formando asi algo parecido a un registro de anillo.  :shock:

Para que el master envie o reciba datos siempre debe cargarse algo en el registro SSPBUF, ese es el truco  :D

POr ejemplo si el maestro quiere recibir un dato del esclavo este debe colocr algo (cualquier valor) en el sspbuf para que asi se active el reloj del maestro luego cuando termine el intercambio de datos entre el master y el slave ( revizando el bit sspif de fin de transferencia, por ejemplo) el sspbuf del maestro contendra el dato proveniente del esclavo  :mrgreen:

Ahora bien el dato que fue previamente envido por el maestro cuando lleg al esclavo si este no lo necesita simplemente
lo descartara  :shock:

Esta breve explicacion es sobre el spi del pic si tienes alguna duda con respcto a ello, alex.

Por aqui estaremos.

Nota: falta la explicacion de la memoria  :D :D :mrgreen:









Desconectado sandra

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 374
Re: Spi master slave con proton
« Respuesta #20 en: 16 de Agosto de 2008, 13:37:43 »
Excelente aporte ralf2 hay boy detrás leyendo  :-/ :-/
El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Spi master slave con proton
« Respuesta #21 en: 16 de Agosto de 2008, 13:52:59 »
Excelente aporte ralf2 hay boy detrás leyendo  :-/ :-/

Gracias Sandra!
Estoy haciendo otro ejemplito, espero poder ponerlo esta misma semana mientras te doy chace que vayas leyendo  :mrgreen:

Saludos

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 666
Re: Spi master slave con proton
« Respuesta #22 en: 16 de Agosto de 2008, 23:39:02 »
oye mil gracias por tu explicacion voy a analizar bien el tama y te comento estoy de los registro lo he leido varias veces pero me confunde un poco y no avanso por eso quiero tener bien calro el tema de los registro.

Saludos.
Atten. Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 666
Re: Spi master slave con proton
« Respuesta #23 en: 13 de Septiembre de 2008, 06:18:20 »
Oye se me habia olvidado comentarles que por fin logre entender y hacer un codigo que me leea y escriba el protocolo spi usando el hard del pic y por supuestor los dichos registros que no lograba entender y de verdad que es mas ventajoso que usando por los comando que ya tare predeterminado el copilador para tal fin.

Saludos y mil gracias al buen colega y paisano Ralf2 por todo su tiempo y buenas explicaciones al respecto.
Atten.
Alexander santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado Mr Hankey

  • PIC10
  • *
  • Mensajes: 1
Re: Spi master slave con proton
« Respuesta #24 en: 29 de Enero de 2010, 03:31:07 »
Hola.

Soy nuevo en el foro y quiero felicitarlos ya que está muy completo.

Me preguntaba si me podrian ayudar....

Estoy haciendo comunicación SPI usando el hardware del PIC. Estoy usando un 16f883 como master y un 16f887 como esclavo, pero los datos me salen corruptos. mi configuración tiene una linea de habilitación (SS RA5 en el esclavo y RC0 en el master), a continuación adjunto el codigo de los dos PIC's

MASTER:

Citar
Device 16F883

Xtal 4

@CONFIG_REQ
@__CONFIG _CONFIG1, DEBUG_OFF & LVP_OFF & FCMEN_ON & IESO_ON & BOR_ON & CPD_OFF & CP_OFF & MCLRE_ON & PWRTE_ON & WDT_OFF & XT_OSC
@__CONFIG _CONFIG2, WRT_OFF & BOR40V
All_Digital =  true
ANSELH = $00 ' Puerto B digital (necesario para usar LCD en este puerto).

;------------------ Configuración Comunicación SPI -------------------------------------

TRISC = %11010110  ' Configuro el puerto C para que corresponda con el protocolo SPI.
PORTC = 0
SSPCON = %00110001 ' Configuro el puerto serie sincróno,el reloj es activo abajo.
                   ' La frecuencia del reloj es Fosc/16 = 250kHz en modo maestro.
                   
SSPSTAT = %10000000 ' Se lee los datos de entrada luego de haber enviado los
                    ' datos de salida. Los datos se transmiten en cada flanco de subida del reloj.                   

Symbol BF SSPSTAT.0 ' Me indica si la transmisión/recepción de los datos ha terminado.

Symbol CS PORTC.0  ' Linea de habilitación para la comunicación.
High CS

;------------------------------- LCD -----------------------------------------------------

Declare  LCD_Type ALPHA   ; LCD type - alphanumeric
Declare  LCD_DTPin  PORTB.4   ; LCD data port
Declare  LCD_ENPin  PORTB.1   ; E line
Declare  LCD_RSPin  PORTB.0   ; RS line
Declare  LCD_Interface  4   ; Word length of the tyre of data
Declare  LCD_CommandUs  2000   ; Delay before a command parcel
Declare  LCD_DataUs  50   ; Delay before a data parcel
Declare  LCD_Lines   2   ; LCD lines number

;--------------------- Programa Principal -------------------------------------------

Dim commH[3] As Byte ' Encabezados de la linea command.
Dim dataH[3] As Byte ' Encabezados de la linea data.
Dim i As Byte

commH[0] = $01
commH[1] = $42
commH[2] = $00

Low CS ' Habilito la comunicación.

For i = 0 To 2
       
    SSPBUF = commH
    While BF = 0 : Wend
    DelayUS 50
    dataH = SSPBUF
         
Next

High CS ' Deshabilito la comunicación.
Print At 1,1,"Out = ",Hex commH[0]," ",Hex commH[1]," ",Hex commH[2]
Print At 2,1,"In = ",Hex dataH[0]," ",Hex dataH[1]," ",Hex dataH[2]

End


Slave:

Citar
Device 16F887

Xtal 4

@CONFIG_REQ
@__CONFIG _CONFIG1, DEBUG_OFF & LVP_OFF & FCMEN_ON & IESO_ON & BOR_ON & CPD_OFF & CP_OFF & MCLRE_ON & PWRTE_ON & WDT_OFF & XT_OSC
@__CONFIG _CONFIG2, WRT_OFF & BOR40V

ANSELH = $00 ' Puerto B digital (necesario para usar LCD en este puerto).

;----------------- Configuración comunicación SPI -----------------------------------

TRISC = %11011110  ' Configuro el puerto C para que corresponda con el protocolo SPI.
PORTC = 0
SSPCON = %00110100 ' Configuro el puerto serie sincróno,el reloj es activo abajo.
                   ' La frecuencia del reloj es Fosc/16 = 250kHz en modo esclavo con linea de habilitación (RA5).
SSPSTAT = $00 ' Los datos se transmiten en el flanco de bajada del reloj.

Symbol BF SSPSTAT.0 ' Me indica si la transmisión/recepción de los datos ha terminado.
Symbol led PORTC.0
TRISA.5 = 1  ' Linea de habilitación como entrada.
;------------------------------- LCD ------------------------------------------------
                 
Declare  LCD_Type ALPHA   ; LCD type - alphanumeric
Declare  LCD_DTPin  PORTB.4   ; LCD data port
Declare  LCD_ENPin  PORTB.1   ; E line
Declare  LCD_RSPin  PORTB.0   ; RS line
Declare  LCD_Interface  4   ; Word length of the tyre of data
Declare  LCD_CommandUs  2000   ; Delay before a command parcel
Declare  LCD_DataUs  50   ; Delay before a data parcel
Declare  LCD_Lines   2   ; LCD lines number
                   
;------------------------------ Programa Principal ----------------------------

Dim commH[3] As Byte ' Encabezados de la linea command.
Dim dataH[3] As Byte ' Encabezados de la linea data.
Dim i As Byte                     

dataH[0] = $FF
dataH[1] = $41
dataH[2] = $5A

For i = 0 To 2

    SSPBUF = dataH
    While BF = 0 : Wend
    commH = SSPBUF
   
Next

    If commH[0] = $01 And commH[1] = $42 And commH[2] = $5A Then
        High led
    EndIf

    Print At 1,1,"Out = ",Hex dataH[0]," ",Hex dataH[1]," ",Hex dataH[2]
    Print At 2,1,"In = ",Hex commH[0]," ",Hex commH[0]," ",Hex commH[2]
   
End

Si alguno le pudiera echar un vistazo a los codigos  y me dijiera que esta mal seria genial, ya que llevo un buen rato atascado aquí.
Hasta luego y muchas gracias de antemano.

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Spi master slave con proton
« Respuesta #25 en: 22 de Diciembre de 2010, 18:03:29 »
Que tal amigos!
Aqui les coloco un ejemplito de como operar con el protocolo spi del pic  :mrgreen:

El circuito consta de un master el cual lee el valor analogico de un potenciometro conectado al canal 0, con una resolucion de 8 bits, luego envia ese valor al esclavo el cual lo muestra en pantalla  :mrgreen:
Quise hacerlo de la manera mas sencilla posible para que vean lo facil que es trabajar con el spi del pic luego hare otro un poco mas complicado  :D

Saludos

Hola:

una pregunta...

Si tengo un esclavo (por ejemplo un sensor de temperatura SPI) y solo quiero que mande el valor de la temperatura a un pic...tu programa es igualmente valido?

Un saludo

Aitor

Desconectado mendek2000

  • PIC10
  • *
  • Mensajes: 2
Re: Spi master slave con proton
« Respuesta #26 en: 28 de Abril de 2013, 17:07:59 »
Que tal compañeros, pues he visto ejemplos muy interesantes, lamentablemente ahorita no está en mis posibilidades hacerme de los pic's de los ejemplos, solo cuento con un par de 16f887, y estuve modificando los códigos pero creo que no son compatibles, investigando un poco leí que los comandos para utilizar de manera más general el protocolo SPI son el SHin y el SHout ya no sé si pidieran proporcionarnos algún ejemplo con estos comandos ya que hasta ahora no he encontrado uno solo como para prender y apagar un led, quiero empezar por un ejemplo básico.

tengo algunas dudas dentro de la ayuda de proton con los "mode" de ambos comandos:


Symbol             Value Description
MSBPRE,  MSBPRE_L  0     Shift data in highest bit first.  Read data before sending clock. Clock idles low
LSBPRE,  LSBPRE_L  1     Shift data in lowest bit first.   Read data before sending clock. Clock idles low
MSBPOST, MSBPOST_L 2     Shift data in highest bit first.  Read data after sending clock. Clock idles low
LSBPOST, LSBPOST_L 3     Shift data in highest bit first.  Read data after sending clock. Clock idles low
MSBPRE_H           4     Shift data in highest bit first.  Read data before sending clock. Clock idles high
LSBPRE_H           5     Shift data in lowest bit first.   Read data before sending clock. Clock idles high
MSBPOST_H          6     Shift data in highest bit first.  Read data after sending clock. Clock idles high
LSBPOST_H          7     Shift data in lowest bit first.   Read data after sending clock. Clock idles high


aunque si bien dice para que sirven no logro entender cual es su funcionamiento y supongo que cada uno del maste corresponde a uno del slave. Espero exista alguien que me pueda hechar una mano con esto. desde ya muchas gracias.
 

Desconectado Jiha

  • PIC10
  • *
  • Mensajes: 28
Re:Spi master slave con proton
« Respuesta #27 en: 18 de Marzo de 2025, 13:10:56 »
demo proteus
« Última modificación: 18 de Marzo de 2025, 18:17:47 por Jiha »


 

anything