mikrocontroller.net

Forum: Compiler & IDEs UART Zeichen werden nicht korrekt übertragen


Autor: Erdbeer Gulasch (Firma: HTL-Braunau) (erdbeergulasch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Habe ein Problem mit dem Microcontroller ATMEGA 8, ich habe ihn bereits 
erfolgreich mit einer Demo-Version von CodeVision so programmiert, dass 
er mir jedes Zeichen, das ich mittels UART übertragen will, richtig 
überträgt. Allerdings überträgt er mir wenn ich mit dem AVR-Studio 
programmiere (GCC-Plugin) nicht die richtigen Zeichen. In einem Terminal 
Programm sehe ich nur sowas: "eeueeuueeuueeuueeuueeueeuueeuu" usw.usw.
wenn ich eigentlich lauter "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" übertragen 
will. Wisst ihr, was das Problem dabei sein kann?

der Programmcode ist 1:1 von dem CodeVision Assistenten übernommen und 
lautet wie folgt:


#include <avr/io.h>

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

int main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In 
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T 
State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In 
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T 
State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x17;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

   while(1) {
      while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich 
*/
      {
      }

      UDR = 'z';                    /* schreibt das Zeichen x auf die 
Schnittstelle */
   }

   /* wird nie erreicht */
   return 0;
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Wührer wrote:
> der Programmcode ist 1:1 von dem CodeVision Assistenten übernommen
Das ist schon mal das erste Problem. Ich hab keine Lust, jetzt im 
Datenblatt nachsehen zu müssen, was Du da überhaupt konfiguriert hast...

> und lautet wie folgt:
> [...]
> UCSRA=0x00;
> [...]
> UBRRH=0x00;
> UBRRL=0x17;
UBRR = 0x17 bei nicht gesetztem U2X => F_CPU = 3,6864 MHz. Hast Du die 
tatsächlich? Hast Du die Fusebits richtig gesetzt? Die Symptome sehen 
mir nämlich verdächtig nach zu großer Baudraten-Abweichung aus.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Wührer:
> Programm sehe ich nur sowas: "eeueeuueeuueeuueeuueeueeuueeuu" usw.usw.
> wenn ich eigentlich lauter "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" übertragen
> ...
>       UDR = 'z';                    /* schreibt das Zeichen x auf die

Du kannst keine "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" sehen, höchstens 
"zzzzzzzzzzzzzzzz".

Was machst du wirklich?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan "stefb" B. wrote:
> Was machst du wirklich?
...Denn sie wissen nicht, was sie tun...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin Wührer (Firma HTL-Braunau) (erdbeergulasch)

>Programm sehe ich nur sowas: "eeueeuueeuueeuueeuueeueeuueeuu" usw.usw.
>wenn ich eigentlich lauter "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" übertragen
>will. Wisst ihr, was das Problem dabei sein kann?

http://www.mikrocontroller.net/articles/AVR_Checkl...

MfG
Falk

Autor: Icke Muster (Firma: my-solution) (hendi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es trägt zwar nicht zur Lösung bei, interessiert mich aber einfach.
>Du kannst keine "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" sehen, höchstens
>"zzzzzzzzzzzzzzzz".
Ist das wirklich so? Ich hab bis jetzt bei falscher Baudrate immer was 
absolut(zumindest für mich nicht) Nachvollziehbares heraus bekommen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Icke Muster wrote:
> Es trägt zwar nicht zur Lösung bei, interessiert mich aber einfach.
>>Du kannst keine "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" sehen, höchstens
>>"zzzzzzzzzzzzzzzz".
> Ist das wirklich so?

Er sagte ja: 'höchstens'
Damit war gemeint: Selbst wenn alles so funktioniert wie es soll
und die Übertragung absolut fehlerfrei funktioniert, so wird
am anderen Ende niemals nicht "aaaaaaaaaaaaaaa" herauskommen,
sondern da steht dann "zzzzzzzzzzzzzzzzz".
Warum? Ganz einfach: Weil das Programm so programmiert ist, dass
es lauter 'z' wegschickt und nicht lauter  'a'.

> Ich hab bis jetzt bei falscher Baudrate immer was
> absolut(zumindest für mich nicht) Nachvollziehbares heraus bekommen.

Das ist schon richtig. Ist bei mir ganz genauso. Wenn die
Baudrate nicht stimmt, dann kommt auf der Gegenseite Merkwürdiges
raus. Allerdings: meistens kommt da ein wirrer Zeichensalat aus
den merkwürdigsten Buchstaben. Eine Folge von immer dem gleichen
Zeichen ist mir noch nie untergekommen (zumindest erinnere ich
mich nicht daran).

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.