Hi, ich möchte Strings von meinem Atmega zum PC senden. Zwischen dem PC und dem Microcontroler hängt ein Modul. Dies bedeutet das der µC die Daten an das wlan Modul sendet und dieses es weiter an den PC (und umgekehrt). Leider gibt es hier folgendes Problem: Die Daten kommen nur Stückweise an. Bsp: "Falsche eingabe" soll gesendet werden "Falsch" wird empfangen Im Anhang befindet sich mein Programmcode. Vl. findet jemand den Fehler! Danke für die Hilfe Christoph
Woher kommt eigentlich die Unsitte, Programmtext als TXT oder DOC oder PDF anzuhängen? Hänge es ganz einfach als *.C File an. Die Forensoftware kann damit schon umgehen und macht dann damit ein wunderbares Syntaxhighlighting
da du als einzigste abbruchbedingung das hier hast while( blabla != ';' && e <= 48) muss es also so sein das du ein ';' empfangen hast oder die länger größer als 48ist, also sollte du erstmal rausfinden welche der beiden bedingen den ende erzeugt hat. Wenn du hier wartest, gehen doch alle zeichen die empfangen werden verloren oder ist das eine Art flusskontroller? PORTB = 0b11111011; _delay_ms (500); PORTB = 0b11111111; _delay_ms (500);
Christoph schrieb: > Zwischen dem PC und dem Microcontroler hängt ein Modul. > Dies bedeutet das der µC die Daten an das wlan Modul sendet und dieses > es weiter an den PC (und umgekehrt). Sieh zu das du das WLAN Modul erst mal umgehst und deinen µC direkt per Kabel mit einem PC verbindest. Wenn das Problem damit aus der Welt ist, dann wird es wohl daran liegen, dass du kein Handshaking machst und das WLAN Modul aus irgendeinem Grund (*) nach einer gewissen Anzahl von Zeichen erst mal ein Päuschen in der Zeichenannahme von dir macht, welche dein Programm aber ignoriert und munter weiter drauflos sendet. Der Programmcode sieht bis auf die Initialisierung nicht soooo schlecht aus. (*) Der Grund könnte zb sein, dass du nach jedem Zeichen 1 Sekunde bis zum nächsten Zeichen wartest, worauf hin das WLAN Modul irgendwann in einen Timeout geht und den Teil den es schon hat erst mal per TCP/IP versendet. Wie gesagt: Sieh zu, dass du erst mal eine einfache Übertragungsstrecke aufbauen kannst, ehe du an Sonderlösungen mit zusätzlichen Restriktionen/Bedingungen rangehst.
Danke für die schnelle Hilfe! Das _delay 500, war zum testen und zur Fehlersuche. Aber der Fehler tritt auf ohne auch.
@ Karl heinz Buchegger Was stimmt an meiner Initialisierung nicht?? Der Kommentar, "Interrupts aktivieren" ist leider falsch, den hab ich vergessen rauszulöschen, beim Umbau des Progamms.
Christoph schrieb: > @ Karl heinz Buchegger > > Was stimmt an meiner Initialisierung nicht?? Das hier
1 | UCSRB = 0b00011000; //aktivieren der Interrupts |
2 | UCSRC |= 0b10000000; |
3 | UCSRC = 0b10000110; |
4 | UBRRL = 0b01100111; // Baudrate 9600 |
niemand hat Lust mit dem Datenblatt in der Hand auseinander zu klamüsern, was du da eigentlich eingestellt und aktiviert hast > Der Kommentar, "Interrupts aktivieren" ist leider falsch, den hab ich > vergessen rauszulöschen, beim Umbau des Progamms. Solange du es für notwendig erachtest, so etwas überhaupt kommentieren zu müssen, ist deine Schreibweise beschissen. Schau ins AVR-GCC-Tutorial, Abschnitt UART, wie man das so schreiben kann, dass man im C Code selber ablesen kann, was du aktivierst oder nicht aktivierst.
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.