Forum: Mikrocontroller und Digitale Elektronik Problem mit dem Senden über RS232


von Thomas T. (tzw17)


Lesenswert?

Servus,

ich hab einen ATMEGA32 und ein AVR-Entwicklungsboard mit 
ISP-Schnittstelle und einer RS232 Schnittstelle!!

Wollte jetzt mal versuchen ein Zeichen vom Microcontroller zum Computer 
zu senden!!
Zum Testen hab ich als erstes eine Brücke zwischen RX und TX gesetzt und 
mit dem Terminal einen Text gesendet und es ist auch zurückgekommen, 
aber wenn ich jetzt meinen Microcontroller einbaue und mein Programm 
rüberlade kommen keine Zeichen an!!

Das Programm sieht folgender maßen aus:

Habe die Schnittstelle folgender maßen eingestellt:
UBRRH = 0x00;
UBRRL = 0x51;  Da ich mit einer Baudrate von 9600 und einem externen 
Quarz von 8MHz arbeite!!

UCSRC = 0x86; für 8 Datenbits!!
UCSRB = 0x18; für senden und empfangen!!

Dann hab ich zum senden eines Zeichen:

UDR = 'Z' geschrieben!!

Kann mir einer vielleicht sagen was ich falsch gemacht habe oder was ich 
vergessen habe!!

MFG
Thomas

von spess53 (Gast)


Lesenswert?

Hi

>UBRRL = 0x51;

Das ist 81D, du brauchst aber für 9600Bd  51D (0x33).

MfG Spess

von H.Joachim S. (crazyhorse)


Lesenswert?

!! gibts in C nicht, vielleicht liegt es daran :-)

von Jupp (Gast)


Lesenswert?

statt die register mit irgendwelchen nicht nachvollziehbaren zahlen zu 
laden solltest besster die bitseinzeln setzt.

REGISTER = 1 << BIT1 | 1 << BIT2 ...

hast du auch einen pegelwandler dran?

von Thomas T. (tzw17)


Lesenswert?

spess53 wrote:
> Hi
>
>>UBRRL = 0x51;
>
> Das ist 81D, du brauchst aber für 9600Bd  51D (0x33).
>
> MfG Spess

Tut mir leid hab mich verschrieben meinte UBRRL = 51!!
Also ohne 0x!!

MFG
Thomas

von Thomas T. (tzw17)


Lesenswert?

Jupp wrote:
> statt die register mit irgendwelchen nicht nachvollziehbaren zahlen zu
> laden solltest besster die bitseinzeln setzt.
>
> REGISTER = 1 << BIT1 | 1 << BIT2 ...
>
> hast du auch einen pegelwandler dran?

Das mit dem Zuordnen über die Bitmanipulation das weiß ich schon aber 
ich mach das lieber mit Zahlen!!

Einen Pegelwandler hab ich nicht dran geht direkt vom Computer zur 
eintwicklungsplatine und von dort auf einen Chip der es dan in TX und RX 
umwandelt!!

MFG
Thomas

von Otto (Gast)


Lesenswert?

> Da ich mit einer Baudrate von 9600 und einem externen
> Quarz von 8MHz arbeite!!

Stellt sich die Frage nach den Fuses....

Otto

von H.Joachim S. (crazyhorse)


Lesenswert?

tja, dann geht es jetzt in Rätselraten über.
Vielleicht mal das komplette Programm? Evtl. ser. Interrupts aktiviert, 
aber keinen handler dafür?
Ich tippe aber eher auf nichtgesetzte fuse-Bits, d.h. das Teil läuft 
trotz angeschlossenem Quarz noch mit dem internen Oszillator, merkt der 
nämlich nicht selbst.

von Justus S. (jussa)


Lesenswert?

Thomas Tz wrote:


> Das mit dem Zuordnen über die Bitmanipulation das weiß ich schon aber
> ich mach das lieber mit Zahlen!!

und erwartest, dass die Leute hier gefälligst das Datenblatt 
runterladen, damit sie sehen können, was du setzt...

> Einen Pegelwandler hab ich nicht dran geht direkt vom Computer zur
> eintwicklungsplatine und von dort auf einen Chip der es dan in TX und RX
> umwandelt

kann es sein, dass du keine Ahnung hast, was ein Pegelwandler ist?

> !!

einmal reicht völlig, und es gibt auch noch andere Satzzeichen in der 
deutschen Sprache

von Thomas T. (tzw17)


Lesenswert?

H.joachim Seifert wrote:
> tja, dann geht es jetzt in Rätselraten über.
> Vielleicht mal das komplette Programm? Evtl. ser. Interrupts aktiviert,
> aber keinen handler dafür?
> Ich tippe aber eher auf nichtgesetzte fuse-Bits, d.h. das Teil läuft
> trotz angeschlossenem Quarz noch mit dem internen Oszillator, merkt der
> nämlich nicht selbst.

Kann schon sein hab die Fuses-Bits auf Ext. Crystal/Resonator High 
Freq.: Startup Time 258CK+64 gestellt und die ISP-Frequenz auf 2MHz 
gestellt!!

Kann man das nicht irgendwie feststellen ob er mit dem 8MHz Quarz läuft 
oder nicht?

MFG
Thomas

von Otto (Gast)


Lesenswert?

Lass eine LED blinken und rechne aus, wie schnell sie blinken müsste.

von Thomas T. (tzw17)


Lesenswert?

Hier mal das ganze Programm:

#include <avr/io.h>
#include <stdio.h>
#include <avr/delay.h>


int main (void)
{



UBRRH = 0;
UBRRL = 51;
UCSRC = 0x86;
UCSRB = 0x18;

while(1)
UDR = 's';


return 0;
}

Ich stell es noch um und bau noch die Bitmanipulation ein das es besser 
zu lesen ist!

MFG
Thomas

von Thomas T. (tzw17)


Lesenswert?

Otto wrote:
> Lass eine LED blinken und rechne aus, wie schnell sie blinken müsste.

Aber blinkt die LED dan nicht so schnell das sie dan dauernd an ist weil 
man das nicht mehr sieht das blinken?

MFG
Thomas

von Otto (Gast)


Lesenswert?

1. Nein - berechne das Blinken auf 1Hz bei 1MHz Takt blinkt sie mit 8 Hz 
bei 8MHz Takt
2. Warte doch besser, bis das Zeichen auch gesendet wurde.

von H.Joachim S. (crazyhorse)


Lesenswert?

ok, wenn ISP mit 2 MHz funktioniert, läuft der Chip auch mit ext. Quarz.
Und, wie schon gesagt, frage vor dem Schreiben ins UDR ab, ob die UART 
überhaupt ein neues Zeichen aufnehmen kann.
Kannst aber erstmal auch mit delay arbeiten, bei 9600Baud braucht ein 
Zeichen etwas mehr als 1ms.
Ausserdem fehlt bei dir noch eine Klammerung:
int main (void)
{



UBRRH = 0;
UBRRL = 51;
UCSRC = 0x86;
UCSRB = 0x18;

while(1)
 {UDR = 's';
 delay_ms (2);
 }

return 0;
}

von Thomas T. (tzw17)


Lesenswert?

Passiert immmer noch nichts!!
Nur wenn ich RX und TX unterm Betrieb verbinde kommen lauter komische 
Zeichen an!!
Die sich aber auch ändern wenn ich ein anderes Zeichen sende!!

MFG
Thomas

von Otto (Gast)


Lesenswert?

> Nur wenn ich RX und TX unterm Betrieb verbinde

RX und TX vertauscht?

> kommen lauter komische Zeichen an!!

Einstellung Terminalprogramm: Startbit, Stopbit, Parität?

von Thomas T. (tzw17)


Lesenswert?

Otto wrote:
>> Nur wenn ich RX und TX unterm Betrieb verbinde
>
> RX und TX vertauscht?
>
>> kommen lauter komische Zeichen an!!
>
> Einstellung Terminalprogramm: Startbit, Stopbit, Parität?

Habs gefunden hab doch tazächlich TX und RX vertauscht!!
Trotz das ich nach Plan angeschlossen habe!!
Hab aber festgestellt das der Plan zum Entwicklungsboard nicht stimmt 
den da ist es anders herum eigezeichnet!!

MFG
Thomas

von H.Joachim S. (crazyhorse)


Lesenswert?

Tja, das ist ein altes Problem :-)
Entweder man bezeichnet Rx und Tx mit dem eigenen Signal oder mit dem, 
was daran angeschlossen werden soll..., das wird dir immer wieder 
begegnen. Beide Ansätze sich richtig und logisch :-)

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
Noch kein Account? Hier anmelden.