Probleme mit RS232 Zugriff

Gast #250630
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');
      };
}
Gast #250636
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?
Gast #250638
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.
Angehängte Dateien:
Gast #250641
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?
Persönliche Seite #250642
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
Persönliche Seite #250643
>>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
Gast #250644
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

Eine eigene Frage? Dieser Thread ist über 21 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.