Не удается получить значения max232 с помощью loopback
Я еще не нашел ответов, которые решали бы мою проблему с max232. Я подключил его таким образом к своему Arduino uno, так что мой Arduino обеспечивает +5V VCC и землю: максимальное соединение 232
Единственное отличие заключается в том, что я делаю петлю на стороне RS232 и использую 1 мкФ для каждого конденсатора, даже для байпасного. Я сделал обратную петлю, чтобы посмотреть, работает ли max232. Я ничего не получаю от него, когда посылаю ему какие-то данные. Я измеряю +8,7 В на выводе 2 и -8,15 В на выводе 6.
Мой код Arduino:
/*
Software serial multiple serial test
Receives from the hardware serial, sends to software serial.
Receives from software serial, sends to hardware serial.
The circuit:
* RX is digital pin 10 (connect to TX of other device)
* TX is digital pin 11 (connect to RX of other device)
created back in the mists of time
modified 25 May 2012
by Tom Igoe
based on Mikal Hart's example
This example code is in the public domain.
*/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
}
void loop() // run over and over
{
if (mySerial.available())
Serial.print(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
Что я сделал не так или мой max232 сломан?
ПРАВКА
Я думаю, что последовательный монитор (тот же baudrate) не записывает в порты, поэтому я переписываю какой-то код.
код цикла:
int i = 0;
void loop() // run over and over
{
if(i == 10)
i = 0;
mySerial.write(i);
Serial.print(mySerial.read());
i++;
delay(3000);
}
В последовательном мониторе я получаю странные значения для каскадного счетчика.
Ценности: -1 45 49 52 53 52 57 53 ...
Я думаю, что эти цифры не являются ascii-кодом для электронных чисел.
ПРАВКА 2
Теперь цикл работает благодаря приведенному ниже ответу. Теперь я заменил петлю обратной связи модулем FUM DCF-U. Код цикла изменился на следующий:
void loop() // run over and over
{
if(Serial.available())
Serial.println(Serial.read());
}
Проблема в том, что результат получается "000000000000000000000000000000000..." в быстром темпе, а не каждую секунду.
Модуль получает напряжение 3,3 В и подключается к тому же GND, что и MAX232.
Контактные соединения:
Arduino - MAX232
11 - 11
0 - 12
MAX232 - FUM DCF-U
14 - 3
13 - 4
Заранее спасибо
@Daan Mouha, 👍0
Обсуждение1 ответ
SoftwareSerial не может одновременно отправлять и получать одновременно, как это происходит при получении внутри ISR, и отключается при отправке. Таким образом, это никогда не будет работать должным образом.
Я предлагаю вам переключиться на HardwareSerial. Или, если вы хотите увидеть результаты, отправьте с помощью SoftwareSerial и получите с помощью HardwareSerial. Например:
#include <SoftwareSerial.h>
SoftwareSerial mySerial (10, 11); // RX, TX
void setup ()
{
Serial.begin (115200);
mySerial.begin (115200);
} // end of setup
unsigned long lastSend;
char c = ' ';
void loop ()
{
// время для очередной отправки теста?
if (millis () - lastSend >= 500)
{
mySerial.print (c++);
if (c > 'z')
{
c = ' ';
Serial.println ();
}
lastSend = millis ();
}
// проверка наличия ответа
if (Serial.available ())
Serial.print (char (Serial.read ()));
} // end of loop
Я протестировал это как простой обратный цикл, и он отлично работал. Подключите вывод 11 (Tx) к выводу 0 (Rx). Отсоедините провод от вывода 0 во время загрузки.
Мой цикл работает нормально, но теперь я добавил свой модуль атомных часов в FUM DCF-U и изменил код так, чтобы осталось только последнее предложение if. Это приводит только к " 0 " (без приведения символов) с высокой скоростью вместо некоторых данных каждую секунду. Почему это происходит?, @Daan Mouha
Возможно, исправьте свой вопрос и опубликуйте этот измененный код. Ни мои коллеги здесь, ни я не умеем отлаживать код, в котором "я кое-что изменил, но ..."., @Nick Gammon
Отредактировал вопрос., @Daan Mouha
Работает ли loop back без MAX232?, @Spehro Pefhany