www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Kommunikation PC - AVR


Autor: Morty Brown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

wir wollen binaere Daten zwischen PC und Atmel AVR-Serie hin und 
herschaufeln.
Die Kommunikation funktioniert gut im Hyperterminal, aber bei Visual C++ 
kommt hauptsächlich Mist auf der Gegenseite an.
Wer hat Erfahrung mit dem DCB der WINAPI?
Wir haben unserer Meinung nach schon alles wichtige initilisiert (9600, 
... kein Handshake...).
Wer hats geschafft ohne Terminal-Programm mit dem Atmel zu 
kommunizieren, wo koennte unser Fehler liegen?
Thanks in advance, yours Morty Brown.

Autor: Ingo B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe ich schon mal gemacht, allerdings mit dem C++ Builder.

Könnte ihr überhaupt vom PC Zeichen senden oder empfangen?

Vielleicht einfach mal pin 2 mit pin 3 der seriellen Schnittstelle 
verbinden, dann sollten alle gesendeten Daten sofort wieder empfangen 
werden.

Bis dann,
Ingo!

Autor: Morty Brown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von PC zu PC laeuft alles perfekt (ueber 0-Modem-Kabel), auch von Atmel 
auf Hyperterminal und umgekehrt laueft alles gut, nur von unserem 
Programm zum Atmel und umgekehrt is Mist.
Beispiel:
ABCDEFGHI.. zum Atmel senden und dort ins EEPROM schreiben.
Schaut man sich den EEPROM-Inhalt an, dann steht z.B. folgendes:
ABDGI... drin.
Wie gesagt mitm TerminalProgramm haut das alles hin.
Folglich muesste wohl noch was am Setup der seriellen Schnittstelle in 
der WinApi was faul sein, aber was?
Alle Handshakes sind aus, Baud und Paritaet usw. is OK, also ich weiss 
echt nicht mehr wo hier der Fehler liegt!
Auf jeden Fall schon mal vielen Dank fuer die Bemuehungen.
CU

Autor: Siegfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal testweise eine Pause von 2 ms zwischen den einzelnen Zeichen 
einbauen. Vielleicht stimmt die Framelänge beider Rechner nicht überein
(Startbit + 8 Datenbits + Parity + 1 oder 2 Stopbit).

Weil das Emfpfängerregister mit dem Startbit losläuft, kann es sein, das 
der gesendete Frame länger ist als der, den der Empfänger erwartet. 
Folge: das Startbit des nächsten Zeichens wird nicht erkannt.

Siegfried

Autor: Meiserl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich hab die Schnittstelle (über API) schon öfters mit Delphi 
initialisiert und funktioniert tadellos.

vielleicht hilft dir der code ja weiter..


  if port='' then port:='Com1';
  getmem(f,20);
  strpcopy(f,port);
  if not portopen then
     HComm:=CreateFile(f,GENERIC_READ or 
GENERIC_WRITE,0,t,OPEN_EXISTING,0,0);
  freemem(f);
  PortOpen:=false;
  if HComm=INVALID_HANDLE_VALUE then
    MessageDlg('error opening '+port,mtInformation,[mbOk],0)
    else
    begin
       PortOpen:=true;
       keys;
     { initialisieren }
       p:=addr(DCB);
       FillMemory(p,SizeOf(DCB),0);
       DCB.DCBLength:=sizeof(DCB);
       GetCommState(HComm,DCB);
       DCB.DCBLength:=8;DCB.BAudRate:=CBR_2400;
       SetCommState(hComm,DCB);
       TimeOuts.ReadIntervalTimeOut:=20;
       TimeOuts.ReadTotalTimeoutMultiplier:=10;
       TimeOuts.ReadTotalTimeoutConstant:=100;
       TimeOuts.WriteTotalTimeoutMultiplier:=10;
       TimeOuts.WriteTotalTimeoutConstant:=100;
       SetCommTimeOuts(HComm,TimeOuts);
{       if (not BuildCommDCB('2400,N,8,1',DCB)) then
       begin
         PortGeoeffnet:=False;
         PortGeoefnetIntern:=False;
         MessageDlg('Fehler',mtInformation,[mbOk],0);
       end;}



... schau auch mal bie http://www.sysinternals.com vorbei.
Der Portmon hat mir manchmal schon sehr geholfen.

gutes gelingen

Autor: Ingo B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hast Du beim AVR einen Empfangsbuffer eingebaut?
Vielleicht 'überfährtst' du ja den Controller, immerhin müssen die Daten 
ja ins EEPROM geschrieben werden. Das dauert etwas....
Das würde auch erklären, warum es mit einem Terminalprogramm läuft, da 
bist du ja wesentlich langsamer.

Bis dann,
Ingo!

Autor: Morty Brown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Meiserl:
Den Portmonitor werden wir mal ausprobieren, das Delphi File ist in den 
Abschnitten wo es auf die Winapi zugreift (dcb.xx) ziemlich aehnlich zu 
unserem. Ich hab da auch schon alle verfügbaren Elemente explizit 
initialisiert, aber auch das hat nix gebracht.
Hi Ingo:
OK werde das mal ausprobieren, aber ich vermute daran liegts nicht.
Der AVR verliert immer gleich viel Zeichen, egal ob mit 115000 oder 2400 
baud gearbeitet wird, auch wenn ich nicht ins EEPROM sondern in 
irgendeine Variable schreibe.
Vielleicht einfach mal per Software eine Pause zwischen den einzelnen 
Zeichen lassen, aber das kanns eigentlich nicht sein.
Bis denn!

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.