Forum: Mikrocontroller und Digitale Elektronik MAX232+Arduino+HyperTermina HILFEEE


von Simon (Gast)


Lesenswert?

Guten Abend,
Ich habe ein MAX232 Shield und wollte mit einem Arduino Mega über dieses 
mit HyperTerminal kommunizieren. Ich kann Text an das HyperTerminal 
senden aber nichts empfangen :/
Hier mein Code:
1
void setup()  
2
{
3
  Serial.begin(9600);
4
  Serial1.begin(9600);
5
6
  Serial.println("Goodnight moon!");
7
  delay(500);
8
  
9
  Serial1.println("Hallo Terminal!");
10
  delay(200);
11
}
12
13
void loop() // run over and over
14
{
15
  if (Serial1.available())
16
    Serial.write(Serial1.read());
17
}
Ich habe den RX-Pin vom MAX mit Pin 18 vom Arduino verbunden und den TX 
mit Pin 19 auf dem Arduino (habs aber auch schon anders herum 
versucht)...
Was mache ich falsch??

Vielen Dank,
Simon

von Kasperl (Gast)


Lesenswert?

Geht denn ein Echo auf beiden Schnittstellen?
Also sowas wie:
1
 if (Serial.available())
2
     Serial.write(Serial.read());
oder
1
 if (Serial1.available())
2
     Serial1.write(Serial1.read());

von Simon (Gast)


Lesenswert?

Hi,
Ja das erste geht und das zweite nicht.
1
Serial1.available()
ist immer 0...
Gruß, Simon

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Simon schrieb:
> Serial1.available()ist immer 0...

 Und wie soll da etwas reinkommen ?

von Simon (Gast)


Lesenswert?

Marc Vesely schrieb:
> Und wie soll da etwas reinkommen ?

Das ist ja gerade das Problem... Egal was ich vom HyperTerminal sende, 
es kommt beim Arduino nichts an.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Simon schrieb:
> Das ist ja gerade das Problem... Egal was ich vom HyperTerminal sende,
> es kommt beim Arduino nichts an.
1
void loop() // run over and over
2
{
3
  if (Serial.available())
4
    Serial.write(Serial.read());
5
}

von Simon (Gast)


Lesenswert?

Könnte es theoretisch sein, dass das MAX-Shield einen Defekt hat und nur 
senden kann?

@Marc Vesely: Ja, was heißt das?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Simon schrieb:
> Könnte es theoretisch sein, dass das MAX-Shield einen Defekt hat und nur
> senden kann?
>
> @Marc Vesely: Ja, was heißt das?

 Kasperl war schneller, aber hier:
 Entweder arbeitest du mit Serial oder Serial1.
 Beide gleichzeitig wird wohl nicht gehen.
 Also, da wo du sendest, da empfängst du auch...

von Simon (Gast)


Lesenswert?

Marc Vesely schrieb:
> Entweder arbeitest du mit Serial oder Serial1.
>  Beide gleichzeitig wird wohl nicht gehen.

Ich kann mit einem Arduino Mega nicht Serial zur Kommunikation über USB 
und Serial1 für das HyperTerminal verwenden?

von Bernhard F. (bernhard_fr)


Lesenswert?

Mal kurz ein paar Fragen zur Verkabelung:

Serial0 bzw. einfach nur "Serial" ist die USB Verbindung zum Rechner wie 
üblich virtueller Com-Port und da hängt dein Terminal dran?

Serial1 ist am Shield.
Dumme Frage: werden Shields nicht einfach nur aufgesteckt? Wie kannst du 
dann die Pins selber wählen?

Übrigens:
Pin 18 ist der TXD1-Pin
Pin 19 ist der RXD1-Pin

Ich vermute, dass die Pins vom Shield entsprechend verbunden werden 
müssten...

Von dem Shield gehen die Kabel dann wie an den PC? Per Adapter auf die 
"Serielle Schnittstelle" sprich eine 9 polige RS-232?
TX an Pin3
RX an PIN2
GND an Pin5
oder wie?

Und das 2. Terminal ist dann wieder auf den "echten" Com-Port 
konfiguriert?


Wenn ich falsch liege, hast du dann mal einen Schaltplan?
Oder einen Link zu dem Shield? Dann kann ich mir das selber 
zusammenkratzen...

von Simon (Gast)


Lesenswert?

Serial0 geht zur Arduino IDE und Serial1 zum "Shield" (war vlt. nicht 
ganz die richtige Bezeichnung: 
http://emartee.com/Images/websites/emartee.com/MAX232_1(1).jpg)

Die Sache mit den vertauschten Pins hab ich irgendwo gelesen, ich habs 
aber auch anders herum versucht und es geht trotzdem nicht...

Zwischen dem "Shield" und dem PC ist ein normales 9poliges Kabel.

Das HyperTerminal ist mit dem echten COM-Port von meinem alten PC 
konfiguriert ;)

Vielen Dank!

von Bernhard F. (bernhard_fr)


Lesenswert?

GND und VCC wirst du dann ja wohl wahrscheinlich auch richtig mit dem 
Arduino verbunden haben. Dann klingt das alles soweit O.K.

Aber um dann alle Fehler bei der Verkabelung auszuschließen:

Ist das 9 polige Kabel ein "Nullmodemkabel" also gekreuzt oder ist es 
ein ungekreuztes?

Weißt du das bzw. kannst du das mal fix durchklingeln?


PS: Hast du auf dem Terminal deines alten Rechners schonmal das "Hallo 
Terminal" der Initialisierung gelesen?

: Bearbeitet durch User
von Simon (Gast)


Lesenswert?

Ja, GND und VCC passt ;)
Es handelt sich leider nicht um ein Nullmodemkabel :/
Ist es möglich dass der MAX232 defekt ist oder geht dann senden auch 
nicht mehr?

von Simon (Gast)


Lesenswert?

Ja, Hallo Terminal kommt immer an...

von Bernhard F. (bernhard_fr)


Lesenswert?

Simon schrieb:
> Es handelt sich leider nicht um ein Nullmodemkabel :/
Und das ist gut so.

> Ist es möglich dass der MAX232 defekt ist oder geht dann senden auch
> nicht mehr?

Klar ist es möglich, aber davon würde ich jetzt noch nicht ausgehen.

Erstmal zurück zur Software...

1) funktioniert das senden per Hyper Terminal über die USB-Verbindung?
also:
1
void loop() // run over and over
2
{
3
  if (Serial.available())
4
    Serial.println("USB empfangen");
5
  delay(1000); 
6
}

Das sollte nachdem du was gesendet hast anfangen dein Terminal zu 
fluten...
Wenn das klappt dann weiter mit :
1
void loop() // run over and over
2
{
3
  if (Serial.available())
4
    Serial.write(Serial.read());
5
}

Wie Marc Vesley vor meinem Verdrahtungs-Exkurs bereits vorgeschlagen 
hat.

Und wenn das mit der USB-Verbindung auch noch funktioniert dann weiter 
mit:
1
void loop() // run over and over
2
{
3
  if (Serial1.available())
4
    Serial.println("232 empfangen");
5
  delay(1000); 
6
}

Und einen hab ich noch: Wie ist dein Terminal eingestellt?
Per Default ist die Schnittstelle auf 8 Datenbits Parity None und ein 
Stopbit. Sendet der PC auch so?

: Bearbeitet durch User
von Jürgen S. (jurs)


Lesenswert?

Simon schrieb:
> Ich habe ein MAX232 Shield und wollte mit einem Arduino Mega über dieses
> mit HyperTerminal kommunizieren.

Falls Du unter "kommunizieren" verstehst, dass Du in beide Richtungen 
senden und empfangen können möchtest, müßtest Du natürlich in der 
loop-Funktion auch beide Richtungen programmieren.
1
void setup()  
2
{
3
  Serial.begin(9600);
4
  Serial1.begin(9600);
5
6
  Serial.println("Goodnight moon!");
7
  delay(500);
8
  
9
  Serial1.println("Hallo Terminal!");
10
  delay(200);
11
}
12
13
void loop() // run over and over
14
{
15
  if (Serial1.available())
16
    Serial.write(Serial1.read());
17
  if (Serial.available())
18
    Serial1.write(Serial.read());
19
}

von Kasperl (Gast)


Lesenswert?

Mal am 'Shield' RX und TX verbinden und am Terminal schauen ob was 
ankommt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.