he comentado lo del fast_io porque da errores con
en la comunicación con spi.
hola
hace dias que lo tengo apartado
el cirduito a un lado del escritorio y de vez en cuando lo miro
no se, no entiendo que cosas más raras hace,
Hola compañero
funciona muy bien, el ejemplo tuyo,
a tu esquema le añadi un 7 segmentos y va muy bien.
voy a intentar usar una estrutura para definirme un puerto virtual
u poder mantener el spi por hardware.
----------------------------------------------------
...
#define p0 PIN_A0; // pin 0 del puerto real
#define p2 PIN_A1; // pin 1 del puerto real
#define p3 PIN_A2; // pin 2 del puerto real
#define p4 PIN_B7; // pin 3 del puerto real
struct vport { // This structure is overlayed
bit p0; // bit 0 del puerto virtual
bit p2; // bit 1 del puerto virtual
bit p3; // bit 2 del puerto virtual
bit p4; // bit 3 del puerto virtual
} _7seg-1;
------------------------------------------------------
y si no me queda otra usare el spi por software
i= spi_read();:D
output_bit(pin_a0,bit_test(i,0));
output_bit(pin_a1,bit_test(i,1));
output_bit(pin_a2,bit_test(i,2));
output_bit(pin_b0,bit_test(i,3));
i= spi_read();
output_bit(pin_C0,bit_test(i,0));
output_bit(pin_C1,bit_test(i,1));
output_bit(pin_C2,bit_test(i,2));
output_bit(pin_B7,bit_test(i,3));
activas la salida del pin_xx, despues de verificar si el bit
correspondiente a 0 1 2 3 es uno es cero?
pero entonces no me vale de nada la estructura?
Si tienes un solo esclavo, este es el único que lee el dato, pero si tuvieras mas de un esclavo lo que tienes que hacer es enviar un par de bytes.
El primer byte seria equivalente al "nombre" del esclavo y el segundo byte seria el dígito que el maestro decide que es para ese esclavo.
Lo que no estoy seguro si puedes colgar mas de un esclavo con SPI.Si, como decia antes, se pueden conectar varios esclavos a un master.
Una posible solucion pajaro seria desde el maestro crear una tabla de constantes con los numeros pares y otra para los impares, luego cuando envies los pares seleccionas el esclavo par y cuando envies los impares seleccionas el esclavo impar :mrgreen:Hola RALF2.
Es el maestro que en todo momento selecciona a que lacayo (esclavo) :D quiere enviarle datos, claro esta si necesitas enviar informacion a muchos esclavos, entonces podrias utilizar un decodificador, por ejemplo, para asi ahorar pines del master ;-)
Saludos
Darkman_ANo es complicado. Solo tenes que hacer un AND para obtener el valor. :)
Lo de testear el L.S.B es correcto, es solo otra forma de hacerlo :mrgreen:
No le quise complicar la vida al amigo pajaro, haciendolo asi como indicas :D
Y la tabla perfectamente la puede tener el maestro y el esclavo solo tendria es que revisar el L.S.B ;-) para saber si el numero es par o impar y luego mostrarlo... :mrgreen:RALF2, perdoname pero no te sigo en el razonamiento.
De hacerlo asi, entonces los dos esclavos podrian ser habilitados al mismo tiempo :mrgreen:
Saludos
hola compañeros
lo de la tablas te refieres al vector que le mando al spi_write();...¿?
por el momento reciben los dos esclavo por igual,
pero si le pusiera 30 esclavo, los 30 imagino que lo recibirian,
serian como clones..
pero la idea es ir alternando entre uno y otro,
desde el maestro no desde el esclavo
el esclavo solo muestra lo que le llega
seria ..Código: CSS
... dato[]={0,1,2,3,4,,5,6,7,8,9} // datos a enviar for(a=;a<10;a++) { if(bit_test(a,0)){ // verifico de bit 0 de a es 0 //selecciono esclavo spi_write(dato[a]); //envio al par } if(bit_test(a,0)){ // verifico de bit 0 de a es 1 //selecciono esclavo spi_write(dato[a]); // envio al inpar } }//fin for ...
la pregunta¿que pasa con el ss?
hasta el momento no lo habia usado,
ahora como se seleciona desde css al esclavo
debere de modificar en el circuito de conesion
que por el momento lo tenia asi
pic master esclavo1 esclavo2
===========================
---SCK------------SCK------------SCK
---SDI------------SDO1----------SDO2
---SDO-----------SDI1-----------SDI2
---SS-------------SS1------------SS2
alguna idea?
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=39900.0;attach=20083;image)
Pregunta 1.- ¿como configuro el debug de spi?¿no hay quien lo entienda?
la pregunta¿que pasa con el ss?
hasta el momento no lo habia usado,
ahora como se seleciona desde css al esclavo
debere de modificar en el circuito de conesion
que por el momento lo tenia asi
pic master esclavo1 esclavo2
===========================
---SCK------------SCK------------SCK
---SDI------------SDO1----------SDO2
---SDO-----------SDI1-----------SDI2
---SS-------------SS1------------SS2
alguna idea?
¿como sabes cuando es 1 o 0?. Me parece que te hace falta negar (!) uno de los casos (el primero, si no estoy errado).
Hello!Citar¿como sabes cuando es 1 o 0?. Me parece que te hace falta negar (!) uno de los casos (el primero, si no estoy errado).
No hace falta :mrgreen:
if(bit_test(a,0)) // detecta si el bit0 de la variable a, vale 1
spi_write(dato[a]); //envio al impar
else
spi_write(dato[a]); //envio al par
:mrgreen:
Hola. Disculpame, ¿pero estas dos lineas de codigo no son iguales?
if(bit_test(a,0)){ // verifico de bit 0 de a es 0
//selecciono esclavo
spi_write(dato[a]); //envio al par
}
if(bit_test(a,0)){ // verifico de bit 0 de a es 1
¿como sabes cuando es 1 o 0?. Me parece que te hace falta negar (!) uno de los casos (el primero, si no estoy errado).
Si ya verificaste una condicion, ¿para que verificas la otra, si solo hay 2 casos posibles (1 ó 0) ?. ¿No te alcanza con poner el codigo en el else del if?
Saludos
Pero no te enojes :DHola RALF2.
Hola compañerosLos dos ejemplos que escribiste arriba realizan lo mismo.
DarKman llevas razon se me olvido ponerle la comparacion a 0 o 1.
lo modifico en el pos de arriba (el seudocodigo) vale , pero el fuente esta correcto.
la idea era hacer
if(text_bit(a,0)==o){hace una cosa}
if(text_bit(a,0)==1){hace otra cosa}
pero
si haces
if(text_bit(a,0)){hace una cosa} // si bit 0 es 1 hace eso
if(!text_bit(a,0)){hace otra cosa} //si bit 0 es distito de 1 entendemos que es cero haces eso
¿Que otro valor puede venir en un digito binario? ¿ Un 2?. Tenes solamente 2 opciones, 1 o cero.
lo de doble condicion es por si las moscas,
si no es 1 es 0 pero si seda otro caso, por alguna circunstancia.
por ejemplo si es 1 apagas el led sino lo enciendes .
esto es: si es 1 led on, pero si es 0, u otro valor tambien haces lo mismo que cero,
no me gusta dejar cosas al azar de otras circustancias remotas, por circustancias,
despues pueden surgir problemas no esperado y dificiles de encontrar.
Tambien podia haber usado un if else y dentro de este otro if o un if else if .
pero preferido hacerlo asi con doble comparacíon.
con respecto a este palabrejo: daisy chain, nuevo para mi,Daisy chain ( o daisy chaining) es una forma de conectar dispositivos SPI en serie.Yo no decia que vos lo habias dicho, te recomendaba que lo vieras. Por lo visto, por tu ultimo mensaje seguis teninendo problemas con la cantidad de conecciones SS. Esto te permite conectar los dispositivos que quieras con un solo SS.
yo en ningun momento lo menciono, la conexion que yo nombro
es diferente.
PD: el codigo me estaba funcionando perfectamente visible desde mi pos anterior.
Saludos.
la pregunta¿que pasa con el ss?Y te respondi
hasta el momento no lo habia usado,
ahora como se seleciona desde css al esclavo
debere de modificar en el circuito de conesion
que por el momento lo tenia asi
pic master esclavo1 esclavo2
===========================
---SCK------------SCK------------SCK
---SDI------------SDO1----------SDO2
---SDO-----------SDI1-----------SDI2
---SS-------------SS1------------SS2
alguna idea?
Fijate si podes usar daisy chain.Mi idea era que vieras daisy chain para ver si te servia. Perdon si no te gusta la palabreja pero se llama asi y lo vas a encontrar asi. Y es un término, no una palabreja.
Aclaro que las conecciones en daisy chain y lo que escribiste arriba son distintas.
Saludos.
con respecto a este palabrejo: daisy chain, nuevo para mi,Por supuesto que la coneccion que estas usando es diferente, pero es una cosa que vos creaste. No representa ningun estandar ....
yo en ningun momento lo menciono, la conexion que yo nombro
es diferente.
PD: el codigo me estaba funcionando perfectamente visible desde mi pos anterior.
Saludos.
conexiones:..... y te esta dando problemas (por lo que decis en tu ultimo mensaje). Ahora estas usando mas de un master, segun interpreto.
master1 Master2
===================
---SCK------------SCK----------
---SDI1------------SDO2--------
---SDO1-----------SDI2---------
---SS1-------------SS2----------
tendre que hacer un semaforo u algo,
por que esto no rula, imagino que si uso quire ser el que envia, al otro le toca escuchar...
--> cuantos ss necesitare ?
--> pueden hablar los dos a la vez (Ful-duplex)?
--> puede hablar uno y el otro escucha y luego se turnan (half-duples) ?
Alguna idea..?
¿que me recomiendan?
Alguna idea..?
¿que me recomiendan?
En algunos hilos del foro he leido que si es posible
la comunicación en full-duplex pero no logro dar con
algun esquema para guiarme asi que coloco el que yo hice
para ver si entre todos lo hacemos funcionar.
Hola compañero
funciona muy bien, el ejemplo tuyo,
a tu esquema le añadi un 7 segmentos y va muy bien.
voy a intentar usar una estrutura para definirme un puerto virtual
u poder mantener el spi por hardware.
----------------------------------------------------
...
#define p0 PIN_A0; // pin 0 del puerto real
#define p2 PIN_A1; // pin 1 del puerto real
#define p3 PIN_A2; // pin 2 del puerto real
#define p4 PIN_B7; // pin 3 del puerto real
struct vport { // This structure is overlayed
bit p0; // bit 0 del puerto virtual
bit p2; // bit 1 del puerto virtual
bit p3; // bit 2 del puerto virtual
bit p4; // bit 3 del puerto virtual
} _7seg-1;
------------------------------------------------------
y si no me queda otra usare el spi por software