Das geht ja schnell... Danke.
zur Vervollständigung der Infos:
Init der Schnittstelle
1 | void com2_Init(uint32_t baudRate, uint32_t quarzClock) {
|
2 |
|
3 | // Baud Rate setzen
|
4 | UBRR1H = (uint8_t)(((quarzClock)/((baudRate)*16l)-1)>>8);
|
5 | UBRR1L = (uint8_t)((quarzClock)/((baudRate)*16l)-1);
|
6 |
|
7 | UCSR1B = 0x18;
|
8 |
|
9 | //asynchronous 8N1
|
10 | UCSR1C = 0x06;
|
11 |
|
12 | UCSR1A = 0x00;
|
13 | }
|
Der eigentliche Datenempfang befindet sich in der Funktion
getModulAnswer(); siehe oben :
1 | //auf zeichen warten
|
2 | while( (!(UCSR1A & (1<<RXC1))) || (LSRTimeOut!=0) )
|
3 | {//Timeout
|
4 | _delay_ms(10);
|
5 | LSRTimeOut--;
|
6 | }
|
LSRTimeOut ist ein Timeout- Counter der hier die Endlosschleife
verhindern soll. Ansonsten wird auf Receive completed des UCSR1A
Registers gepollt.
Das Verhalten ist also stand jetzt immer ein Timeout.
Der Timeout wird pro Zeichen rückgesetzt und liegt bei 250ms. Per Oszi
habe ich ermittelt, dass die Antwort des Zielsystems innerhalb von
10-20ms erfolgt (timeout sollte somit ausreichen).
@Huch: Mit dem Return in der Schleife geb ich dir recht, is unsauber.
Werde den Timeout ebenfalls in die äußere Schleife setzen und den
Rücksprung bedingt außerhalb der Schleifen durchführen. Als
Fehlerursache kann ich es mir jedoch nicht vorstellen, habe zuvor auch
ohne Timeout gearbeitet, was einen Dead Lock zur folge hatte.
Nochmal zur erläuterung des Fehlerverhaltens:
UART1 sendet --> OK
Zielsystem reagiert --> OK
Zielsystem antwortet --> Ich sehen die zeichen auf dem Scope
ankommen,wenn ich an PIN27 (PD2/RxD1) von meinem ATMEGA128 messe!
-->RXC1 wird trotzdem nie gesetzt.
In sachen Hardware:
an UART0 --> PC, Hyperterinal
an UART1 --> weitere MC basierte Elektronik. Dieses System ist ein
Kaufteil und bereits öfters im Einsatz. Kann ich leider nicht als
mögliche Fehlerursache anführen.
Beide Rx und Tx leitungen sind vom ATMEGA128 auf ein MAX232ACSE geführt.
Betriebsspannung des MAX und Kondensatorwerte des Prototypboards sind
überprüft.
Schalplanauszug ist beigefügt.
@Andreas: Im Schaltplan ist er Angeschlossen. Messung am Pin64,52,21
ergab leider jeweils auch +5V.
Gruß,
Henrik