Forum: Mikrocontroller und Digitale Elektronik AVR mit seltersamen Zeichen


von P. F. (pfuhsy)


Lesenswert?

Hallo,

was mach ich jetzt schon wieder falsch ?
Über UART sollte der AVR eigentlich "Hallo myAVR!" ankommen, stattdessen 
kommt "À8 8ø8À8 8ø8À8 8ø8À8 8ø8À8". Das Problem ist, so wie die 
Schaltung verschaltet und eingestellt ist, hat es funktioniert bevor ich 
an den Fuses rumgespielt habe. Die Baud-Einstellung ist 9600.

Hat jemand ne Idee warum da son Murks kommt ???

1
#define F_CPU 3686400
2
#include <avr\io.h>
3
//----------------------------------------------------------------------
4
void uartInit()
5
{
6
  UBRRL  = 23;           //9600Baud siehe Baudratentabelle
7
  UCSRB = 0x08;           //Sender enable UCSRB / UCR bei z.B.: 2313
8
}
9
//----------------------------------------------------------------------
10
void uartPutChar(char data)
11
{
12
  //warte bis UDR leer ist UCSRA / USR bei z.B.: 2313
13
  while (!(UCSRA&32));
14
  //sende
15
  UDR=data;
16
}
17
//----------------------------------------------------------------------
18
void print(const char buffer[])
19
{
20
  for (int i=0;buffer[i]!=0;i++)
21
    uartPutChar(buffer[i]);
22
}
23
//======================================================================
24
main ()
25
{
26
  uartInit();
27
  while (true) // Mainloop
28
  {
29
    print("Hallo myAVR! ");
30
  }
31
}
32
//======================================================================

von Max (Gast)


Lesenswert?

Fußes -> Takt geändert -> dummkopf

von P. F. (pfuhsy)


Lesenswert?

Ja ok aber welchen ?
Ich hab ein 3,6864 Mhz-Quarz dran und programmiere mit myAvr WordPad.

von Ralf (Gast)


Lesenswert?

Peter F. schrieb:
> Ja ok aber welchen ?
> Ich hab ein 3,6864 Mhz-Quarz dran und programmiere mit myAvr WordPad.
Dreh' mal etwas deinen Bildschirm, dass ich mal draufsehen kann! :-(

von P. F. (pfuhsy)


Lesenswert?

Scherzkeks...Ich habs gefunden: Ext. Cristal/Resonator heißt das ding.

Danke.
Gruss

von Markus O. (pipimaxi)


Lesenswert?

Max schrieb:
> Fußes -> Takt geändert -> dummkopf

Fußes? wär ma bissl vorsichtig mit dummkopf...
auf was hast du die Fuses denn momentan stehen?

von bitte löschen (Gast)


Lesenswert?

Möglicherweise hast Du von externem Quarz auf internen RC-Oszillator 
umgestellt.

Der Murks kommt, weil die Bits mit einer anderen Geschwindigkeit 
übertragen werden, als der Empfänger es erwartet. Die Geschwindigkeit 
muss genau stimmen, sonst liegen die Bits nicht in den vorgesehenen 
Zeitfensterchen und es kommt eben Murks raus.

Leider schreibst Du nicht, um welchen AVR es sich handelt, sonst könnte 
ich Dir eine Seitenzahl im Handbuch nennen. Beim ATmega8 ist es die 
Seite 26. Ansonsten suche mal nach "Clock Sources".

von bitte löschen (Gast)


Lesenswert?

Zu spät..

von Thomas E. (thomase)


Lesenswert?

Markus Oberle schrieb:
> Fußes? wär ma bissl vorsichtig mit dummkopf...

Is' ja nur ein kleiner Dummkopf.

Philipp Klostermann schrieb:
> Möglicherweise hast Du von externem Quarz auf internen RC-Oszillator
> umgestellt.

Oder "CKDIV8" gesetzt. Dann sendet er jetzt mit 1200.

mfg.

von Thomas E. (thomase)


Lesenswert?

Philipp Klostermann schrieb:
> Zu spät..

Ich auch.

von bitte löschen (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Oder "CKDIV8" gesetzt. Dann sendet er jetzt mit 1200.

Er hat 26 Zeichen bekommen und 13 Zeichen gesendet. Das würde eher auf 
4800 (oder etwas ähnliches) hindeuten, aber:
Wenn der Empfänger die Bits schneller erwartet, als sie kommen, und das 
mit etwa doppelter (oder mehr) Geschwindigkeit, dürften keine sich 
abwechselnden Bits empfangen werden, da ein Bit des Senders mehrfach 
empfangen wird.

Der empfangene String enthält Leerzeichen, also 0x20 binär 00100000.
Ein Zeichen mit nur einem Bit. Wo kommt das her? Desgleichen die "8", 
binär 00111000. Hier wurde eine ungerade Zahl (3) gleicher Bits 
empfangen.

Es kann natürlich auch sein, dass der String bei einem der vielen 
Schritte auf dem Weg vom Schnittstellentreiber bis hier ins Forum 
verfälscht wurde, z.B. Steuerzeichen (BS, Bell, etc..) verschluckt 
wurden oder Teile nach einem CR überschrieben wurden, und er eigentlich 
viel länger ist, als im Eingangsposting. Dann wäre die genau doppelte 
Länge ein Zufall.

Irgendwie unstimmig, das Ganze.

@Peter: Hast Du Dir zufällig die Fuses-Einstellungen vorher und nachher 
gemerkt oder aufgeschrieben?

von Jobst M. (jobstens-de)


Lesenswert?

Ich würde einfach mal alle Baudraten zwischen 600 und 19200 
durchprobieren - wenn kein Scope zur verfügung steht.

Oder LED dran und Kamera-Scope :-)
Beitrag "Re: Elektronik-Fotos"
Allerdings sollte man sich dann eine Referenz-LED daneben setzen ...


Gruß

Jobst

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.