Forum: Mikrocontroller und Digitale Elektronik UART Kommunikation ATmega8


von Einsteiger (Gast)


Lesenswert?

Hallo Leute
versuche mich gerade an UART... Hab dazu zwei Fragen:
Erstens: Ich verwende einen ATmega8 mit einem 16MHz Quarz, welches auch 
funktioniert! (Hab ich mit nen Timer ausprobiert...)
Als Baudrate will ich 9600 verwenden. In UBRR muss ich dann den Wert 103 
schreiben oder? Bin mir nicht sicher ob ich das richtig abgelesen 
habe...
Der Fehler müsste mit 0,2 % akzeptabel sein!
Und Zweitens: Wie kann ich jetzt mit dem Computer Daten austauschen? 
Muss ich da erst in zb. C++ ein Programm schreiben? (Hab gute C++ 
Kenntnisse vll kennt ja jmd ein Tutorial oder so)
Danke

von Karl H. (kbuchegg)


Lesenswert?

Einsteiger schrieb:
> Hallo Leute
> versuche mich gerade an UART... Hab dazu zwei Fragen:
> Erstens: Ich verwende einen ATmega8 mit einem 16MHz Quarz, welches auch
> funktioniert! (Hab ich mit nen Timer ausprobiert...)
> Als Baudrate will ich 9600 verwenden. In UBRR muss ich dann den Wert 103
> schreiben oder?

Im Prinzip ja (denke ich mal).
Aber was kümmert dich das? Wenn du es richtig machst, dann lässt du den 
Compiler das für dich ausrechnen.

> Kenntnisse vll kennt ja jmd ein Tutorial oder so)

Jup. Hier auf der Site gibt es ein Tutorial.
AVR-GCC-Tutorial

von oldmax (Gast)


Lesenswert?

Hi
Nun, es gibt schon eine Möglichkeit einfach mit einem Terminalprogramm 
zu kommunizieren, aber es macht auch Spaß, eine eigene Software für den 
µC zu programmieren. Ich habe sowas mit Delphi gemacht und das hat auch 
ganz gut funktioniert. Da mein Delphi etwas veraltet ist, hab ich es 
jetzt mit Lazarus versucht, da harpert's noch ein wenig. Aber wie es 
aussieht, kannst du dir mit OpenEye ansehen. Ist hier irgendwo 
veröffentlicht. Es ist eine Software, die ich mir eigentlich für 
Assemblerprogramme geschrieben habe, aber sie sollte auch unter C 
verwendbar sein. Sie reagiert auf eine Anzahl von Bytes, die vom 
Controller kommen, wenn ein Steuerzeichen vom PC gesendet wird. Im 
Controller ist eine Routine, die dann ab einer SRam-Adresse N-Bytes 
versendet. Damit habe ich die Variablenwerte im PC und kann Onlie das 
µC-Programm kontrollieren. Ein Beispiel für den Atmega8 sollte in der 
Doku auch sein.
Gruß oldmax

von Einsteiger (Gast)


Lesenswert?

Das ist aber ein Tutorial darüber wie der Mikrocontroller programmiert 
werden muss oder nicht? Ich bräuchte eins, das mir erklärt wie ich mit 
dem C++ die Serielle Schnittstelle des Pcs ansteuern kann, an der 
wiederum der Mikrocontroller hängt... Ich will also mit meinem Program 
auf dem Computer mit dem Mikrocontroller kommunizieren! Oder gibts da 
schon fertige Programme?

von Einsteiger (Gast)


Lesenswert?

:) war zu langsam... werds mal suchen!

von Karl H. (kbuchegg)


Lesenswert?

Einsteiger schrieb:
> Das ist aber ein Tutorial darüber wie der Mikrocontroller programmiert
> werden muss oder nicht?

Ja klar.
Der Großteil deines Textes beschäftigt sich ja auch damit

> Ich bräuchte eins, das mir erklärt wie ich mit
> dem C++ die Serielle Schnittstelle des Pcs ansteuern kann, an der
> wiederum der Mikrocontroller hängt...

Das musst du dir woanders suchen.
google "C++ serielle Schnittstelle" eventuell noch den Namen deines 
Compilers als Suchbegriff und du kannst aus dem Vollen schöpfen.

> Ich will also mit meinem Program
> auf dem Computer mit dem Mikrocontroller kommunizieren! Oder gibts da
> schon fertige Programme?

Fürs erste:
Hyperterminal  (wird mit Windows ausgeliefert)
HTerm

Damit kannst du dir erst mal anzeigen lassen, was auf der Seriellen so 
alles reinkommt. Du kannst auch selbst etwas zum µC senden.

Für weitergehende Dinge wirst du allerdings PC-seitig Programmieren 
müssen.

von htw (Gast)


Lesenswert?

Einsteiger schrieb:
> Ich bräuchte eins, das mir erklärt wie ich mit
> dem C++ die Serielle Schnittstelle des Pcs ansteuern kann

schau dir mal das an:
http://www.htw-dresden.de/~hkuehn/CST_Praktikum/C7/Loesungshinweise_zum_Praktikumsversuch_C7.pdf

Aber wie immer wärst über Google 3 mal schneller gewesen. Naja, gegen 
Faulheit kann man nichts machen. Viel Spaß beim proggen.

von Norbert (Gast)


Lesenswert?

Ich schick Dir mal ein Beispiel aus einer meiner kleinen spielerein mit 
dem Com Port, vieleicht gehts schöner, hat aber funktioniert


COMMTIMEOUTS timeouts;
HANDLE hdl;

hdl= CreateFile("COM1", 
GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0, NULL);

ConfigComPort(hdl);
GetCommTimeouts(hdl,&timeouts);
timeouts.ReadIntervalTimeout =100;           // wait max. 1000ms between 
two received bytes
timeouts.ReadTotalTimeoutMultiplier =100;    // wait max. 100ms per each 
byte to receive
SetCommTimeouts(hdl,&timeouts);


void ConfigComPort(HANDLE hCom)
{
   DCB dcb;
   if(hCom != INVALID_HANDLE_VALUE)
   {
     GetCommState(hCom,&dcb);

     dcb.BaudRate = CBR_57600;
     dcb.ByteSize = 8;
     dcb.StopBits =ONESTOPBIT;
     dcb.Parity   =NOPARITY;
     dcb.fParity  = 0;
     dcb.fBinary  =1;
     dcb.fDtrControl =DTR_CONTROL_DISABLE;
     dcb.fDsrSensitivity =0;
     dcb.fDtrControl =0;
     dcb.fInX =0;
     dcb.fNull =0;
     dcb.fOutX =0;
     dcb.fOutxCtsFlow=0;
     dcb.fOutxDsrFlow=0;
     dcb.fRtsControl =0;

     SetCommState(hCom,&dcb);
   }
   else
   {
      cout << "Invalid Handle, cannot open Port" << endl;
   }
}


dann kannst Du mit writefile und readfile daten lesen und schreiben

von Uwe C. (Firma: privat) (olmuk)


Lesenswert?

Hallo,

als Software für den PC kann ich nur Profilab Expert empfehlen !!

Siehe :  http://forum.abacom-online.de/phpBB3/viewtopic.php?f=21&t=1478

Gruß Uwe

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.