TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: RodrigoAndres en 09 de Diciembre de 2015, 20:10:48
-
hola a todos. como saben el modulo HC-05 esta basado en el microcontrolador BlueCore4 BC417143B. para comunicarse con el modulo, normalmente se emplea el puerto serial, cada vez que llega un dato el modulo lo envia de forma inalambrica. el modulo tambien tiene un puerto SPI, lo que me gustaria saber es si es posible comunicarse con el modulo por el puerto SPI para enviar los datos, ya que no encuentro en ningun lado si es posible o como se hace algo tan complicado.
esta es la hoja de datos del chip inalambrico: https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/CSR-BC417-datasheet.pdf (https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/CSR-BC417-datasheet.pdf)
tambien me gustaria si me pueden ayudar a saber si alguien a intentado hacer una comunicacion de alta velocidad entre el modulo y un dispositivo con android, de unos 100 kilobytes por segundo, lo que pasa es que no puedo pasar mas alla de 1 kilobyte por segundo, porque los datos comienzan a llegar repetidos y algunos se pierden. saven si existe alguna manera de saber si el problema es del modulo inalambrico o si es del android?
lo que pasa es que e buscado mucho en interned y no encuentro nada sobre eso esto esta muy dificil porfabor ayudenme se los agradesco mucho
saludos.
-
el modulo tambien tiene un puerto SPI, lo que me gustaria saber es si es posible comunicarse con el modulo por el puerto SPI para enviar los datos, ya que no encuentro en ningun lado si es posible o como se hace algo tan complicado.
Por lo que dice el datasheet es solo para :
Debugging
Programar la flash ( externa o interna no se )
Fui a la pagina y dice lo mismo.
Respecto a la velocidad por UART, casi 3M baudios tenes ( 2764800 ), no se si es lo que necesitas
saven si existe alguna manera de saber si el problema es del modulo inalambrico o si es del android?
Un analizador logico ? y ver que sale y que no ?
-
entiendo, gracias por la ayuda. sabes en que lugar puedo bajar el analisador logico?
-
https://es.wikipedia.org/wiki/Analizador_l%C3%B3gico
-
ya entendi. aunque creo que seria mejor comprar un receptor bluetot para el computador, y ver si alcansa toda la velocidad, entonces el problema es del android.
-
Hablemos claramente, Android es un Sistema Operativo, no se que HW tengas y que maneje ese Android. De eso va a depender la velocidad.
Supuestamente Bluetooth 1.2 llega a 1Mbit/s = 125KB/s aproximadamente teorico, en la practica unos 90KB/s segun wikipedia.
EL modulo que tenes dice ser de 2.0 + EDR , es decir de 3 Mbit/s = 375Kb/s aproximadamente teorico, practica 252.5KB/s segun wikipedia.
Por tus explicaciones pense que de un dispositivo con Android manejabas una salida ( UART o con un conversor ) y de alli manejabas el HC05.
Pero creo que es mas Un dispostivio con android+bluetooth conectado a un HC05 en el otro extremo.
Por eso mismo habia puesto el Analizador logico para que vieras si era realmente lo que se enviaba o no.
-
ah bueno ya entendi mas, eso significa que si se puede hacer. lo mas seguro es que el problema sea por el android, lo malo de android estudio es que hay muchas formas de hacer lo mismo y es dificil hacer que sea eficiente, tendriamos que obserbar si hay alguna forma para aumentarle la prioridad al bluetooth y a la aplicacion para que tenga mas procesador y asi pueda recibir todos los datos sin ningun problema.
este es el codigo que llebo hasta ahora, te agradeceria mucho si me pudieras sugerir algunas tecnicas para mejorar el rendimiento.
esto es el codigo para recibir los datos del bluetot:
public class Listenner extends Thread {
public Listenner() {
InputStream = new DataInputStream(InStream);
}
@Override
public void run() {
android.os.Message mensaje;
while (!this.isInterrupted()) //se ejecuta mientras la task no sea aya intenrrumpido
{
bytes = 0;
try {
if(InStream.available() > 0) { //si hay datos disponibles
bytes = InStream.read(buffer); //leemos la cantidad de datos disponibles en el bluetot
mensaje = ListennerHandler.obtainMessage(AVAILABLE_DATA, -1, -1); //mandamos el mensaje atravez del handler de mensajes
ListennerHandler.sendMessageAtFrontOfQueue(mensaje); //lo ponemos al frente para que lo lea mas rapido
}
} catch (IOException e) {
e.printStackTrace();
Log.w("salio mal", e.getMessage());
break;
}
try{
Thread.sleep(10); //dormimos la rutina por 10 milisegundos para liberar el procesador
}catch(InterruptedException ie){Log.w("error al dormir", ie.getMessage()); }
}
}
}
este es el codigo para leer el handler y mostrar los datos en la pantalla
Bluetooth_ListennerHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == Bluetooth.AVAILABLE_DATA) { // si el mensaje nos los mando el listener del bluetott
tempBuffer = BytetoInt(Bluetooth.getData()); //almacenamos los datos en un bufer temporal
chart.AddSetofData(tempBuffer, Bluetooth.getAvailableData(), 0.1f); //graficamos los datos en la pantalla
} else {
super.handleMessage(msg); //le consedemos el manejo al handler principal
}
};
};
bueno. el problema es que hasta ahora lo maximo que he logrado son recibir mil bytes por segundo, si le aumento el numero de bytes que envio con el hc-05 al android, entonces pasa que se pierden datos o salen repetidos.
muchas gracias por ayudarme, te lo agradesco mucho.
-
hola a todos, solo queria decirles que ya arregle el problema, lo que pasaba es que el pic que estaba usando no tenia suficiente velocidad para mandar tantos datos por segundo entonces le puse un pic mas poderoso y se arreglo.
-
Despues de todo la maxima velocidad que logra alcanzar el HC-05 es de 22 Kilobytes por segundo. Si le aumento la velocidad, el modulo se muere, se queda trabado la luz roja que tiene queda parpadeando pero el modulo no responde, no hace nada y toca apagarlo y volverlo a prender para que vuelva a funcionar.
Este modulo recibe los datos en la capa RFCOMM, la cual simula un puerto serial inalambrico. Segun la hoja de datos, la maxima velocidad que puede alcanzar es de 350 kbps lo que seria igual a 43 Kilobytes por segundo. Lo que no entiendo es porque solo puedo lograr la mitad de la velocidad?
Lo otro que sucede es que el modulo recibe los datos con la capa RFCOMM y luego este se los pasa a la capa L2CAP, la cual es una capa de envio de paquetes. imagino que si me pudiece comunicar con la capa L2CAP directamente, sin tener que pasar por la RFCOMM entonces la velocidad mejoraria.
La pregunta es si se puede reprogramar el firmware del BC417 para poder comunicarse con la capa L2CAP directamente?
otra cosa que no entiendo es porque en la hoja de datos no dicen nada sobre los comandos AT. Esa funcionalidad de los comandos AT es algo que le agrego el fabricante del modulo al programar la maquina virtual del BC417 con codigo extra?? Como seria para escribir mi propio codigo para la maquina virtual?
gracias a todos por su ayuda.