www.mikrocontroller.net

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


Autor: Christoph (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Hilfe!

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

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph schrieb:
> @ Karl heinz Buchegger
>
> Was stimmt an meiner Initialisierung nicht??

Das hier
  UCSRB  = 0b00011000;   //aktivieren der Interrupts
  UCSRC |= 0b10000000;
  UCSRC  = 0b10000110;
  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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.