Arduino Hängt sich auf beim Berühren von TX und RX

Guten Abend,

ich bin seit gestern Mittag am verzweifeln, in meinem Sketch verwende ich die UART doch immer wenn ich die Pins RX und TX mit dem Finger einem Bauteil oder irgendeine pseudo Verbindung dazwischen herstelle hängt sich mein Arduino auf und macht nichts mehr bis er resettet wird oder die Spannung weggenommen und wieder angesteckt wird.

Es handelt sich um ein steckbrett aufbau mit Atmega328 mit UNO Bootloader.
Auf meinem Steckbrett ist folgender Aufbau: Siehe Anhang.

Dieser Sketch läuft auf dem Arduino:

void setup() {
 Serial.begin(9600);

}

void loop(){
 Serial.write(10);
}

Er sendet auch ordentlich, solange bis ich z.B. TX und RX berühre oder eine Störung auftritt.

Im Anhang nicht ersichtlich, Abblockkondensatoren von 100nF sind vorhanden.

Hi, ich würde alle VCC und GND verbinden. Und am Reset gehört noch ein 10k Widerstand.

http://www.arduino-tutorial.de/2010/06/barebones-arduino/

MfG Marco

Es ist eine Extrem abgespeckte Schaltung um sögliche Fehlerquellen auszuschließen ich habe das Orginal im Anhang.

Im Anhang die Orginal Schaltung, die ich aufgebaut habe, doch was ich versuchte es funktionierte nicht.

Der Reset ist dauer HIGH weil der Controller extern programmiert wird und dann auf den Sockel gesteckt.
Es besteht also kein Bedarf diesen zu resetten.

Hallo,

was wird als Stromversorgung verwendet? So ein kleines Schatnetzteil mit Eurostecker (ohne "Erde")? Dann würde ich mal genau dort ansetzen. Vor allem diese kleinen Dinger in der Klasse der Handyladegerte sind für solche Probleme bekannt, auch Laptopnetzteile ohne Schukostecker.

Hintergrund: Die Funkentstörkondensatoren sorgen für relativ hohe Netzspannungsreste auf der Ausgangsseite. Hochohnige Eingänge sind dann schnell "beleidigt". Eventuel hilft es wenn man die betroffenen Pins mit einem Widerstand in der 10k Gegend mit Masse verbindet.

Christian

Als Versorgungsspannung kommt der USB Port.
Die Spannung wird geglättet von einem USB zu TTL Wandler(Dessen Sendepins nicht angeschlossen nur + und -)
Doch auch aus dem Laptop oder USB Port direkt kann ich die Spannung nehmen.
Abgesehen von der Spannungsquelle, den Pin mit einem Pulldown versehen habe ich schon versucht ohne Erfolg, er ist trotzdem beleidigt.
Mit dem Software Serial funktioniert das Senden und empfangen doch mit Software Serial schiebe ich nur das Problem zur Seite.

Zum messen habe ich ein Oszi, die Spannung ist ziemlich stabil und erstrecht mit den 100nF

Wie soll das funktionieren wenn du einen TTL zu RS485 Wandler nimmst den DE bzw!RE Eingang aber nicht ansteuerst?

Grüße Uwe

Er wird angesteuert von einem Digital Pin des Arduinos da er Senden als auch Empfangen soll.

Aber es geht garnicht um den Wandler sondern, dass der Arduino als einfachste Schaltung ( die aller erste) Störungen am TX Pin aufweist. Der 2. Schaltplan ist die ursprüngliche Schaltung welche fehlerhaft ist und um den Fehler einzugrenzen habe ich sie stück für stück auseinander genommen bis nur noch der Controller da war.

Was hast Du an TX bzw RX angeschlossen?

Wie auf den Schaltbildern zu sehen.
im 2. Bild den Sn75176 und im oberen, nichts.
Beide haben den Fehler

Wie kannst Du sagen, daß er sich aufhängt wenn nichts dranhängt?

Grüße Uwe

Hey,

ich habe gerade ein ähnliches Problem (oder vielleicht auch das selbe?) -> s. im anderen Forum [1]

Bei mir tritt der Fehler immer dann auf, wenn ich den Arduino über eine Stromversorgung betreibe, die nicht galvanisch von der Netzspannung getrennt ist.

D.h. bei einem einfachen Schaltnetzteil mit Spartrafo oder über einen Laptop dessen Netzteil auch nicht sauber trennt funktioniert das Ganze nicht und bei mir stürzt der Arduino ab, selbst dann, wenn ich den GND mit einer nicht angeschlossenen Oszi-Messspitze (oder mit einem anderen GND) berühre! Er stürzt dabei nicht immer beim ersten Mal ab, sondern ich muss meistens mehrmals den GND berühren.

Das nächste Problem das dadurch auftritt habe ich bei meiner Lichtschranke bemerkt: Hier habe ich auf Empfängerseite eine IR-Photodiode mit Transistorverstärkung die bei Sichtkontakt zwischen 0V und 1.5V ausgibt (je nachdem, wie gut die IR-LED ausgerichtet ist) ausgibt, bei Unterbrechung des Lichtweges 2.7V.
Messe ich das Signal allerdings bei Betrieb mit nicht galvanisch getrennter Spannungsquelle, so sind die 2.7V nicht "sauber", sondern man erkennt mit einem Oszi ein leichtes ~50Hz-"Flimmern".

Benutze ich ein galvanisch getrenntes Netzteil (Schaltnetzteil oder Linear-Trafo-Netzteil spielt keine Rolle?) oder einen Laptop mit "gutem Netzteil" (ich benutze ein MacBook Pro) oder betreibe den Arduino in Akkubetrieb, dann funktioniert alles ohne Probleme! Ebenfalls funktioniert es, wenn ich ein nicht-galvanisch getrenntes Netzteil nutze und dieses an einem 230V-Trenntrafo betreibe...

Warum das so ist, konnte auch im anderen Forum bisher niemand sagen. Auf jeden Fall kommt irgendwie über die Netzspannung ein Störsignal ins System welches den Arduino durcheinander bringt...

Grüße
dsjiern

[1] Absturz/Interrupts bei externer Erdung/GND

Ich nehme das Problem hin und arbeite mit Software Serial welches funktioniert. Die Problemlösung kostet im Augenblick zu viel Zeit und Zeit ist Geld. Damit verwerfe ich die Fehler suche und nutze den Software Bus welcher glücklicherweise funktioniert.

Weitere Lösungsansätze sind natürlich nicht verboten.

Beste Grüße

uwefed:
Wie kannst Du sagen, daß er sich aufhängt wenn nichts dranhängt?

Grüße Uwe

Könntest ja mal auf das antworten.
Grüße

Entschuldigung.

Ich weiß es, da ich eine LED 1sek blinken lasse.
Die LED ist verbunden mit Pin 8 und GND. Es ist eine LED vom R mit einem eingebauten Vorwiderstand für 5V.

Ich wollte wissen, ob er sich aufhängt oder ob er einfach keine Lust hat zu senden.
Selbes Ergebnis bekomme ich natürlich auch ohne LED.
Folgender Sketch zeigt mir das:

int milliss = 0;//Zeitmerker
int led;//Ein Bool für den led status

void setup() {
Serial.begin(9600);
pinMode(8, OUTPUT);//Da hängt die LED

}

void loop() {
Serial.write(10);//Sende ein Bitmuster

//LED Blinken ohne Delay
if (millis() - milliss > 1000)
{
if (led)
{
digitalWrite(8, HIGH);
led = 0;
}
else
{
digitalWrite(8,LOW);
led = 1;
}
milliss = millis();
}
}

Und diese LED Blinkt solange der Arduino sendet. Sobald der Fehler auftritt behält die LED ihren Status High oder Low und TX geht High

int milliss = 0;//Zeitmerker

Geht ca. 30 sekunden lang gut ... :frowning:

Danke Daß Du geantwortet hast.

Ja

michael_x:
Geht ca. 30 sekunden lang gut ... :frowning:

int milliss = 0;//Zeitmerker
...
if (millis() - milliss > 1000)
...
milliss = millis();

Ja, da hängt sich nicht der Arduino auf sondern Du hast einen Overflow der vorzeichenbehafteten 2-Byte Variable und somit wird die IF-Bedingung nicht mehr wahr.

nimm eine unsigned long Variable

https://www.arduino.cc/en/Reference/UnsignedLong

grüße Uwe

Diesen Overflow habe ich aber minimal erst nach 65sek... 2byte sind ca 65k

Warum ist es denn rein zufällig und genau immer dann, wenn ich tx mit dem Finger oder etwas anderem berühre

int ist vorzeichenbehaftet. Deshalb die Hälfte

Das ist richtig aber irrelevant für das Problem. Mein Testzyklus bricht immer dann ab wenn TX und RX berührt wird oder in einem Controller zusammen arbeiten. Ich sage ab nun dazu, gestört... ihr habt bestimmt recht, dass es nach 32 sek sowieso aus ist mit dem LED Blinken doch ich kam noch nicht dazu solange zu testen da wie gesagt das Blinken schon vorher aufhört wenn ich TX störe es ist ja nur ein Test der mir zeigt, die Loop funktion hängt sich auf und Serial.write wird nicht mehr ausgeführt. TX geht auf HIGH vielleicht weil das Idle ist. Frage ist ja aber warum hängt der controller.

Vieleicht solltest Du einige Fotos vom Aufbau zeigen.
Grüße Uwe