... du wirst es geprüft haben ... dass der neue 328 ... eventuell mit einer anderen Baud-Rate betrieben wurde ...
Hallo Sternthaler, tut mir leid, dass ich die lange Beschreibung nicht noch länger gemacht habe. Ergänzung also: PingPong328 ALLEINE im laufbereiten Archie eingebaut und am Rx des Masters, mega1284/20MHz, angeschlossen funzt wie erwartet. Nachdem eine weitere PingPong, mega8- oder mega168-getrieben, an derselben Rx-Leitung angeschlossen wird, fängt die PingPong328 an zu spinnen; die mega8/-168 läuft korrekt. Eine PingPong8 und eine PingPong168 zusammen (PP328 im Körbchen) an derselben Rx-Leitung desselben (des vorigen) Masters angeschlossen laufen korrekt. Lief seit Monaten so - auch mit PP8/PP8.
Die Widerstände ... nur eine LED pro Zeile gleichzeitig Leuchten sollte. Das passt auch zum langsamen Schieden des Schieberegisters ...
Danke Besserwessi - Du siehst eben in Tiefen, die MIR garnicht klar sind. Ich vermute, dass Deine Darstellung beschreibt, wie das Problem bei den zwei Schieberegistern der PingPong liegen könnte - die den UART-Befehl ausbremsen. Nu ist es so, dass ein String von drei Bytes - plus Stringabschluss-Null - gesendet wird. Sendung und Empfang gehen hardwaremässig über jeweils einen Ringpuffer, der Puffer hat jeweils 128 Bytes (ist halt ne Art Standard bei mir). Im Empfangsteil wird so lange gewartet, bis der String komplett gesendet wurde - danach wird erst reagiert. Daher bin ich nicht sicher, ob ich hier wirklich weiter prüfen sollte. Zusätzlich noch die Erscheinung, dass ich in einer suspekten Konfiguration garnix senden muss - nach dem Start-Intro fällt die PingPong328 ohne jedes weitere Zutun innerhalb von ein, zwei Sekunden ins Koma . . .
Codeausschnitt:
Code:
if (zeiger == 0)
{ //
if (zeichen_aus_fifo == KOMMANDO_KPLUS) // Fahre Anwendungsprogramme
telegrammlaenge = KOMMANDO_KPLUS_LEN; // mit und ohne Parameter
// if (zeichen_aus_fifo == KOMMANDO_DATS) // Daten
// telegrammlaenge = KOMMANDO_DATS_LEN; // anzeigen
} // Ende if (zeiger == 0)
// ==================================================
/* Wenn keine Telegrammlaenge bekannt ist, dann ist auch kein Kommando
bekannt, dann muss auch nichts weiter gemacht werden, als auf das
naechste Zeichen zu warten bzw. es abzuholen und dann wieder auf
einen Kommando-Buchstaben zu testen */
if (telegrammlaenge == 0)
continue;
// ==================================================
/* Wenn ein erkanntes Kommando seine Telegrammlaenge angegeben hat, dann
muessen wir nun die EINZELN aus dem FIFO abgeholten Zeichen in den BUFFER
schreiben. Da ja schon der erkannte Kommando-Buchstabe in der Variablen
"zeichen_aus_fifo" steht, und "zeiger" noch nicht veraendert wurde, wird
auch zum Glueck der Kommando-Buchstabe direkt als erstes Zeichen in
unserem BUFFER landen.
Und alle weiteren Zeichen werden dank "zeiger++" dahinter geschrieben. */
mein_rx_buff [zeiger] = zeichen_aus_fifo;
zeiger++;
Die drei Platinen sind so ebenso wie die Controller so gleich, wie´s nur geht. Fuses stets dieselben, der Code von 328 und 168 ist identisch - die PP8 hat ein einziges Flag anders (Unterschied der Darstellung des Pfeils für Links- und Rechtsfahrt vorn und hinten - bei gleichem Kommandostring). UND natürlich sind im mega8 die Registernamen anders als bei den m168 und m328. Aber gerade die beiden PingPongs mit den ersetzten mega8 - einmal m328 und einmal m168 - haben identischen Code einschließlich ALLEM - nur das Target ist entsprechend markiert.
Ich bin also immer noch ohne jeden Peil.
Lesezeichen