UART Zeichen werden nicht korrekt übertragen

OP (Firma: HTL-Braunau) #701021
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;
}
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.
Persönliche Seite
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?
(Firma: my-solution)
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.
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.