RS 232 Verbindung mit Atmega 32

Gast #1950994
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
Angehängte Dateien:
Gast #1951012
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);
#1951014
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.
#1951165
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.