Tengo un problema extraño al interactuar entre Arduino y BeagleBoneBlack a través de UART.
El Arduino tiene una lógica de 5v y el BBB tiene una lógica de 3.3v, por lo que estoy usando un convertidor de nivel lógico bidireccional de sparkfun .
El convertidor de nivel funciona bien con mi lectura USB/FTDI de 3.3v con mi computadora portátil. Cuando conecto GND,3.3v,RX,TX, pero cuando uso el BBB, no obtengo nada a menos que desconecte la línea de 3.3v. Curiosamente, en mi computadora usando el cable FTDI, obtengo basura A MENOS QUE el 3.3v esté conectado.
En el BBB, con el voltaje de referencia de 3.3v desconectado, el convertidor de nivel parece convertirse de 5v a 2.5v (en lugar del 5v-3.3v previsto), y estoy cansado de este voltaje flotante.
Hice un divisor de voltaje con resistencias, y con la referencia de bajo voltaje de 1.6v, la comunicación aún funciona, pero nuevamente, no con la referencia de bajo voltaje de 3.3v.
Me encantaría sugerencias de por qué este puede ser el caso!
Editar:
Para aclarar con dulce arte ASCII:
Esto funciona (como debería):
___________ _________________ ________ ____________
| | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> | | <-USB-> | Computer |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | FTDI | <-USB-> | Computer |
| (5v) | <-HV (5v)-> | HV (LLC) LV | <-LV (3.3v)-> |(3.3v)| <-USB-> | Computer |
| | <-- GND --> | GND (LLC) GND | <--- GND ---> | | <-USB-> | Computer |
----------- ----------------- -------- ------------
Esto no funciona (y no debería, ya que no hay ref LV):
___________ _________________ ________ ____________
| | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> | | <-USB-> | Computer |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | FTDI | <-USB-> | Computer |
| (5v) | <-HV (5v)-> | HV (LLC) LV | |(3.3v)| <-USB-> | Computer |
| | <-- GND --> | GND (LLC) GND | <--- GND ---> | | <-USB-> | Computer |
----------- ----------------- -------- ------------
Esto funciona (pero no debería):
___________ _________________ _______
| | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> | BBB | (Actually reading about 2.5v)
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | BBB | (on these two lines)
| (5v) | <-HV (5v)-> | HV (LLC) LV | | BBB |
| | <-- GND --> | GND (LLC) GND | <--- GND ---> | BBB |
----------- ----------------- -------
Esto funciona (tampoco debería):
___________ _________________ _______
| | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (1.6v)-> | BBB |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (1.6v)-> | BBB |
| (5v) | <-HV (5v)-> | HV (LLC) LV | <-LV (1.6v)-> | BBB | (Using a voltage divider)
| | <-- GND --> | GND (LLC) GND | <--- GND ---> | BBB |
----------- ----------------- -------
Esto no funciona (pero debería):
___________ _________________ _______
| | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> | BBB |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | BBB |
| (5v) | <-HV (5v)-> | HV (LLC) LV | <-LV (3.3v)-> | BBB |
| | <-- GND --> | GND (LLC) GND | <--- GND ---> | BBB |
----------- ----------------- -------
Extrañamente, parece que Arduino está emitiendo voltaje tanto en RX como en TX, mientras que BBB solo está emitiendo voltaje en la línea TX.
Supongo que el LLC bidireccional no puede detectar en qué dirección se supone que debe ocurrir la comunicación, por lo que el BBB no puede transmitir al Arduino.
Este Sparkfun LLC es el mismo que estoy usando en el canal BBB -> Arduino, pero el lado Arduino -> BBB solo usa un divisor de voltaje. Arreglé esta configuración, y parece estar funcionando ahora.
crosley
Jono