RS232 (Programmierung in C) funktioniert nicht ganz

Gast #2794129
Hallo zusammen,

ich arbeite an einer RS232 Schnittstelle. Und zwar würde ich gerne eine 
Echo Funktion am Terminal erzeugen. Ich arbeite momentan noch am STK500 
mit einem ATmega16 mit externem Oszillator (8MHZ).

Die Fuses bei SUT_CKSEL hab ich daher mit  EXTRCOSC_8MHZ_12MHZ_18CK_64MS 
eingestellt. Unterscheidet sich auch beim LED-Blink Test vom internen 
1MHZ Takt - funktioniert also soweit ich annehmen kann.

Ok was wohl eher das Problem ist: Der Quellcode - siehe Anhang.


Im Terminal (HTerm) hab ich die gleichen Einstellung wie im Quellcode 
verwendet. 4800 Baud 8Bit 1 Stop Bit

Was läuft da schief? Bekomme nichts angezeigt.

Mit dem Code aus dem AVR-GCC-Tutorial hab ichs auch schon ausprobiert, 
aber irgendwie passiert nichts.

Könnt Ihr mir weiterhelfen?
Angehängte Dateien:
Gast
Hatte ein ähnliches Problem mit Hterm und RS232, allerdings auf einem 
STM32.

Quellcode hat funktioniert, Schnittstelle vom PC auch, aber es kam kein 
Echo zurück.

Die Lösung war, bei "Send on Enter" im Hterm (Neben ASCII,Hex,Dec,Bin) 
"CR" einzustellen, und schon kam das Echo ohne weiteres am PC an.
Gast
Also ich habe jetzt beide Varianten ausprobiert. Leider ohne Erfolg.
Da es auch mit dem Überbrücken nicht geklappt hat muss es ja eigentlich 
ein Terminal Problem sein.

Das Flashen funktioniert ja problemlos über die Schnittstelle..

Anbei noch ein Sreenshot vom HTerm.
Angehängte Dateien:
Gast
Achso eine Sache noch. Wenn ich das Entwicklungsboard einschalte kommt 
ein einzelnes Bit am Terminal an. Aber immer nur einmal beim 
Einschalten.

Das war aber auch ohne das Überbrücken schon so..
Angehängte Dateien:
Gast
Hi

>Das Flashen funktioniert ja problemlos über die Schnittstelle..

- Benutzt du auch die RS232 Spare Buchse vom STK?
- Portpins korrekt mit Stiftleiste RS232 Spare verbunden?

MfG Spess
Gast
Ok über den Jumper RXD TXD RS232 SPARE funktioniert die Überbrückung und 
ich erhalte mein Echo Signal. Ohne den Junper und mit Verbindung über 
RS232 SPARE funktioniert der Quellcode aber auch nicht..

Hat noch jemand einen Tipp für mich?
Gast
Also was mir jetzt noch aufgefallen ist: Ich hatte den gesamten Port auf 
Eingang stehen - somit kann zwar RXD funktionieren, nicht aber TXD. Habs 
nun so geändert:

DDRD = (1<<PD1) | ~(1<<PD0) | ~(1<<PD2) | ~(1<<PD3); //Eingänge: 
RXD(PD0) INT0(PD2) INT1(PD3) - Ausgänge: TXD(PD1)
Gast
Hi

>Also was mir jetzt noch aufgefallen ist: Ich hatte den gesamten Port auf
>Eingang stehen - somit kann zwar RXD funktionieren, nicht aber TXD. Habs
>nun so geändert:

Mit Setzen der RXEN- und TXEN-Bits in UCSRB übernimmt die USART die 
Kontroller über die PINs. Was in DDRD steht ist irrelevant.

MfG Spess
Gast
Davon abgesehen: Das hier
>DDRD = (1<<PD1) | ~(1<<PD0) | ~(1<<PD2) | ~(1<<PD3); //Eingänge:
tut imho nicht was du willst. Alles außer 1<<PD1 streichen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.