TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: RALF2 en 24 de Julio de 2008, 23:54:55
-
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 RALF2
la directiva CONFIG_START es exclusiva de alguna versión en especial?
saludos
Hernán
-
Que tal amigo doppel!
Pues si :mrgreen:
Pertenece a la nueva version del proton 3.3.4.8 (beta).
El config start y el config end son para programar los fuses del micro, pero lo puedes hacer de otra forma con la version antigua :D del proton.
O desde el programador que uses
Saludos
-
Holas!
Me parecia que era de una versión que no conocia!!! muy bueno, hay alguna otra diferencia aparte de esto?
saludos
Hernán
-
Holas!
Me parecia que era de una versión que no conocia!!! muy bueno, hay alguna otra diferencia aparte de esto?
saludos
Hernán
Hola hernan!
Si las hay, :mrgreen: unas de las que mas me gusto que le han agregado es el manejo de las interrupciones :-/
Anteriormente las interrupciones por hardware era un lio manejarlas, ya que al entrar en la interrupcion no era posible salvar las variables del sistema (las utilizadas por el compilador en sus procesos internos) por lo que se corria el peligro de afectarlas con las nefastas concecuencias que ello podria causar :shock: pero ahora esto ya se acabo :mrgreen: :-/ :-/
Ahora existe una directiva que permite salvar las variables del sistema a la hora de entrar a la interrupcion. :mrgreen:
Tambien han mejorado la optimizacion del codigo generado por el compilador lo cual lo hace mas rapido y eficiente :mrgreen:
Las directiva config start y config end son nuevas para mejorar el manejo de los fuses del pic.
Ahora es muy facil simular el codigo generado por proton en el mplab, esto antes no era posible, te recuerdas :D
Y otras cositas mas...
Saludos
-
Hola RALF2
buenisimas noticias!!! por lo que se ve "este chico Tim" que escribe Protón no para!! y me alegro muchisimo por que está quedando cada vez mas potente.- :-/ :-/
saludos
Hernán
-
Si asi es lo han mejorado bastante :mrgreen:
LES, ha hecho bien su tarea mejorandolo :mrgreen:
Lastima que no le agregaron mas instrucciones :( me hubiese gustado. Pero bueno alli estamos quisas para la proxima entrega le coloquen otras :mrgreen:
SAludos
-
:P Raul lo tengo copiado, y lo probare cuando tenga tiempo, a ver si me hecha una mano para hacer un Multiplexer :mrgreen:
Saludo
-
Como no mi estimado amigo!
Claro que si!
Saludos
-
Esta es la nueva version del proton que acaban de sacar del horno :mrgreen:
Aqui les coloco una foto de mi proton actualizado :mrgreen:
Saludos
-
Que tal amigos!
Aqui les coloco un ejemplo donde tanto el master como el slave transmiten y reciben datos :mrgreen:
Lo intente hacer lo mas sencillo posible para no complicar la cosa mucho y para que vean lo facil que es utilizarlo :shock:
El master envia el caracter de interrogacion (?) para indicarle al esclavo que quiere que este lea su adc y le envie el valor obtenido, con una resolucion de 8 bits. Una vez que el esclavo recibe ese caracter este activa su adc y una vez leido el valor del canal 0 , le indica al master a traves del caracter de exclamacion (!) que ya tiene el dato y que se lo va a enviar. Entonces cuando el master recibe el simbolo !, este pasa a modo recepcion a la espera del dato del esclavo y una vez obtenido este lo muestra por pantalla :mrgreen:
-
Hola hermano, me disculpas mi sinceridad pero tu cuando me hablabas de lo que estabas experimentando con el protocolo spi yo simplemente esta sordo porque no te paraba pense que lo que querias hacer era lo basico con software que tienes el proton que son los comando SHOut y SHIn pero veo que usted le esta poniendo un mundo al spi pero con el hardware del micro cosa que nunca le he parado pero me parece super interezarte y mejor a la hora de hablar de rapiden en cuando a protocolo se refiere. Asi que mis reverencia y me quito el sombre jajajajaja.
Bueno ahora ya estoy claro de lo que estas haciendo y me gustaria hacerlo pero ya mas en profundidad aplicando el protocolo spi pero a una eeprom 25c080 ya me estoy documentando para ver como lo hago y lo muestro en una hoja de datos que cre Vb es decir a la vez mi proyecto tendra una comunicacion serial con la pc para asi mostrar los valores de la eeprom spi o en su defecto los que se quieran escribir en la eeprom en pocas palabras un programador de eeprom spi pero ya a los lgrande usando el hardware del pic no via software con proton.
Saludos y espero de su coloboracion y nos vemos por MSN.
Atten. Alexander Santana.
Venezuela-Barcelona
-
Que tal amigos!
Gracias por tus palabras astrocar, aqui te dejo un ejemplo que te ayudara :mrgreen:
Primero que nada recomiendo leer primero el data sheet de la eeprom utilizada, para que asi entiendan el porque de la secuencia del programa y sus valores :shock:
Cualquier duda al respecto estaremos por aqui :mrgreen:
Saludos
-
Que tal amigos!
AQui les coloco otro ejemplo del uso del SPI.
En esta ocacion utilizaremos dos IC, un 74HC595 para manejar unos led y un 74HC165 para leer unos interruptores.
El PIC lo que hace es leer el estado de los interruptores conectados al 74HC165 y luego esa informacion la pasa al 74HC595 para que la despligue en 8 leds.
La lectura y la escritura de datos se maneja por interupcion del tmr0 :mrgreen:
-
bajando!!! :estuve problema con la instalacion del picbasic y microcode, pero parece ser que se soluciono, voy probar ese cuando tenga un tiempecito. :mrgreen:
Saludo Raul
-
Ok mi pana rafael!
No te preocupes, cualquier duda solo avisame :mrgreen:
Voy con otro ejemplo proximamente!
Saludos
-
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:
-
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
-
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.
-
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:
-
Excelente aporte ralf2 hay boy detrás leyendo :-/ :-/
-
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
-
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.
-
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.
-
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:
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:
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.
-
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
-
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.
-
demo proteus