www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 nur empfangen möglich


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Folgendes Problem, ich möchte über die RS232 per MAX232,
Daten senden sowie empfangen mithilfe eines C# Programmes.
Das ganze mit einem Atmega32.

Das senden vom PC an den Controller funktioniert auch Reibungslos, in 
die umgekehrte Richtung funktioniert aber leider gar nichts.

Dazu wäre vielleicht noch zu sagen das ich einen seriell > USB Adapter 
verwende.

Mein Code:
#include <avr/io.h>

#define USART_BAUDRATE 4800
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)

char receive(void)
{
  while ((UCSRA & (1 << RXC)) == 0) {};
  char btes = UDR;
  return btes;
}

void send(char data)
{
  while ((UCSRA & (1 << UDRE)) == 0) {}; 
  UDR = data;
}

int main (void)
{
  
  UBRRH = (BAUD_PRESCALE >> 8);
  UBRRL = BAUD_PRESCALE;


  UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
  UCSRB |= (1<<RXEN) | (1<<TXEN);


    while(1)
  {
      send(222);
  }

}

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Normalerweise kann man die RS232-Seite am PC testen, in dem man die Pins 
Rx und Tx brückt. Dann wird ein vom PC gesendetes Zeichen sofort wieder 
zurück geschickt. Am Windows HyperTerminal sieht man dann, ob ein an der 
Tastatur eingegebenes Zeichen zurück kommt, oder nicht.

Was dein C#-Programm am PC macht, weiß ich nicht. Ob das HyperTerminal 
über USB geht, weiß ich ebenfalls nicht, da nie mit einem 
USB/RS232-Adapter gearbeitet. Aber das wäre doch ein erster Vorschlag 
zur Fehlereingrenzung.

Autor: sghixd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
receive(void) wird nie aufgerufen, der Compiler optimiert es weg, weil 
es nicht benutzt wird.

Gast

Autor: Pascal J. (kallito)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wilhelm Ferkes schrieb:
> Ob das HyperTerminal
> über USB geht, weiß ich ebenfalls nicht, da nie mit einem
> USB/RS232-Adapter gearbeitet.

Also normalerweise wird der Adapter als virtueller COM erkannt und 
funktioniert somit dann auch unter Hyperterminal.

Ich nehme an das dein C# nur auf dem pc läuft. Dann wird doch auch nur 
die main() aufgerufen und in der steht ja ne schleife mit send() (das 
ist der grund wieso der sendet) aber recive() wird nirgends aufgerufen 
also kann er auch nix emfangen.

wie wärs mit
  while(1)
  {
      send(222);
      send(receive());
  }

der sendet dann auch wieder alles zurück was rein kommt, denk ich 
zumindest.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr habt mich vielleicht falsch verstanden.

receive wird im moment auch gar nicht benötigt,
Das empfangen von Daten welche vom PC an den Controller gesendet werden 
stellt eh kein Problem dar.

Das senden vom Controller an den PC geht nur nicht, deshalb auch nur der 
Aufruf von Send.

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:

>Ihr habt mich vielleicht falsch verstanden.

Wieso meinst du, daß dann nicht erst mal die Hardware getestet werden 
soll? Schrittweise Eingrenzung, danach die Software.

>Das senden vom Controller an den PC geht nur nicht,...

Genau!


Pascal J. schrieb:

>Also normalerweise wird der Adapter als virtueller COM erkannt
>und funktioniert somit dann auch unter Hyperterminal.

Danke mal für den Tipp, da ich solch einen Adapter demnächst auch 
benötige.

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.