Hallo,
ich bin auf ein Problem gestoßen. Googeln hat mein Problem leider nicht lösen können, daher bitte ich um fachkundige Hilfe.
Ich arbeite an einem kleinen Projekt mit dem neuen Arduino Nano IoT. Die Wahl fiel auf diesen, da er klein ist, einen SAMD21 Prozessor hat und WiFi on Board.
Nun konnte ich bereits einen Vorteil des SAMD21 nutzen, so dachte ich, und zwei Geräte gleichzeitig über Hardware Serial ansteuern.
Dazu nutze ich den SERCOM0 Port. Dieser funktioniert auch sehr gut.
Es sieht folgendermaßen aus:
Der Arduino bekommt seinen Strom 5V über USB (Ein USB Kabel an welchen nur der Strom angeschlossen ist!).
Der max3232 bekommt seinen ström über den 3.3V Ausgang des Arduino.
Arduino Nano IoT ->Max3232 ->2x periphere Geräte per RS232
Nebensächlich sind noch ein 74HC595 Shift register sowie ein i2c level converter für ein 16x2 LCD display angeschlossen.
Das Ansprechen des einen peripheren Geräts auf SERCOM0 über RS232 (an Meridian HD621) funktioniert dabei. Es ist per null modem Verkabelung angeschlossen.
Das Ansprechen des zweiten peripheren Geräts mit normalem Arduino Serial über RS232 (an Dolby CP650) funktioniert nicht. (kein null modem Anschluss)
Kann das daran liegen, dass ich das board per USB mit Strom versorge?
Zum Testen habe ich nun meinen eigentlichen Sketch umgeschrieben, um die RS232s zu testen. Also einfach beide RS232 direkt aneinander schließen. Da ja eines der RS232 über kreuz angeschlossen ist, dachte ich das sollte gehen.
der Output am Display ist jedoch nichts.... gar nichts...
Wo ist der Fehler?
//_____Librarys__________________________________________________________________________
#include <SPI.h>
#include <WiFiNINA.h>
#include <ArduinoOTA.h>
#include "arduino_secrets.h"
#include <Arduino.h>
#include "wiring_private.h"
#include <Wire.h>
#include <IRremote.h>
#include <LiquidCrystal_I2C.h> // LCD over I2C
Uart HD_621_Serial (&sercom0, 5, 6, SERCOM_RX_PAD_1, UART_TX_PAD_0);
const int RECV_PIN = 10; // IR Receiver Pin
//const int Interpin = 7; // Wake Up Interrupt_Pin
const int latchPin = 2; // Pin connected to latch pin (ST_CP) of 74HC595
const int clockPin = 3; // Pin connected to clock pin (SH_CP) of 74HC595
const int dataPin = 4; // Pin connected to Data in (DS) of 74HC595
//Vorsicht Pn 11 & 12 for I2C Crypto chip
//_______variables_____________________________________________________________________
char ssid[] = SECRET_SSID; // your network SSID (name)
char pass[] = SECRET_PASS; // your network password
int status = WL_IDLE_STATUS;
//Variablen_______________________________________________________________
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
//IRsend irsend; // Pin D9!!!! initialize TV && AppleTV IRremote
IRrecv irrecv(RECV_PIN); // setup IR_receiver
decode_results results;
WiFiClient client;
WiFiUDP udp;
//_________SETUP_____________________________________________________________________________
void setup() {
pinMode(latchPin, OUTPUT); // pinmodes for 74HC595
pinMode(dataPin, OUTPUT); //
pinMode(clockPin, OUTPUT); // pinmodes for 74HC595
pinPeripheral(5, PIO_SERCOM_ALT); //RX
pinPeripheral(6, PIO_SERCOM_ALT); //TX
irrecv.enableIRIn(); // initialisiert den Infrarotempfänger.
Serial.begin(9600); // initialize Serial_CP650
HD_621_Serial.begin(9600); // initialize Serial_HD621
lcd.init(); // initialize the lcd
lcd.backlight();
while (WiFi.status() != WL_CONNECTED) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Conecting to:"));
lcd.setCursor(0, 1);
lcd.print(F("WiFi"));
status = WiFi.begin(ssid, pass);
delay(500);
if (status == WL_CONNECTED) {
break;
}
delay(3000);
}
ArduinoOTA.begin(WiFi.localIP(), "Arduino", "password", InternalStorage);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ready");
}
//______Accessory_Serial_Connection________________________________________________________
void SERCOM0_Handler() { // Attach the interrupt handler to the SERCOM
HD_621_Serial.IrqHandler();
}
void loop() {
if (irrecv.decode(&results)) { //Wenn Daten empfangen wurden,
switch (results.value) {
case 0x5EA1B04F: //YamahaRC backw
HD_621_Serial.println(F("HD Serial"));
delay(100);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ok");
break;
case 0x5EA130CF: //YamahaRC Fwd
Serial.println(F("SerialSerial"));
delay(100);
break;
}
irrecv.resume();
}
HD_621_Serial.println(F("HD Serial"));
delay(1000);
if (Serial.available())
{
String st = Serial.readStringUntil('\r');
lcd.clear();
lcd.setCursor(0,0);
lcd.print(st);
}
if (HD_621_Serial.available())
{
String st = HD_621_Serial.readStringUntil('\r');
lcd.clear();
lcd.setCursor(0,1);
lcd.print(st);
}
if(WiFi.status() != WL_CONNECTED) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Conecting to:"));
lcd.setCursor(0, 1);
lcd.print(F("WiFi"));
status = WiFi.begin(ssid, pass);
delay(500);
delay(3000);
}
ArduinoOTA.poll();
}
Um das Ganze noch darzustellen:
Arduino Max 3232 DB9
Name Pin Numm | Name In Pinnum | Name Out Pinnum | Typ Pinnum
TxD->---(1)------------>T1 IN (11)-------->o-----T1 OUT (14)---------------> Male------(3)
RxD-<---(0)------------<R1 OUT (12)------o<-----R1 In (13)-----------------< Male-----(2)
TxD->---(6)------------>T2 In (10)-------->o------T2 OUT (7)----------------> Female----(2)
RxD-<---(5)------------<R2 Out (9)--------o<-----R2 In (8)-------------------< Female---(3)
GND auf Pin 5 jeweils