mikrocontroller.net

Forum: Compiler & IDEs atmega 128 RS232 benutzen


Autor: jochen R. (jorg2011)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

habe ein kleine Problem mit einem atmega 128. Vieleicht ist es auch ein 
verständniss problem von mir.

Was ich vor habe:

Ich möchte den RS232 ausgang des atmega so programmieren das ich auf 
hyperterminal den printf befehl sehen kann z.B. zur ausgabe vom ADC.

Als test würde mir auch erst mal "Hallo Welt" reichen, aber selbst das 
bekomme ich nicht hin !

Nur ist meine frage brauch ich nur den Tx und Rx vom RS232 anschließen 
(und dann in die RS232 vom PC) und wie ist de quellcode für C um die 
RS232 anzusprechen ich werde da ned schlau draus. Hab noch keine große 
erfahrung mit dem AVR.

Vielen dank erst mal

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

Bewertung
0 lesenswert
nicht lesenswert
Zum Thema Hardware guckst du zb hier

http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART
(kurz gesagt: nein, so einfach ist das nicht wie du dir das vorstellst. 
RS232 arbeitet mit Pegeln von +12V und -12V)

Zum Thema Software:
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Es lohnt sich, wenn man sich die Tutorials durchschaut. Da findet sich 
vieles.
AVR-GCC-Tutorial
AVR-Tutorial

Autor: jochen R. (jorg2011)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Folgendes AVR Development Board habe ich

http://www.micro4you.com/files/atmega128/BASEAVRAT...


Die AVR-GCC-Tutorial hab ich auch schon nach geschaut werde da aber echt
ned wirklich schlau draus was RS232 betrifft.

Oder habe ich irgend eine andere möglichkeit , das aufem PC angezeigt zu
bekommen.


Gruß

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arbeitsanweisung:
Lesen
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Falls spezielle Fragen da sind, fragen.
Aber nicht sowas wie: Ich hab keine Ahnung, bin zu faul zum Lesen oder 
ich brauch doch nur den Code.

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jörg,
Wo hapert es denn bei dir genau?
1. Vergiss erst mal das mit dem Printf und versuche nur mal ein 'A' 
auszugeben!
Dazu brauchst du eine 'putchar' - Funktion.

Hast du die Init der UART, verstanden bzw nachvollziehen können?

>Oder habe ich irgend eine andere möglichkeit , das aufem PC angezeigt zu
>bekommen.
was meinst du damit? Wenn du nur Buchstaben und Zahlen ausgibst, sollten 
die im Hyperterminal und Windows sichtbar sein.

Stephan

Autor: jochen R. (jorg2011)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also es harpert bei mir ob ich mit meinem bord direkt auch an die RS232 
des PC gehen kann und dann nur Tx und Rx anschlißen muss oder sonst noch 
was.

des weitern habe ich ein beispiel quellcode geladen aber bekomme aber 
keine ausgabe vom Hterm!


Hier der quellcode:


#include <mega128.h>                                                // 
ATmega128 MCU
#include <stdio.h>                                                  // 
Standard Input/Output functions

void main(void)
{
  char uart_data;                                                   // 
RS232 Buffer

  // USART initialization
  // Communication Parameters: 8 Data, 1 Stop, No Parity
  // USART Receiver: On
  // USART Transmitter: On
  // USART Mode: Asynchronous
  // USART Baud rate: 9600
  UCSR0A=0x00;
  UCSR0B=0x18;
  UCSR0C=0x86;
  UBRR0H=0x00;
  UBRR0L=0x67;

  printf("\fHello ET-BASE AVR MEGA64/128...TEST RS232 CH0\n\r");    // 
Call printf Function
  printf("Please enter any key to echo data\n\n\r");
  while (1)                                                         // 
Loop Continue
  {
    uart_data = getchar();                                          // 
Wait RS232 Receive
    putchar(uart_data);                                             // 
Echo data
  }
}




Die Init des UART habe ich so halb verstanden.


Danke schon mal

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du brauchst ein Kabel, war keines dabei?
Wenn du keins hast dann baue dir dieses hier 'Nullmodemkabel'.

Aufbau eines 3-Draht-Nullmodem-Kabels mit 9-poligen D-Sub-Buchsen
http://de.wikipedia.org/wiki/Nullmodem-Kabel

Stecker 1 -> ist der PC
Stecker 2 -> dein Board

Stephan

Autor: jochen R. (jorg2011)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stephan,

habe mir ein Kabel selber gelötet, aber irgend wie geht das immer noch 
nicht ich verzweifle da dran.

Der quellcode wir wie gesagt auch richtig Compeliert und AVR Studio 
zeigt auch keine Fehler Meldung.


hast du noch eine Idee?


Gruß Jörg

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>hast du noch eine Idee?

Ja, Kabel falsch. Masse angeschlossen?
Tx,Rx gekreutzt?

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brück mal auf der Empfängerseite Tx und Rx ohne angeschlossenen uC.
Das dürfte dann bei richtigem Kabel wie ein Echo funktionieren.

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

Bewertung
0 lesenswert
nicht lesenswert
Jörg Roesberg schrieb:

> hast du noch eine Idee?

Sieh erst mal zu, dass du deine Hardware debuggst.

Das ist jetzt zwar ein Problem, weil du den Mega128 nicht von der 
Platine runternehmen kannst.
Daher: programmier dir den µC so, dass am Port E alles Eingang ist, dann 
sieh zu, dass du am Pinconnector die Pins PE0 und PE1 miteinander 
kurzschliessen (brücken) kannst. (Da der µC die Pins auf Eingang hat, 
passiert ihm nichts).
Sinn der Sache: Dadurch werden die RS232 Datenleitungen um Anschluss 0 
kurzgeschlossen.
Am PC startest du Hyperterminal und tippst einfach mal drauflos. Alles 
was du tippst musst du im Hyperterminal wieder sehen.
Dadurch testest du deine Hardware: das Kabel und die RS232-Umsetzer auf 
der µC-Platine. Das von dir getippte geht über das Kabel zur Platine, 
wird dort von RS-232 Pegel auf 5V Pegel umgesetzt, läuft weiter bis zur 
Brücke am Port E und von dort auf dem gelichen Weg wieder zurück zum PC.

Wenn irgendwas in der Hardware nicht stimmt, dann funktioniert das 
nicht!
Meistens ist es dann das Kabel, das falsch rum ausgekreuzt ist.

Testweise am PC auch mal "lokales Echo" zu und abschalten. Bei 
eingeschaltetem lokalen Echo musst du jeden tastendruck 2 mal sehen.

Autor: jochen R. (jorg2011)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also da geht nix raus noch rein.

Hab jetzt mal an Rx und Tx gegen Masse(am µC) gemessen da bei Tx messe 
ich ca -6 V und bei Rx 0V. Das komische ist das ich das aber auf beiden 
RS232 auf dem µC messe.

Mein quellcode ist müsste ja richtig sein.

Also langsam denke ich auch ich bin zu doof.

Gruß

Autor: jochen R. (jorg2011)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

So ich bin etwas weiter das RS232 muss in Ordnung sein hab das jetzt 
noch mal mit dem Debugen gemacht und ich kein im Hterm was eingeben und 
das wird dann in der ersten zeile direkt wieder ausgegeben.

Hab dann mal an gefangen das Programm noch mal neu zu schreiben auch 
laut AVR GCC Tutorial.

Hab den quellcode als datei angehangen.

Ich bekomme nur dann einige errors beim compielieren, hab das auch mal 
als bild angehangen.

Gruß Jörg

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

Bewertung
0 lesenswert
nicht lesenswert
Jörg Roesberg schrieb:

> Hab dann mal an gefangen das Programm noch mal neu zu schreiben auch
> laut AVR GCC Tutorial.

Das Tutorial ist schon ok.
Aber: Du sollst auch immer das Datenblatt zu deinem konkreten µC in 
Griffweite haben und das was du im Tutorial siehst oder liest, damit 
überprüfen, ob das bei deinem µC auch 100% genau gleich ist.

Dein Mega128 hat zb 2 eingebaute UART.

Die heissen dann zb
UCSRA0 und UCSRA1  wobei die angehängte Zahl jetzt aussagt, auf welche 
UART sich das Register bezieht - auf die USART 0 oder auf die USART 1.

Im Tutorial gibt es diese Unterscheidung nicht. Dort wird von einem µC 
ausgegangen, der nur 1 USART hat. Dort heißt das Register dann einfach 
nur UCSRA.

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

Bewertung
0 lesenswert
nicht lesenswert
Jörg Roesberg schrieb:

> So ich bin etwas weiter das RS232 muss in Ordnung sein hab das jetzt
> noch mal mit dem Debugen gemacht und ich kein im Hterm was eingeben und
> das wird dann in der ersten zeile direkt wieder ausgegeben.

Hast du das auch kontrolliert, ob das auch tatsächlich über das Kabel 
gelaufen ist?
Terminalprogramme haben nämlich eine Einstellung 'lokales Echo', bei der 
getipptes grundsätzlich ebenfalls mit ausgegeben wird.
Mit einem einfachen Abziehen des Kabels kann man aber die Fälle leicht 
unterscheiden: Wird nach dem Kabelabziehen beim Tippen immer noch 
ausgegeben, dann kommt das vom lokalen Echo. Wird nichts mehr 
ausgegeben, dann kann man davon ausgehen, dass tatsächlich die 
Übertragung über das Kabel hin und auch wieder zurück gelaufen ist.

Bei jedem Test immer auch den Gegentest machen. Das kostet nichts und 
man hat die Gewissheit, dass man auch tatsächlich das testet, was man 
testen will und nicht irgendeinem anderen Effekt aufsitzt.

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.