TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: guancho2002 en 25 de Junio de 2008, 05:14:14
-
Hola a todos, como es habitual y como se me acaban los recursos, acudo a vosotros para ver si es posible solucionar este problema que me lleva loco. Resulta que estoy intentando conectar dos PIC (18F452 y 16F88) a traves del puerto I2C pero como necesito utilizar un GLCD pues me he volcado en la programacion con PROTON. He leido como funciona el puerto, he ojeado multitud de ejemplos, pero todo lo que he encontrado o no tiene nada que ver con la comunicacion entre PICs o es en otro tipo de lenguaje, ya sea por ejemplo PBP.
La comunicacion me funciona en PBP sin ningun problema gracias a unos ejemplos que consegui en este foro pero como ya os he comentado necesito insertar fuentes grandes en el GLCD, para lo que al parecer no esta preparado. ¿Teneis algun ejemplo o alguna referencia o explicacion para hacer esta comunicacion en PROTON? por mas que intento utilizar el BUSOUT y el BUSIN, lo unico que consigo es enviar pero no recibir. Gracias de antemano.
-
Buenos dias, estimado colega te recomiendo que nos muestre la parte del condigo que estas usando para la comunicacion entre los pic que nos comentastes que es via I2c para ver si estas usan algo mal o que es realmente lo que pasa.
Saludos y espero que te podamos ayudar.
Atten. Alexander Santana.
Venezuela-Barcelona
-
Gracias Astrocar por tu interes. Acabo de hacer una modificacion de los dos ejemplos que tenia para PBP y algo mejor va pero solamente recibe la primera respuesta, despues ya se queda el puerto colgado y lo unico que recibe es basura. Para esto he puesto dos pic 16f877 y uno de ellos actua como maestro. Adjunto imagen.
MAESTRO:
DEVICE=16F877
XTAL=4
DEFINE I2C_HOLD 1
SCL VAR PORTC.3 ' Clock pin
SDA VAR PORTC.4 ' Data pin
a VAR BYTE ' Holds 8 characters read from slave
ADCON1 = 7 ' Set PORTA and PORTE to digital
loop:
HBSTART
HBUSIN $02,[a] ' Read string from slave
HBSTOP
Pause 500
GoTo loop ' Do it forever
End
ESCLAVO:
' PicBasic Pro I2C slave program - PIC16F877/PIC-X1
DEVICE=16F877
XTAL=4
' Alias pins
scl VAR PORTC.3 ' I2C clock input
sda VAR PORTC.4 ' I2C data input
' Define used register flags
SSPIF VAR PIR1.3 ' SSP (I2C) interrupt flag
BF VAR SSPSTAT.0 ' SSP (I2C) Buffer Full
R_W VAR SSPSTAT.2 ' SSP (I2C) Read/Write
D_A VAR SSPSTAT.5 ' SSP (I2C) Data/Address
CKP VAR SSPCON.4 ' SSP (I2C) SCK Release Control
SSPEN VAR SSPCON.5 ' SSP (I2C) Enable
SSPOV VAR SSPCON.6 ' SSP (I2C) Receive Overflow Indicator
WCOL VAR SSPCON.7 ' SSP (I2C) Write Collision Detect
' Define constants
I2Caddress CON 2 ' Make our address 2
' Allocate RAM
result VAR BYTE ' ADC result
datain VAR BYTE ' Data in
' Initialize ports and directions
ADCON1 = $0e ' PORTA.0 analog, rest PORTA and PORTE pins to digital
' Initialize I2C slave mode
SSPADD = I2Caddress ' Set our address
SSPCON2 = 0 ' General call address disabled
SSPCON = $36 ' Set to I2C slave with 7-bit address
GoTo mainloop ' Skip over subroutines
i2cslave: ' I2C slave subroutine
SSPIF = 0 ' Clear interrupt flag
IF R_W = 1 Then i2crd ' Read data from us
IF BF = 0 Then Return ' Nothing in buffer so exit
IF D_A = 1 Then i2cwr ' Data for us (not address)
IF SSPBUF != I2Caddress Then Return ' Clear the address from the buffer
Return
i2cwr: ' I2C write data to us
datain = SSPBUF ' Put data into array
Return
i2crd: ' I2C read data from us
SSPBUF = result ' Get data from array
CKP = 1
Return ' Release SCL line
mainloop: ' Main program loop
IF SSPIF Then ' Check for I2C interrupt flag
GoSub i2cslave
EndIF
ADCIN 0, result ' Read ADC channel 0
GoTo mainloop ' Do it all forever
-
Una ayudita? :)
-
hola, hay algo que no entiendo que lenguaje es el que usa porque tengo entendido que en proton para la comunicacion i2c se usa busin(leer) y busout(escribir) y en picbasic es i2cread(leer) y i2cwrite(escribir) y usted me dice que ese codigo esta en picbasic pro y esta usando busin cuando deberia usar es i2cread y segun veo si esta usando picbasic ya que declara con "var" y en proton se declara asi: "dim variable as tipo de variable", asi que me tiene enrredado. Por eso no le he dado mi comentario.
Saludos.
Atten. Alexander Santana.
Venezuela-Barcelona
-
El usa el hardware por eso se ven los registros y el HBUSOUT y HBUSIN, pero en las variables si tienes mucha razon.
-
Que tal amigos!
Amigo guancho2002 tienes una sopa de arroz con mango :D :D en tu ultimo post declaras las variables en pic basic pro y luego utilizas el hstart entre otras que pertenecen al proton :-)
Tienes primero que nada definir en que lenguaje vas a realizar el proyecto, en pic basic pro o proton,
te recominedo el proton porque tienes muchas cosas buenas :mrgreen:
Ahora bien con respecto a tu codigo el proton tiene varias instrucciones para realizar la comunicacion por i2c, entre ellas tenemos el busin, el busout, el i2cread, el i2cwrite las cuales son rutinas hechas por software y el hbusin y hbusout, entre otras, que son soportadas solo por micros que posean modulo mssp.
Ahora bien todas ellas operan como master dentro de un bus i2c, asi que si quieres realizar una comunicacion i2c entre dos micros debes definir uno como master (aqui se te facilita la cosa :D)
y el otro como slave, como el proton no posee ninguna instruccion que maneje el i2c como esclavo directamente, debes programar tu el micro para que opere de esa forma, la recomendacion es que utilices un micro que tenga modulo mssp para que asi puedas configurar el micro como slave mas facilmente :mrgreen:
Vi que eso es lo que intentabas en tu primer post.
En la carpeta de samples de proton aparece un ejemplo de como configurar el pic como esclavo te recominedo que le heches una ojeada.
Espero haberte esclarecido el panorama :mrgreen:
Saludos
-
bueno espero que el colega solvente esos detalles que tiene pendiente con el codigo lo que tiene es que definirce que compilador usar y leer su ayuda.
-
jajajaja, vaya lio que me llevo. La solucion definitiva la quiero hacer bajo PROTON pero como los unicos ejemplos que me funcionaban estaban en PBP pues me decidi a hacer unas modificaciones y eso es lo que he adjuntado. La verdad es que no me habia dado cuenta del ejemplo que trae proton para configurar el esclavo. Voy a probar y ya os cuento. Gracias.
Un saludo. :)
-
prube y nos comentas que aca estamos al pendiente para ver si resolvistes hemano .
saludos y exito
-
hola guancho2002 :-/ , soy nuevo en el foro :shock: y estoy tratando de comunicar dos micros por i2c en proton, la cuestion es que he buscado y no he encontrado ejemplos de como hacerlo me gustaria saber si tu lograste comunicar ambos micros :) , ya que quiero realizar algo similar pero con un pic 12f508 mandando datos y un pic 16f628a capturando en una matriz, te agradecesria de favor si me informaras si lograste realizar tu comunicacion :).
-
Hola te escribo a ver si me puedes hechar una mano.
Me estoy iniciando con algunos conocimientos de programación y electronica.
Me gustaría hacer una plaquita electronica que autocontrole los estados (entradas-salidas)
Es decir que se pudiera configurar con mininterruptores por ej. de 8 posiciones o lo que sea.
una aplicacion en VB6 o en C++ o lo que sea, este detecta los estados (entradas-salidas)
Seria algo que hace de intermediario entre el PC y la plaquita .
Entonces estoy harto de buscar pero lo que veo son proyectos hechos muy costosos y demasiado para mi,
yo no quiero apagar o encender, sino ver el estado de estos configurando lo que vaya a contectar, con un mininterruptor
de 8 posiciones por ej.
¿Hay kits hechos ?
Te agradeceria me orientaras o donde puedeo comprar
Feliz año y muchísimas gracias de antemano.
Un saludo.