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'); }; }
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
Ok im Anhang befindet sich zwei Programme mit Quellcode. 1. Borland Builder 2. C#
Das Problem mit Hyperterminal hatten schon einige hier im Forum. Probier mal das Bray Terminal oder ein anderes Programm aus.
Ja aber mit Borland Builder C++ (siehe Sourcecode) funktioniert es ja. Mit C# klappt es nicht (siehe Sourcecode)
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?
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?
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?
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.
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?
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
>>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
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))??
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.