PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit UART-Kommunikation



__lissy__
16.05.2013, 13:57
Hallo =)

bin gerade an der UART-Kommunikation. Ich möchte Daten zwischen einem Terminal (PC über RS-232) und meinem
Mikrocontroller (ATMEGA 164 PA) austauschen. Beim senden vom atmega an
den PC sehe ich die Zeichen auch auf dem Terminal, nur das empfangen
klappt nicht so recht =(

Zuerst wollte ich das Ganze Interrupt-gesteuer machen. Das hat aber gar nicht funktioniert...

Jetzt habe ich es mit Polling versucht, allerdings habe ich das auch nicht hinbekommen

Im Anhang mal mein Quellcode
25513

vielen Dank schon mal im Voraus

markusj
16.05.2013, 14:11
Empfangen: Du prüfst nicht korrekt ob das RXC-Bit gesetzt ist. Anstatt dass du das Bit maskierst, veroderst du es mit dem Wert von UCSR0A.

@Interrupts: Du schaltest den Empfangs-Interrupt immer noch an. Das solltest du sein lassen wenn du nicht mit Interrupts arbeitest, ohne zugehörigen Interrupt-Handler startet der AVR sonst bei auftreten des Interrupts (und vorhandener globalen Interruptfreigabe über sei()) neu!

mfG
Markus

__lissy__
16.05.2013, 14:32
danke für deine Hilfe =)

Hab nun die Überprüfung der empfangen-Funktion angepasst: while ( !(UCSR0A & (1 << RXC0)))

Die Interrupts sind nun auch alle deaktiviert.
Danke für die Erklärung, das war echt total hilfreich.

Leider kann ich immer noch nicht senden.

oberallgeier
18.05.2013, 17:04
Hallo lissy,

erstmal herzlich willkommen hier im Forum.


... bin gerade an der UART-Kommunikation ...Ich habe mich irgendwann entschlossen, den Code von Peter Dannegger (http://www.mikrocontroller.net/topic/101472) zu verwenden. Läuft super, interruptgetrieben, mit FIFO uswusf - nur positiv und das beim Senden und Empfangen in meinen doch recht interrupt"verseuchten" Controllern. Einen Nachteil hat das Ganze: Peter schreibt in C so knackig knapp, dass es für mich fast nicht nachvollziehbar war, aber ich bin ich C wirklich nicht besonders gut.

Mittlerweile habe ich für (m)einen mega1284 den Code in Funktion - als Bibliothek. Das könnte ich Dir gern schicken, vielleicht zusammen mit (m)einem Praxisbeispiel (als fauler Mensch wäre das dann für den m1284), wenn Du Dich nicht gleich durch PD´s Code durchwurschteln wolltest.

Ansonsten - viel Erfolg.

__lissy__
21.05.2013, 08:55
Danke für eure Hilfe, es funktioniert nun =)

Den Code von Peter Dannegger werde ich mit trotzdem mal anschauen, das Ganze mit Interrupts zu steuern wär auch schon gut