da das mit dem Display erst mal ne Weile dauern kann, wollte ich mit der Seriellen Kommunikation weiter machen und damit zum Test nur mal zwischen PC und IC.
Vorgehensweisen:
Folgenden Sketch mit ISP hochgeladen:
int inByte = 0;
int blink = 0;
int ledState = LOW;
long previousMillis = 0;
long interval = 50;
Hast Du dei Masse USB Converter - IC verbunden?
Versuch mal ob Du nicht TX-TX bzw RX-RX zusammenschalten mußt. Das weil die Senderichtung verschieden interpretiert werden kann.
Grüße Uwe
uwefed:
Hast Du dei Masse USB Converter - IC verbunden?
Ja, die Stromversorgung hab ich eh über den USB-Konverter, da dieser eine stabiliere Spannung liefert.
uwefed:
Versuch mal ob Du nicht TX-TX bzw RX-RX zusammenschalten mußt. Das weil die Senderichtung verschieden interpretiert werden kann.
Schon probiert, dann geht am USB-Konverter eine LED aus.
LG
Fipsi
Edit:
So, mein PC gerade abgestürzt, dachte mir, gut, spiel ich den Sketch einfach nochmal auf und siehe da: die LED am USB-Konverter blinkt im Takt der Datensendung, allerdings bekomm ich den Seriellen Monitor nicht auf, steht dauernt da, der Port wird bereits verwendet.
Davon abgesehen, dass sich der IDE öfter weigert den Seriellen Monitor zu öffnen, weil angeblich der Port besetzt ist, funktioniert jetzt alles.
LG
Fipsi
Edit:
Das einzige, was mich wundert, ist, dass ich dem Seriellen erst einen "schupser" geben muss. Heißt, erst, wenn ich was an den IC geschickt hab, macht er was.
Fipsi:
Das einzige, was mich wundert, ist, dass ich dem Seriellen erst einen "schupser" geben muss. Heißt, erst, wenn ich was an den IC geschickt hab, macht er was.
Der Sketch schickt erst dann Daten wenn er irgendwas auf der seriellen Schnittstelle bekommt und dann kontinuirlich bei jedem loop() Durchgang weil Du den seriellen Buffer nicht mittels serial.Read() leerst .
if (Serial.available() > 0)
{
Serial.print("Hallo ");
Dass er andauernd sendet, ist jetzt noch eher weniger das Problem.
Jetzt kommt mir aber die Frage:
Wenn er erst Daten schickt, nachdem er was bekommen hat, wie kann ich dann die Kommunikation zwischen zwei Boards herstellen?
Du hast wohl nur das Wort "available" falsch interpretiert. Es heisst nicht, dass die Gegenstelle bereit ist etwas zu empfangen, sodern dass sie was gesendet hat
Fipsi:
Jetzt kommt mir aber die Frage:
Wenn er erst Daten schickt, nachdem er was bekommen hat, wie kann ich dann die Kommunikation zwischen zwei Boards herstellen?
Hängt von deiner Kommunikation ab.
Oft ist es gut, wenn einer ein Master ( oder Client ) ist und der andere ein Slave ( oder Server ).
Der erste ist aktiv und der andere reagiert. Daten gehen in beide Richtungen.
Der Master/Client sendet und fragt, der dienende hört es und antwortet ( ggfls mit seinen Daten ).
Macht oft mehr Sinn, wenn mehr als 2 Teilnehmer da sind:
entweder 1 Master - viele Slaves,
oder viele Clients - 1 Server
Alternative:
Beide melden einfach, was sie zu sagen haben, und fertig. ( Was sollen sie anders machen ob es gehört wird oder nicht ?)
Ob die jeweilige Gegenstelle bereit ist, kriegst du übrigens nicht raus mit Rx/Tx/GND ( ausser du vertraust darauf, dass Rx = HIGH nur von einer aktiven Gegenstelle kommen kann)
Auch einfach:
Beide senden regelmässig Lebenszeichen.
er schickt deshalb erst dann, wenn er was bekommen hat, weil du ihm das so gesagt hast. mit
if (Serial.available() > 0)
wartet er, bis er was bekommt. dann mach ein Serial.read, um die daten zu lesen (und den puffer zu leeren).
wenn du kein if (Serial.available() > 0) reinschreibst, sonder gleich Serial println, schreibt er von beginn an.
Ahhhh, super, danke. Damit ist das Problem gelöst
michael_x:
Du hast wohl nur das Wort "available" falsch interpretiert. Es heisst nicht, dass die Gegenstelle bereit ist etwas zu empfangen, sodern dass sie was gesendet hat
Ja. Ich dachte, das available bedeutet, ob überhaupt eine Verbindung hergestellt werden konnte.
michael_x:
Fipsi:
Jetzt kommt mir aber die Frage:
Wenn er erst Daten schickt, nachdem er was bekommen hat, wie kann ich dann die Kommunikation zwischen zwei Boards herstellen?
Hängt von deiner Kommunikation ab.
Oft ist es gut, wenn einer ein Master ( oder Client ) ist und der andere ein Slave ( oder Server ).
Der erste ist aktiv und der andere reagiert. Daten gehen in beide Richtungen.
Der Master/Client sendet und fragt, der dienende hört es und antwortet ( ggfls mit seinen Daten ).
Macht oft mehr Sinn, wenn mehr als 2 Teilnehmer da sind:
entweder 1 Master - viele Slaves,
oder viele Clients - 1 Server
Alternative:
Beide melden einfach, was sie zu sagen haben, und fertig. ( Was sollen sie anders machen ob es gehört wird oder nicht ?)
Ob die jeweilige Gegenstelle bereit ist, kriegst du übrigens nicht raus mit Rx/Tx/GND ( ausser du vertraust darauf, dass Rx = HIGH nur von einer aktiven Gegenstelle kommen kann)
Auch einfach:
Beide senden regelmässig Lebenszeichen.
Ich hab einen Master und viele Slaves. Die Kommunikation selbst läuft dann nicht über die RX/TX selber, sondern über MAX 487-IC's.
Ich hab einen Master und viele Slaves. Die Kommunikation selbst läuft dann nicht über die RX/TX selber, sondern über MAX 487-IC's.
Na dann ist ja alles klar Das geht eh nur halbduplex: Der Master sendet was und evtl. antwortet danach der adressierte Slave.
Ein Slave hat die wichtige Aufgabe, nichts zu sagen, wenn er nicht gefragt wurde.
Und was hast du jetzt mit dem PC - IC Test vorgehabt ?
Ist der PC ein Slave oder der Master ?
An Pin 8 befindet sich ein Taster.
Das seltsame an der ganzen Sache ist jetzt, auch wenn ich den taster nicht mehr drücke, bekomm ich etwa 2 bis 3 Sekunden noch Serial-nachrichten an den PC geschickt.
Und um den ganzen jetzt noch was aufzusetzen:
Wenn ich den Taster NUR am IC anstecke - also nicht an der Spannungsquelle, selbst dann werden Daten geschickt.
Die serielle Übertragung dauert bei 9600 Baud ca. 1 ms pro Zeichen! Das heißt die Übertragung dauert viel länger als der Durchlauf von loop(). Du schreibst da schon wieder Zeug in den Sendepuffer obwohl die erste Nachricht noch gar nicht übertragen wurde.
Setze mal die Baudrate auf das Maximum. Und selbst dann ist das noch relativ langsam im Vergleich zur Prozessor-Geschwindigkeit.
if ((digitalRead(8) == HIGH) && (digitalRead(8) != LOW))
{
delay(200);
if (digitalRead(8) == HIGH)
{
Serial.print("Taste gedrückt!");
delay(500);
}
}
Aber das einzige, was sich dann am verhalten ändert, ist, dass die nicht mehr so schnell gesendet werden (was am delay(500) liegen sollte).
Die anderen Probleme sind noch vorhanden.
Fipsi:
So, das Problem ist doch noch nicht ganz erledigt.
...
An Pin 8 befindet sich ein Taster.
Das seltsame an der ganzen Sache ist jetzt, auch wenn ich den taster nicht mehr drücke, bekomm ich etwa 2 bis 3 Sekunden noch Serial-nachrichten an den PC geschickt.
Und um den ganzen jetzt noch was aufzusetzen:
Wenn ich den Taster NUR am IC anstecke - also nicht an der Spannungsquelle, selbst dann werden Daten geschickt.
Was läuft denn da schief?
Du hat keinen Pullup oder Pulldown Widerstand an den Eingang gehängt und auch den internen Pullup Widerstand nicht aktiviert.
Der eingang fängt Stöhrungen ein die er als gedrückten Taster interpretiert.
Grüße Uwe