mikrocontroller.net

Forum: PC-Programmierung Probleme mit RS232 Zugriff


Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe Probleme mit der RS232 Übertragung.
Und zwar möchte ich Daten zwischen ATMEGA8535 und PC über die RS232
austauschen.

Mit Borland Builder C++ kann ich ohne Probleme die Daten empfangen.
Wenn ich das hyperterminal benutze kann ich keine Daten sehen.
Ich habe auf der Mikrocontroller Seite ein C# Projekt gefunden, mit dem
man auch auf die RS232 zugreifen kann
(Projektname C#: lastporttest).Leider funktioniert es damit auch nicht.
Nur unter Borland Builder kann ich die Daten empfangen.
Habt ihr eine Ahnung wo da der Fehler liegt?

ATMEGA8535 C-Codeausschnitt:
//*****************************************************
interrupt [USART_RXC] void uart_rx_isr(void)
{
  Zeichen = UDR;
}

interrupt [USART_TXC] void uart_tx_isr(void)
{
}

//Hauptprogramm
void main(void)
{
DDRB = 0xFF;
PORTB = 0;
DDRD = 0x00;
PORTD = 0;
PORTC_output();
t6963cinit();
LCD_Clear_Graphics();
LCD_Clear_Text();

UCSRB=0xD8;
UBRRL=0x33;

ACSR=0x80;

#asm("sei")

while (1)
      {
        delay_ms(100);
        //lcd_printfz(0, 3,"Zeichen:%2d",Zeichen);

        putchar('X');
      };
}

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du redest die ganze Zeit von C# und Borland und gibst und dann ein
AVR-Programm? Irgendwo past das nicht..
Wenn auch nur ein PC-Programm die Daten empfangen kann liegt der Fehler
zu 99,9% am PC Programm, denn dann sendet der AVR ja auf jeden Fall.

Also stell am besten mal die PC-Software hier rein

Autor: Fabian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ok im Anhang befindet sich zwei Programme mit Quellcode.
1. Borland Builder
2. C#

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem mit Hyperterminal hatten schon einige hier im Forum.
Probier mal das Bray Terminal oder ein anderes Programm aus.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja aber mit Borland Builder C++ (siehe Sourcecode) funktioniert es ja.
Mit C# klappt es nicht (siehe Sourcecode)

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte eigentlich mit C# Daten von der RS232 senden und empfangen
können. Gibt es hier im Forum jemand, der dies schon einmal gemacht
hat?

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mit C# funktioniert es jetzt auch.
Vom Controller aus wollte ich mal ein Zeichenauf den PC senden. Mit C#
oder auch Borland Builder C++ bekomme ich nur komische Zeichen.

Ich sende in meiner While Schleife vom Controller
z.B. den Buchstaben A

while (1)
      {
        delay_ms(100);
        putchar("A"); //sende A nach PC
      };
}

Was mache ich da systematisch falsch? WIe kann ich das A auf dem
PC(C#)
sehen?

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
putchar("A");
sollte
putchar('A');
heissen. Keine Ahnung, ob es daran liegen kann. Oben hattest du es ja
richitg...
Empfängst du denn mit einem Terminal-Programm das richtige Zeichen?
Evtl Baud-rate falsch?

Autor: Fabian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also ich verstehe die Welt nicht mehr.
Den ganzen Morgen mache ich schon an der blöden RS232 Verbindung rum.
Ich kann auf dem Controller sowie Terminalprogramm bzw. Borland Builder
C++ Programm nur Müll empfangen.

Ich brauche dringend Unterstützung, sonst sitze ich hier noch sinnlos
meherer Tage lang!

Zusätzlich habe ich noch das Programm am Controller, wenn ich eine
Taste drücke, dann sendet der COntroller gleich mehrere Zeichen.
Ich habe in meinem C Programm einen Timer eingebaut. Dort drin habe ich
auch die Funktion tasten() reingesetzt, damit die Tasten(Eingänge)
entprellt werden.
Aber so wie es aussieht funktioniert das auch nicht.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir hierzu wirklich keiner Helfen?

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, hab keine AHnung von C# :/

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok unter Borland Builder funzt es auch nicht so wie es will.
Hab ich hir in meinem C Code was falsch gemacht?

ATMEGA8535 C-Codeausschnitt: (externer Quarz 8Mhz)
//*****************************************************
interrupt [USART_RXC] void uart_rx_isr(void)
{
  Zeichen = UDR;
}

interrupt [USART_TXC] void uart_tx_isr(void)
{
}

//Hauptprogramm
void main(void)
{
DDRB = 0xFF;
PORTB = 0;
DDRD = 0x00;
PORTD = 0;
PORTC_output();
t6963cinit();
LCD_Clear_Graphics();
LCD_Clear_Text();

UCSRB=0xD8;
UBRRL=0x33;

ACSR=0x80;

#asm("sei")

while (1)
      {
        delay_ms(100);
        lcd_printfz(0, 3,"Zeichen:%2x",Zeichen);
        if (PIND.1 == 1)
          {
           putchar('X');
          }
      };
}

Mein uC kann von der RS232 kein Zeichen empfangen.
Wenn ich den Taster (PIND.1) betätige dann bekomme ich auf einmal viele
Daten auf dem PC angezeigt. Liegt es daran, dass ich den taster nicht
entprellt habe? Wie kann ich meinen Taster softwaremäßig entprellen
ohne interrupt Routine? Geht da überhaupt?

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein einfache, wie schlechte Entprellung ist es, nach jedem erkannten
Tastendruck eine Pause von wenigen ms zu machen. Zum testen ok, gegen
Ints aber weit unterlegen.

Welche Baudrate hast du denn eingestellt und welche Frequenz hat dein
Quarz? Evtl ist ja der Fehler so gross, dass nichts richiges ankommen
kann

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Ich kann auf dem Controller sowie Terminalprogramm bzw. Borland
>>Builder
>>C++ Programm nur Müll empfangen.


Wenn es schon nicht mit dem terminalprogramm funktioniert, wieso dann
mit dem C Programm??


Kontrollier evtl mal den quarz und die RS232 einstellungen im µC / PC

Gruss

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende in der Schaltung einen 8Mhz QUarz.

Die Einstellung für die RS232 erfolgt hiermit:
UCSRB=0xD8;
UBRRL=0x33;

Dies habe ich von einem Bekannten so übernommen.
Leider komme ich mit dem Datenblatt vom ATMEGA8535 nicht richtig klar.
Wo geht da eigentlich genau hervor wie ich welche Register mit welchen
Werten befüllen muss ((Baudrate 9600))??

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.