Forum: Mikrocontroller und Digitale Elektronik RS 232 Verbindung mit Atmega 32


von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

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

von Peter (Gast)


Lesenswert?

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);

von Karl H. (kbuchegg)


Lesenswert?

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.

von Christoph (Gast)


Lesenswert?

Danke für die schnelle Hilfe!

Das _delay 500, war zum testen und zur Fehlersuche. Aber der Fehler 
tritt auf ohne auch.

von Christoph (Gast)


Lesenswert?

@ 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.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.