www.mikrocontroller.net

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


Autor: Thomas Tz (tzw17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>UBRRL = 0x51;

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

MfG Spess

Autor: H.Joachim Seifert (crazyhorse)
Datum:

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

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas Tz (tzw17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Tz (tzw17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Otto (Gast)
Datum:

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

Stellt sich die Frage nach den Fuses....

Otto

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Tz (tzw17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass eine LED blinken und rechne aus, wie schnell sie blinken müsste.

Autor: Thomas Tz (tzw17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Tz (tzw17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Thomas Tz (tzw17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas Tz (tzw17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.