Probleme mit RS232 Zugriff

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren