- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Großes Problem mit RS232 beim Datenaustausch mit PC

  1. #1
    Gast

    Großes Problem mit RS232 beim Datenaustausch mit PC

    Anzeige

    E-Bike
    Hi!!!

    Ich hab ein Rissengrosses Problem, was hoffentlich ganz einfach zu lösen ist!!!
    Seit über 3 Wochen Suche ich im Netz nach Hilfe und finde keine.

    Ich habe mir das Lehrbuch AVR Mikrocontroller gekauft. Außerdem programmiere ich mit Bascom den Atmega8 und benutze das Programm AvrTerm!
    Dazu kommt das ich in Visual Basic.net programmiere.

    Mein Problem:
    Ich habe mir ein kleines Windows Programm mit VB.net geschrieben was einen String über den Seriellen Com-Port (Com1) versenden kann.
    Für meinen Atmega8, auf der Übungsplatine vom Lehrbuch, habe ich ein Programm geschrieben was über den Com1 Daten empfängt und auf einem 20x4 Zeilen Display ausgibt. Das funktioniert alles, also z.b. im PC „Hallo Welt“ ins Programm schreiben und abschicken. Danach taucht „Hallo Welt“ auf dem Display auf!!! Bis hierher noch kein Problem. Aber, wenn ich im Atmega8 ein Programm schreibe was dauernd „Hallo Welt“ in den Sendepuffer schreibt und ich das im Windows Programm empfangen will habe ich ständig nur Fragmente. Ich habe durch meine Suche erfahren das das normal ist. Man muss den Com1 ständig abfragen und möglichst Spezielle Bytes einfügen damit man weis wo die gesendeten Daten anfangen. Also z.b. der Atmega8 sendet nonstop „#BEGIN#Hallo Welt#END#“ das PC-Programm Empfängt dann z.b. „allo Welt#END##BEGIN#Hallo Welt#END##BEGIN#Hallo Welt#END#“
    Das Programm kann dann ohne Probleme den eigentlichen String herausfiltern „Hallo Welt“ und ein „OK“ zurücksenden auf das der Atmega8 wartet und nun den nächsten String sendet bis erneut ein „OK“ als Bestätigung kommt.
    Das klingt alles ganz logisch und funktioniert auch theoretisch aber scheinbar nicht praktisch. Weil das Windows Programm nicht immer ein Byte was vom Atmega8 gesendet wurde auch so empfängt. Damit meine ich nicht Störsignale oder so sondern das wen der Atmega8 den String „AB“ sendet, muss er „0100000101000010“ senden 01000001=A und 01000010=B. Das Windows Programm fängt aber scheinbar nicht vorn am ersten Bit für ein Byte an sondern manchmal irgendwo mitten drin an das erste Bit für ein Byte zu lesen. Also z.b. original gesendet: „0100000101000010“ und Angefangen mit Empfangen des ersten Byte ab dem vierten Bit „0000101000010…“. Logischerweise kommt dann nur mist heraus!!!
    Dieser Fehler ist auch ganz einfach nachvollziehbar, indem man das Programm 0404 aus dem Buch:

    '0404.BAS: UART: Senden mit Warteschlange
    'Hardware: MAX232 an PD0/PD1, Nullmodemkabel zum PC
    ' Speaker an Pin PD5
    '----------------------------------------------------------
    $regfile = "m8def.dat" 'ATmega8-Deklarationen
    $crystal = 3686400 'Quarz: 3,6864 MHz
    $baud = 9600 'UART: 9600 Baud

    Config Serialout = Buffered , Size = 20 '20 Bytes Warteschlange

    Ddrd.5 = 1 'PD5 als Ausgang konfigurieren

    Do
    If _rs_head_ptrw0 = _rs_tail_ptrw0 Then 'Sendepuffer leer?
    Print "Das ist ein Test."
    End If
    Portd.5 = Not Portd.5 'PD5 (Speakerausgang) invertieren
    Waitms 1 'Eine Millisekunde warten
    Loop
    End
    '[Listing zum AVR-Mikrocontroller-Lehrbuch von Roland Walter, www.rowalt.de]

    in den Atmega8 steckt und das Programm AvrTerm startet. Wenn man dann Com1 connectet, kommt normalerweise:

    ist ein Test. Das ist ein Test. Das ist ein Test. Das ist ein Test. Das ist ein Test.
    Das ist ein Test. Das ist ein Test. Das ist ein Test. Das ist ein Test. Das ist ein u.s.w.

    Wenn man aber mehrere male auf connect klickt kommt es ab und zu mal vor das man nur mist empfängt:

    Ӕʎố̕|ĉĉÍÝ“↨§ÇӔç=øﲎ♥}谎ȹNJӔʎố̕|ĉĉÍÝ“↨§ÇӔç=øﲎ♥}谎ȹNJӔʎố̕ |ĉĉÍÝ“↨§ÇӔç=ø
    ﲎ♥}谎ȹNJӔʎố̕|ĉĉÍÝ“↨§ÇӔç=øﲎ♥}谎ȹNJӔʎố̕|ĉĉÍÝ“↨§ÇӔç=øﲎ♥}谎 ȹNJӔʎố̕|ĉĉÍÝ“↨ u.s.w.

    So und nun hätte ich gern Hilfe von euch da draußen bekommen weil mir das nix nützt wenn der laufend mal nur schei… empfängt.
    Das PC-Programm muss doch unbedingt wissen wo ein Byte anfängt und wo eins aufhört!!! Ich habe die üblichen Einstellungen benutzt:
    Com1:9600,8,N,1
    Auf der Übungsplatine werden nur Pin 2;3;5;7;8 benutzt für was die anderen Pins sind die nicht angeschlossen sind weis ich nicht.
    Ich Vermute das auf einen dieser Pins ein Signal gesetzt ist was dem PC sagt das jetzt ein neues Byte anfängt, ist aber nur eine Vermutung!

    Könnt ihr mir bitte helfen wenn man ein Modem an den PC anschließt und ins Internet geht sendet das Modem eine menge Daten zum PC die er auch richtig empfangen muss, wie machen die das???
    Ich kann in VB.net aber nicht das MScomm.ocx benutzen weil’s das nicht mehr gibt!!! (läuft aus) Ich mache also alles über API’s wie auf http://support.microsoft.com/default...79&Product=vb6 beschrieben ist!!!
    Helft mir bitte ich Suche nun schon über 3 Wochen und verzweifle nun ;!!!

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    18.05.2004
    Ort
    bei Dresden
    Alter
    43
    Beiträge
    40
    Hab vergessen mich einzuloggen!!! Der Beitrag is von mir!!!

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    09.06.2004
    Ort
    Rhein-Neckar-Raum
    Beiträge
    504
    Das gleiche Problem hatten wir vor kurzem schon mal.

    Fehlerursache war ein falsch gesetztes FUSE-Bit. Dadurch wurde der ATMEL nicht mit den angeschlossenen Quarz getaktet sondern mit dem internen RC-Generator. Die Baudrate stimmt dann nicht genau und die Daten, die der ATMEL sendet können nur verstümmelt empfangen werden.

  4. #4
    Gast
    Die FUSE-Bits Stimmen alle so wie sie laut Buch sein müssen damit der Externe Quarz benutzt wird.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Die FUSE-Bits Stimmen alle so wie sie laut Buch sein müssen damit der Externe Quarz benutzt wird.
    Hast du mal mit einem normalen Terminal-Programm, z.B. dem das in Bascom enthalten ist überprüft ob da auch nur Unsinn ankommt?
    Dann wüsstest du wenigstens schon mal ob es an deiner Hardware, am Programm im µC oder an dem VB-Programm liegt.

    (sorry, falls die Frage schon irgendwo in deinem Text beantwortet ist, der war mir ehrlich gesagt zu lang um ihn komplett durchzulesen)


    Ӕʎố̕|ĉĉÍÝ“↨§ÇӔç=øﲎ♥}谎ȹNJӔʎố̕|ĉĉÍÝ“↨§ÇӔç=øﲎ♥}谎ȹNJӔʎố̕ |ĉĉÍÝ“↨§ÇӔç=ø
    ﲎ♥}谎ȹNJӔʎố̕|ĉĉÍÝ“↨§ÇӔç=øﲎ♥}谎ȹNJӔʎố̕|ĉĉÍÝ“↨§ÇӔç=øﲎ♥}谎 ȹNJӔʎố̕|ĉĉÍÝ“↨ u.s.w.
    So ähnlich sieht es auch aus, wenn man Ascii Zeichen sendet und in VB als Bytes einliest.

  6. #6
    Gast
    Die Frage wurde beantwortet! Ich habe denn obigen Code benutzt und das AvrTerm Programm.
    Das Programm empfängt die Daten und je nachdem wann ich auf connect klicke empfängt er das richtige oder nur mist.

    Bitte den Text komplett lesen, auch wenn es viel ist! Ich habe extra etwas mehr geschrieben um den Fehler einzugrenzen.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.08.2004
    Beiträge
    27
    Hallo,
    probier doch mal mit einem Protokoll zu arbeiten, was richtige Messages erstellt z.B. S.N.A.P..
    Ich habe schon diverse Tests gemacht und es funktioniert prächtig, ausserdem kannst Du auf der Homepage des Entwicklers eine *.dll herunterladen die Du in VB nutzen kannst.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    18.05.2004
    Ort
    bei Dresden
    Alter
    43
    Beiträge
    40
    Hi,
    wo soll auf der Seite ne dll zum Dounloaden sein???
    Ich finde die nicht auf www.atmel.com.

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    24.04.2004
    Ort
    Karlsruhe
    Alter
    46
    Beiträge
    1.277
    Hast du's schon mal mit dem einfachen "Print"-Befehl probiert?
    Die Interruptgesteuerte UART will bei mir auch nicht wirklich funktionieren.
    Ansonsten frage ich in VB über das OnComEvent ab, das tritt ja auf sobald eine Zeichenkette empfangen wurde und zur Verfügung steht...

    Gruß, Sonic
    Bild hier  
    If the world does not fit your needs, just compile a new one...

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    18.05.2004
    Ort
    bei Dresden
    Alter
    43
    Beiträge
    40
    Ich habe den Fehler gefunden!!! Der Fehler liegt in Bascom!!!
    Wenn man Open benutzt, wird die UART richtig gesetzt (8N1).
    Wenn man $Baud benutzt wird die UART falsch gesetzt oder nicht richtig (8N0) was zu diesen Fehlern führt wie oben beschrieben.
    Ich habe mir das Datasheet zur Hand genommen und habe alles manuell gesetzt per Register!!! Und jetzt funktionierts ohne Probleme wie ich es will
    Die DLL für VB würde mich allerdings interesieren, wenn jemand weis wo der Download ist soll er es mir Bitte sagen!!!

    Cyo

Seite 1 von 2 12 LetzteLetzte

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen