14 votos

Serie de novato: ¿por qué no me acaba de enganchar los cables?

Estoy tratando de transmitir desde un ATtiny85 a un PC usando Arduino-esque código a través de un USB-Serial converter sin entender mucho de nada. Yo estaba sorprendido y horrorizado que no trabajan.

Me confirmó que el pequeño es el parpadeo de la tensión en una de sus patas, pero cuando conecto el pin para transmitir o recibir en el USB-cable serie y tratar de escuchar utilizando un programa terminal, me sale nada.

No estoy seguro de cómo saber qué parte está roto.

Necesito más de VCC, GND, y TXD para transmitir la serie?


Detalles:

El código para el pequeño que está escrito en el entorno de desarrollo de Arduino y un código similar con éxito parpadea todos 4 "PORTB" pins, al menos de acuerdo a los LEDs. Yo uso el código de HLT y Saporetti para que me deje usar el Arduino dialecto de C++ para programar en ella. El programa viene en menos de un K.

#include <SoftwareSerial.h>

SoftwareSerial s(0,1); //receive on "0", and transmit on "1" aka "PB1" aka pin 6

void setup() { s.begin(4800); } // assuming 1Mhz, 4800 baud
void loop() { s.println(millis()); } // transmit something at every opportunity

Hay un montón de traducción involucrados, pero el código es bastante básico. El código que establece la velocidad en baudios parece asumir 1MHz, pero por suerte mi attiny ha predeterminada de fábrica de fusibles y corre a 1MHz. En cualquier caso, el pin 6 es el parpadeo de su voltaje de acuerdo con el LED.

Así que use los cables para conectar el "ftdi" fin del FTDI USB-serial converter a la pequeña: negro a GND (tierra), rojo para VCC, naranja 6. Abro el programa "minicom" en el PC, se establece la velocidad en baudios 4800 y esperar, para nada. Al hablar con mi Boarduino, no tiene ningún problema.

El FTDI convertidor de cable tiene la siguiente configuración: el negro es GND, brown es "CTS", el rojo es VCC (+4.98 V), el naranja es "TXD", el color amarillo es "RXD", el verde es "RTS".

Si quiero transmitir desde la pequeña a la PC, debo ser el parpadeo de la tensión en "TXD" o "RXD"? En otras palabras es la transmisión de alambre para transmitir desde el esclavo para el host, o el host para el esclavo?

De hecho, me trató tanto, tampoco funcionó. He frito menos que el equivalente a un dólar de los equipos hasta el momento, y me estoy poniendo arrogante, así que simplemente conecte los cables en el cable. Tal vez yo no debería ignorar la "CTS" y "RTS" los cables?

Qué necesito para utilizar cualquier otro cable? Hacer RTS y CTS hacer nada?

El hardware es un ATTiny85-PU (paquete DIP-8, corriendo a 1MHz, clasificado a 20MHz) alimentado por USB 4,98 V. El host PC es un MacBook, y con éxito todas las cosas de arduino, incluyendo el uso de ArduinoISP para programar el ATtiny a parpadear en su pequeño corazón.

9voto

nickd Puntos 532

Definitivamente, usted puede transmitir datos utilizando sólo TX Y GND.

En primer lugar, usted desea conectar el ATtiny85 línea de TX para el FTDI línea RX (amarillo en el TTL-232R). Asegúrese de que el adaptador USB puede manejar 5V - estoy bastante seguro de que incluso los 3.3 V TTL-232R es de 5V tolerante.

De acuerdo a la página de ejemplo para SoftwareSerial, es necesario establecer la dirección de la TX & RX líneas en su función de configuración:

// include the SoftwareSerial library so you can use its functions:
#include <SoftwareSerial.h>

#define rxPin 2
#define txPin 3
#define ledPin 13

// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
byte pinState = 0;

void setup()  {
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
}

La velocidad será 4800 en su caso. La librería SoftwareSerial no parecen apoyar CTS Y RTS, así que asegúrese de que usted no los está usando en el software del host.

Echa un vistazo a la referencia de la página para más detalles, donde hablan de algunos de los posibles problemas de sincronización que puede agravarse si se está ejecutando en 1MHz usando el oscilador interno en la pequeña.

7voto

Así que la respuesta parece ser: usted puede simplemente conectar los cables, de hecho sólo GND (negro) y RXD (amarillo), y todo funciona siempre y cuando el software es bueno.

Cosas que no importa:

  • Oscilador interno funciona bien. Parece relativamente estable para mi la limitación de la prueba. A 9600 baudios cualesquiera de los problemas que tiene son insignificantes.

  • Uso de alimentación por USB en las señales que funciona bien. Usted puede utilizar una fuente de voltaje (compartir una base común), pero el cable FTDI lee 3V y 5V señales perfectamente. He conectado una batería, - a GND tanto el FTDI y la pequeña, + a la pequeña de la VCC, y esto funcionó muy bien. Sin embargo, sólo el uso de la VCC (rojo) de la FTDI (alimentación por USB 5V) es mucho más sencillo e igual de efectivo.

Las cosas que hice mal:

  • El Amarillo FTDI "RXD" línea recibe los bits del microcontrolador, por lo que se conecta a la transmisión en el microcontrolador. Yo podría haber tenido este mismo mediante la conexión de la transmisión y recepción de líneas (naranja y amarillo) Led o un Arduino y la comprobación de que el voltaje parpadeaba cuando me transmite desde el PC.

  • Ni SoftwareSerial ni NewSoftSerial funciona fuera de la caja con un ATtiny. Mientras que el ATmega328p y el ATtiny85 compartir un montón de similitudes, hay suficientes diferencias que acaba de llegar a la edad de software para compilar para el nuevo chip no es suficiente.

  • Más lento de la velocidad de baudios no cura las cosas. 300 baudios requiere más complicadas rutinas de retardo, ya que el número de ciclos entre bits es mucho más que un contador de 8 bits. 9600 baudios funciona bien, y mayores tasas de baudios son factibles.

  • Tenga cuidado de escritura de temporización de la crítica de código en C, especialmente en las funciones inline. El tiempo que se tarda en ejecutar dependerá de cómo el compilador optimiza. En particular, durante la calibración de la demora, tan solo cambiando hacia arriba y hacia abajo, usted recibirá una respuesta diferente que cuando se utiliza un (tiempo de compilación detectable) retraso constante, porque la asamblea genera puede ser bastante diferente. No es que C es "lenta", sino que fue demasiado rápido. En un momento me estaba enviando 1s más rápido que 0s (es de suponer que ellos son más aerodinámicos).

  • Para iniciar una transmisión, de traer la línea de BAJO (el bit de inicio) y, a continuación, usted necesita para asegurarse de que la línea está en el derecho de voltaje en cada uno de los 8 puntos de la muestra y, a continuación, asegúrese de que el voltaje es ALTO en la 9ª muestra. NewSoftSerial menciona a hacer una longitud media de retraso en el bit de inicio, pero esto no ha funcionado bien para mí. He utilizado un 75% de retraso en el inicio y un 125% de retraso en la final.

  • La preocupación real acerca de voltaje puede ser que algunos "de serie" (especialmente RS232) es de ±12V, no 0V/5V. Me pasé un montón de tiempo tratando de entender cómo podía ajustar el voltaje de 5V a 3.3 V, pero creo que era completamente irrelevante.

En cualquier caso, la transmisión de serie es fácil, pero conseguir que el timing "perfecto" parece bastante importante. Para mí, esto era sólo una cuestión de la codificación de la transmisión en la asamblea para que yo pudiera contar los ciclos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X