ich versuche seriell Daten über den "hauseigenen" USB-Port (UART) am MEGA zu empfangen. Ein angeschlossener 74HC595 wandelt dann die empfangenen Byte's um in eine parallele Ausgabe.
Der Programmcode:
Code: Alles auswählen
int shiftPin = 5; // Pin SCK an 74HC595
int storePin = 6; // PIN RCK an 74HC595
int dataPin = 7; // Pin SER an 74HC595
int incomingByte; // for incoming serial data
void setup() {
pinMode(storePin, OUTPUT);
pinMode(shiftPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(13, OUTPUT); //Ausgang boardeigene LED
digitalWrite(13, LOW); // eigene LED aus
//HC595 Test
write_595(255); // HC595 alle EIN
delay(200);
write_595(0); // HC595 alle AUS
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0)
{
incomingByte = Serial.read();
//delay(100);
write_595(incomingByte);
Serial.print (char(incomingByte));
}
}
// =======================================================================
// Funktion: Wert seriell an HC595 senden
void write_595(int Wert)
{
digitalWrite(storePin, LOW); // ClockPin auf Low
shiftOut(dataPin, shiftPin, MSBFIRST, Wert); // Wert übertragen
digitalWrite(storePin, HIGH); // ClockPin auf High
}
Sende ich die Daten mit einem anderen seriellen Monitor über COM2, in meinem Fall benutze ich den 'Terminal.exe', funktioniert das hervorragend. Also scheint das Programm auf dem MEGA-Board korrekt zu sein.
Hardwaremässig müsste dann auch alles richtig sein sein.
Ich möchte nun nicht die Byte's über 'Terminal.exe' per Hand senden, sondern aus einem anderen, von mir erstellten Programm.
Wieder über COM2 und den "hauseigenen" USB-Port (UART) am MEGA. Das klappte leider auch nicht.
Die Vermutung lag nahe , das läge vielleicht an meinem eigenen Programm, das die Daten sendet.
Daher habe ich einen seperaten USB zu seriell Wandler (USB to UART Bridge) am MEGA-Board am Pin RX2 (Pin 17) und GND angeschlossen (über COM4). Das MEGA-Programm vorher so umgeändert:
Code: Alles auswählen
// Eingang seriell ist RX2 Pin 17
int shiftPin = 5; // Pin SCK an 74HC595
int storePin = 6; // PIN RCK an 74HC595
int dataPin = 7; // Pin SER an 74HC595
int incomingByte; // for incoming serial data
void setup() {
pinMode(storePin, OUTPUT);
pinMode(shiftPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(13, OUTPUT); //Ausgang boardeigene LED
digitalWrite(13, LOW); // eigene LED aus
//HC595 Test
write_595(255); // HC595 alle Ausgänge EIN
delay(200);
write_595(0); // HC595 alle Ausgänge AUS
Serial2.begin(9600);
}
void loop() {
if (Serial2.available() > 0)
{
incomingByte = Serial2.read();
//delay(100);
write_595(incomingByte);
Serial2.print (char(incomingByte));
}
}
// =======================================================================
// Funktion: Wert seriell an HC595 senden
void write_595(int Wert)
{
digitalWrite(storePin, LOW); // ClockPin auf Low
shiftOut(dataPin, shiftPin, MSBFIRST, Wert); // Wert übertragen und StorePin auf High
digitalWrite(storePin, HIGH); // ClockPin auf High
}
Wie schon gesagt, mein Programm , dass die Daten sendet, funktioniert mit dem seperaten USB zu seriell Wandler, aber nicht
mit dem verhandenen USB-Port (UART) am MEGA. Ich kann mir das nicht erklären.
Vielleicht hat da jemand einen Rat.
Gruss
Ludwig