Hallo zusammen ich bin gerade ein wenig am verzweifeln... ich habe eine ESP32 BT-Modul über die UART an einen Atmega88 angeschlossen.... Ich möchte das BT-Modul als Gateway nutzen. das heisst das BT Modul soll Daten per bluetooth empfangen und weiter an den Atmega88 schicken... Ich kann aber leider NUR EIN ZEICHEN empfangen das heisst ich komme in die beiden IF Zweige (das sehe ich da ich die LED per BT ein und ausschalten kann) aber ich bekomme als response nicht die 0x55 zurück.... hat einer eine idee woran es liegen kann? ich bin seit längere Zeit aus dem aktiven coden raus und will mich wieder einarbeiten
Das ist ein Timing-Problem. Der ESP32 sendet receive_BT_Array[1] und receive_BT_Array[2] über UART:
1 | cppSerial.write(receive_BT_Array[1]); // 0x33 |
2 | Serial.write(receive_BT_Array[2]); |
Der ATmega empfängt das in fillReceiveBuffer():
1 | while ((UCSR0A & (1<<RXC0))) // ← Problem hier! |
2 | {
|
3 | receivebuffer[indexBuffer] = UART_Receive(); |
4 | indexBuffer++; |
5 | }
|
Die while-Bedingung (UCSR0A & (1<<RXC0)) prüft nur ob im Moment der Ausführung wenigstens ein Byte im Buffer liegt. Nach dem ersten Byte ist RXC0 dann kurz 0, bevor das zweite Byte ankommt – die Schleife bricht also zu früh ab. UART_Receive() wartet zwar intern mit while (!(UCSR0A & (1<<RXC0))), aber die äußere while-Schleife prüft das Flag bevor das nächste Byte ankam. Du musst Deinen Code umbauen, auf Timeoutgesteuerten Empfang. Oder besser gleich mit UART-Events. Bei UART ist es auch eine Protokollfrage, wann Du glaubst das eine Übertragung beendet ist.
:
Bearbeitet durch User
Tobias L. schrieb: > hat einer eine Idee, woran es liegen kann? An der falschen Dateiendung!? SCNR Dir ist schon klar, dass die serielle Schnittstelle wesentlich langsamer als der Prozessor ist, oder? Wenn da kein Zeichen in der Zwischenzeit eingegangen ist, wird die Schleife verlassen und du löscht den Puffer. Du solltest den Puffer entweder per Interrupt in der ISR füllen, oder in einer Schleife prüfen, ob ein neues Zeichen vorliegt (und es in den Puffer schreiben). Deine Statemachine habe ich mir nicht angeguckt. Du könntest natürlich auch eine Echo-Funktion zu Debugzwecken basteln, die das empfangene Zeichen über das Bluetooth-Modul (an dein BT-Terminal auf dem PC) zurücksendet.
Tobias L. schrieb: > ich habe eine ESP32 BT-Modul über die UART an einen Atmega88 > angeschlossen.... Den Atmega raus schmeißen und die Aufgaben des Atmega auch den ESP32 erledigen lassen.
Obelix X. schrieb: > Den Atmega raus schmeißen und die Aufgaben des Atmega auch den ESP32 > erledigen lassen. Am besten gleich beides rauswerfen, und die Aufgabe einem anderen übertragen. Wenn schon so Kleinigkeiten zur Stolperfalle werden...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.