Verständnisproblem der Seriellen Schnittstelle Micro/Uno

HI Leute,

Ich habe folgendes Problem, am Uno habe ich eine Teststellung aufgebaut in der ein Tastendruck zum einschalten einer LED führt und Daten Serielle an den PC sendet.
Am PC läuft ein VB.Net Programm der die Serielle Schnittstelle öffnet, die Daten empfängt und diese verarbeitet .
Das Programm arbeitet mit dem Eventhandler, dass wenn Daten kommen er diese verarbeitet, dass klappt mit dem Uno wunderbar.
Nun habe ich zwecks der Baugröße die Schaltung auf einer Lochrasterplatte mit dem Micro aufgebaut.
Das Sketch funktioniert genau gleich also es passiert das was passieren soll ich seh auch die Daten Übertragung im Seriellen Monitor somit kann ich einen Fehler im Sketch eigentlich ausschließen. Aber auf der VB.NET Seite kommt nichts an. Der Verbindungsaufbau aber wiederum klappt.
Nun ist der Aufbau der Seriellen Verbindung ja unterschiedlich bei Uno und Micro und mir stellt sich die Frage warum es nicht klappt bzw. kann oder muss ich den Modus verändern den der Micro in seiner Kommunikation verwendet?
Mir ist klar das am Uno die Kommunikation ein eigener Chip erledigt und im Micro das virtuelle passier nur müsste doch eigentlich das selbe Ergebnis erzeugen oder?

Fragst Du mit VB.NET die richtige serielle Schnittstelle ab? Jeder Arduino (auch innerhalb des gleichen Modells) hat eine eigene USB-Seriennummer und wird als andere COM Schnittstelle eingebunden. Grüße Uwe

Ja natürlich sonst würde mir VB ja eine Fehlermeldung zurückgeben das es keine Verbindung gibt.
Außer der micro erzeugt mehr als eine

Ich lese auch von MEGA und UNO Daten über COM-Port in ein eigenes VB-Prog ein - funktioniert bei beiden fehlerlos und gleichzeitig, da beide verschiedene COM-Ports belegen. Hat der Micro dieselben Hardwareeigenschaften (die Serielle betreffend) wie der UNO oder MEGA ? Sonst mal niedrigere Baudraten ausprobieren....und ist der COM-Port des MICRO auch unter Windows mit denselben Parametern gesetzt ?

Also ich hab noch mal alles gecheckt und da sehe ich kein Problem. Mit dem Uno klappts mit dem Micro nicht :S Vielleicht kannst du mir ein Template für die Communication mit VB.Net geben?

Etwas das mir gerade aufgefallen ist, wenn er mit VB.Net verbunden ist sendet er nicht (das TX lämpchen blinkt nicht) im Seriellen Monitor schon. Wartet der Micro vielleicht auf ein Handshake Signal ?

Ich mache das wie Du über einen EventHandler. Port definieren, öffnen und fertig ist die Laube ;-) - aber das geht ja auch bei Dir.

Nehme an, dass der MICRO alle Treiber installiert hat (falls nötig) und auch in der Systemsteuerung erscheint.

Dass die TX-LED nicht werkelt macht mir aber Bedenken - da scheint was Grundsätzliches nicht korrekt zu sein. Denn ob angeschlossen oder nicht, wenn der MICRO was sendet funzelt auch die LED,

Vielleicht kannst mal Sketch posten ?

Wegen Handshake: kann nur in Deinen Einstellungen gesetzt sein.

Das ist mir klar mit der LED und wie gesagt im Seriellen Monitor klappts und dann funzelts auch :slight_smile: Beim Uno funzelts im Monitor und im VB beim Micro nur im Seriellen.

int x = 0;
int ledstate = 0;
int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;
int led5 = 9;
int led6 = 8;

int sw1 = 7;
int sw2 = 6;
int sw3 = 5;
int sw4 = 4;
int sw5 = 3;
int sw6 = 2;

long debounce = 0;
long lastDebounceTime = 0;
long debounceDelay = 100;

void setup() {
// put your setup code here, to run once:

Serial.begin(9600);
pinMode(sw1,INPUT);
pinMode(sw2,INPUT);
pinMode(sw3,INPUT);
pinMode(sw4,INPUT);
pinMode(sw5,INPUT);
pinMode(sw6,INPUT);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);

digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);

}

void loop() {
// put your main code here, to run repeatedly:

if(digitalRead(sw1) == 1){
x = 1;
}
else if(digitalRead(sw2) == 1){
x = 2;
}
else if(digitalRead(sw3) == 1){
x = 3;
}
else if(digitalRead(sw4) == 1){
x = 4;
}
else if(digitalRead(sw5) == 1){
x = 5;
}
else if(digitalRead(sw6) == 1){
x = 6;
}
else {
x = 0;
}

debounce = (millis() - lastDebounceTime);

if (x != 0 && debounce > debounceDelay){
Serial.print(“Buzzer”);
Serial.println(x);
lastDebounceTime = millis();
}

if (x == 1 || ledstate == 1) {
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
ledstate = 1;
}
if (x == 2 || ledstate == 2) {
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
ledstate = 2;
}
if (x == 3 || ledstate == 3) {
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
ledstate = 3;
}
if (x == 4|| ledstate == 4) {
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,HIGH);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
ledstate = 4;
}
if (x == 5 || ledstate == 5) {
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,HIGH);
digitalWrite(led6,LOW);
ledstate = 5;
}
if (x == 6 || ledstate == 6) {
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,HIGH);
ledstate = 6;
}
if (ledstate > 6 || ledstate < 1 || debounce > 30000) {

digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
ledstate = 0;
}

}

Das Sketch ist völlig unspektakulär

Im Moment denke ich erwartet der Micro ein Handshake Signal damit er mit der Übertragung beginnen kann was der Monitor im Sendet mein VB aber nicht

Joa, der macht keine Probleme...kann also nur Hardware sein (u.a. Protokoll -> Handshake)

Nochmal alles kontrollieren ? :roll_eyes: Vor allem die Hardwareparameter in der Systemsteuerung für diesen Port...

Seltsam nur, dass es beim UNO klappt.

Also nochmal Spezifikationen des MICRO checken ? Sind da die Ports evtl. anderes belegt so dass sich Funktionen gegenseitig hindern ?

Ich seh keinen Problem in der Hardware, auch die Pin belegung ist kein Problem. Ich stell mir vor, das sich das Problem durch den HID Treiber des Micros ergeben könnte

Der Arduino Micro ist ja auch nur ein geschrumpfter Leonardo, hast du es mal mit dem Leonardo-typischen Code für die serielle Schnittstelle probiert?

http://arduino.cc/en/Serial/IfSerial

void setup() {
 //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
}

void loop() {
 //proceed normally
}

hatte ich nicht jetzt schon und leider der selbe effekt :(

wäre es möglich das es an den Treibern des Micro liegt?

KÖNNTE sein, aber dann wäre das Problem doch schon mal aufgetaucht ? :roll_eyes: Hat Tante Google nichts hergegeben ?

Und (nochmal explizit nach gefragt) die Treibereinstellungen unter Windows passen ? 9600,8,KEINE,1,KEINE

Was steht denn (ebenfalls Gerätemanager -> Eigenschaften des COM-Ports) in der Registerkarte DETAILS unter der Eigenschaft HERSTELLER ?

Das habe ich schon 4 mal geprüft sowohl im Gerätemanager als auch im VB. Unter Hersteller steht Arduino LLC (www.arduino.cc) nur wozu ?

Das kann doch nicht sein das es noch nie jemand versuch hat und nicht auf ein Problem gestossen ist :)

Aber etwas das mir ein Rätsel ist, warum stoppt er die TX (die LED blinkt nicht mehr ) sobald ich über VB Connecte Ich denke hier liegt der Hund, kann es sein, das etwas beim Öffnen der Seriellen nicht richtig abläuft und somit er gar nichts senden kann? Wenn ja was könnte das denn sein?

Wenn VB bei dem einen funktioniert muss es dass auch bei dem Anderen tun - es sei denn, DESSEN Hardware ist "irgendwie anderes" :fearful:

Naja der Uno ist was die SChnittstelle angeht schon anders als der Micro (nur virtuelle kein extra Chip) und vorallem hat der Micro die HID interfaces

vorallem hat der Micro die HID interfaces

Dies scheint auf den ersten Blick dann wohl der Übeltäter zu sein - wundere mich aber immer noch dass bisher so ein Problem nicht aufgetreten ist ?