TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Chenao en 02 de Agosto de 2009, 14:31:51
-
Saludos
Tengo un problema bien particular con programita para la U que tiene que hacer lo siguiente:
Tengo que comunicar dos PICS 16F877 utlizando el protocolo SPI, además el PIC maestro tiene que hacer una conversión A/D hasta acá todo bien, es decir, la conversión no tiene problema, el problema es el siguiente:
Supongamos que el adresh : "registro con que se carga el valor de la conversion" tiene una valor en binario de B'01001101' cuando cargo en el SSPBUF el valor de la conversión "el buffer del modulo MMSP" del maestro y lo envio al esclavo me llega de la siguiente manera
B'10011010' comparando estos dos valores queda lo siguiente:
Adresh = B'01001101'
SSPBUF (esclavo) = B' 10011010'
Puedo detectar que durante la comunicación el valor del ADRESH fue rotado hacia la izquierda, la verdad le hechado mucha cabeza no se si habra una colisión. Pido ayuda no se que hacer.
Otra cosa, para probar que si estaba programando bien le mande un dato cualquira por ejemplo d'123' y si me llegaba correctamente, sera un problema de tiempos, agradesco una manito extra :mrgreen:.
Un saludo desde Pereira - Colombia
-
Si estas usando el proteus para probar el programa , debo decirte que no simula del todo bien el SPI, otra cosa que debes revisar es que el modo SPI del Maestro sea el mismo que el del esclavo, y finalmente que estes acciendo al registro ANSELH en el banco correcto.
Saludos
-
Saludos
Si estas usando el proteus para probar el programa , debo decirte que no simula del todo bien el SPI, otra cosa que debes revisar es que el modo SPI del Maestro sea el mismo que el del esclavo, y finalmente que estes acciendo al registro ANSELH en el banco correcto.
Sander pero que raro porque le mando un dato cualquiera y se funciona :mrgreen: cuando dices que no funciona del todo bien a que casos te refieres ?
Como asi que el modo maestro sea igual al esclavo?, yo lo tengo configurado todo igual exepto que la frecuencia del maestro es fosc/4 y la del esclavo es modo con reloj igual a la patilla SCK y SS# a nive bajo "esta parte todavia no la entiendo bien"
Sander el registro ANSELH me parece que no viene con el 16f877, Sander muchisimas gracias por responder voy a seguir buscando a ver que puedo solucionar
Un saludo desde Pereira - Colombia
-
Chenao por tu respuesta entiendo que si estas usando el proteus, en la version 7.2 note que cuando el esclavo envia datos al maestro , estos llegan como tu describes, lo del modo del SPI me refiero a que el SPI tiene 4 opciones, para el estado inicial del reloj y el momento en el que se valida el dato, es decir, puedes puedes poner el estado inicial de la linea de reloj en 1 o cero , tambien puedes transmitir el dato en el flanco de subida o en el flanco de bajada, la combinacion de estas opciones hacen que el SPI tenga 4 modos de operacion, para ver en que modo esta configurado el SPI debes revisar el bit CKE del registro SSPSTAT y el bit CKP del registro SSPCON.
Queria decir que revises el banco correcto del registro ADRESH no del ANSELH, perdon por el error.
Sobre la linea /SS, esa linea sirve para seleccionar el esclavo cuando tienes varios esclavos en el bus, antes de eviar el dato debes poner esa linea en cero, y cuando no envies datos la debes poner en 1
Saludos
-
Saludos
Sander voy a mirar en cual de los 4 modos esta mi programa. Haber si te entendi, para que funcione bien tanto el esclavo como el maestro deben tener el mismo modo de funcionamiento?
Sobre la linea /SS, esa linea sirve para seleccionar el esclavo cuando tienes varios esclavos en el bus, antes de eviar el dato debes poner esa linea en cero, y cuando no envies datos la debes poner en 1
Sander este terminal se activa directamente utilizando funciones de bits del microcontrolador esclavo es decir:
BCF porta,5 o BSF porta,5
o hay que abilitarlo desde el microcontrolador maestro. ayer estuve parte de la noche intentando solucionar el problema y nada :x . De todas maneras voy a seguir buscando debo tener algun error en alguna partesita. Un abrazo.
Un saludo desde Pereira - Colombia
-
Saludos
Sander voy a mirar en cual de los 4 modos esta mi programa. Haber si te entendi, para que funcione bien tanto el esclavo como el maestro deben tener el mismo modo de funcionamiento?
Si
Sander este terminal se activa directamente utilizando funciones de bits del microcontrolador esclavo es decir:
BCF porta,5 o BSF porta,5
o hay que abilitarlo desde el microcontrolador maestro. ayer estuve parte de la noche intentando solucionar el problema y nada :x . De todas maneras voy a seguir buscando debo tener algun error en alguna partesita. Un abrazo.
Un saludo desde Pereira - Colombia
El maestro debe seleccionar al esclavo al cual quiere enviarle el dato poniendo en cero la linea _SS y despues copiar el dato que quiere enviar al SSPBUF, y esperar a que este se transmita para despues poner en 1 la linea _SS y deshabilitar al esclavo. Como lo estabas haciendo tu?
Saludos
-
Saludos
El maestro debe seleccionar al esclavo al cual quiere enviarle el dato poniendo en cero la linea _SS y despues copiar el dato que quiere enviar al SSPBUF, y esperar a que este se transmita para despues poner en 1 la linea _SS y deshabilitar al esclavo. Como lo estabas haciendo tu?
Acá tengo un error no estoy habilitando ni desabilitando el terminal SS (porta,5)
Entonces deberia quedar más o menos así el programa
para el maestro y esclavo despues de haber configurado sspcon,sspstat, puerto etc
En el Maestro
repite
movf conversión,0
bcf porta,5 ; activo el esclavo
movwf sspbuf
bcf status,6
bsf status,5 banco 1
btfss sspstat,0
goto $-1 ; espero a que se traspase al SSPBUF
bcf status,5
bsf porta,5 ; desactivo el esclavo
call retardo ; retardo
goto repite
para el ESCLAVO quedara así más o menos
repite
bcf status,6
bsf status,5 ; banco 1
btfss sspstat,0
goto $-1
bcf status,5 ; banco 0
movf sspbuf,0
movwf portb ; paso lo de que manda el micro Maestro al puertoB del micro Esclavo
goto repite
Sander ya lo probe y tampoco funciona. Yo creo que aquí no hay problema con el terminal ss. Sander muchas gracias por la explicación del terminal SS. Voy a seguir buscando mira que así se van encontrando errorsitos un abrazo.
Un saludo desde Pereira - Colombia
-
Chenao has probado a simularlo en el MPLAB? ahi veras mucho mejor como esta cada cosa en cada momento, a mi me saco de muchos errores que no hubiera descubierto de otro modo.
tapi8
-
Saludos
Gracias por contestar tapi8. Pero ya e intentado con el MPLAB y se también ocurre lo mismo es un problema de programación que todavia no he podido detectar. Un abrazo