Forum: Mikrocontroller und Digitale Elektronik Merkwürdige Zeichen AVR Terminal


von Sebastian -. (zettixzehner)


Angehängte Dateien:

Lesenswert?

Guten Tag zusammen,

ich beschäftige mich erst seit kurzer Zeit mit dieser Materie und 
arbeite mit dem STK 500 einem ATmega8 und dem AVR Studio sowie dem AVR 
Terminal.

Nun zu meinem Problem:

Habe das folgende Programm aus dem Buch von Roman Mittermayr auf meinen 
µC geladen und eine Verbindung über die serielle Schnittstelle zum AVR 
Terminal hergestellt. Auf dem Board habe ich die korrekten Pins mit TxD 
und RxD verbunden und bekomme auch eine ausgabe im Terminal allerdings 
nur merkwürdige Zeichen :(



Hier der Quellcode:
1
/*
2
  Serielle Kommunikation 
3
  Minimale Ausführung
4
5
  ATMEGA8/16/32 und kompatibel
6
  STK500 mit dem STK500 Oszillator (3.68 MHz)
7
  Baudrate: 9600 (8N1)
8
9
  Roman Mittermayr
10
  AVRBUCH.DE  
11
*/
12
13
#include <avr/io.h>
14
15
#define  TAKT      3680000
16
#define UART_BAUDRATE  9600
17
18
// Berechnung der Konfigurationsparameter
19
#define UART_SETTING  ((TAKT/16L/UART_BAUDRATE)-1)
20
21
22
void setup_uart()
23
{
24
  /* Baudrate einstellen */
25
  UBRRH = (char) (UART_SETTING >> 8);
26
  UBRRL = (char) (UART_SETTING);
27
28
  /* Empfänger und Sender einschalten */
29
  UCSRB = (1<<RXEN) | (1<<TXEN);
30
31
  /* Asynchron, 8N1 */
32
  UCSRC = (1<<URSEL) | (3<<UCSZ0);
33
}
34
35
void uart_putchar(char c)
36
{
37
  // Warten bis Buffer bereit ...
38
  while (!(UCSRA & (1 << UDRE)))
39
    ;
40
41
  // Senden...
42
  UDR = c;
43
}
44
45
void uart_putstring(char *str)
46
{
47
  unsigned char i;
48
49
  for (i=0;i<255;i++) /* Maximal 255 Zeichen ausgeben ... */
50
  {
51
    if (str[i] != 0)
52
      uart_putchar(str[i]);
53
    else
54
      break; // Ende des Strings erreicht
55
  }
56
}
57
58
59
int main(void)
60
{
61
  /* RS232 einschalten ... */
62
  setup_uart();
63
64
  /* Willkommensnachricht senden ... */
65
  uart_putstring("AVRBUCH.DE - RS232 [OK]...\r\n\r\n");
66
67
  while (1)
68
  {
69
  }
70
71
  return 0;
72
}
Habe auch noch einen Screenshot gemacht(siehe Anhang)

von Lord Z. (lordziu)


Lesenswert?

Sieht auf den ersten Blick nach falschen UART-Settings aus. Überprüfe 
mal Baudrate, Datenbit, Parität und Stoppbits.

Und zwar auf der Controllerseite und der PC-Seite. Die Settings müssen 
auf beiden Seiten gleich sein.

von Thi L. (flothi)


Lesenswert?

Sebastian -.- schrieb:
> // Berechnung der Konfigurationsparameter
>
> #define UART_SETTING  ((TAKT/16L/UART_BAUDRATE)-1)

Sicher? Oder meinst du eher
1
#define UART_SETTING  ((TAKT/(16L*UART_BAUDRATE))-1)
, wie es in AVR-Tutorial: UART geschrieben ist?

vg

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Lord Ziu schrieb:
> #define  TAKT      3680000

Stimmt der wirklich? Also 3,68MHz?

von Sebastian -. (zettixzehner)


Lesenswert?

Also ich habe die Einstellungen verwendet die im Buch geschildert wurden 
und der Quellcode ist ebenfalls von beigelegter CD bei dem Takt bin ich 
mir wirklich sicher der müsste stimmen.

von manoh (Gast)


Lesenswert?

Wenn die UART-Settings alle passen, dann schau mal ob dein µC auch mit 
3,68 MHz läuft.

von Lord Z. (lordziu)


Lesenswert?

Prüf mal, ob die CKDIV8-Fuse gesetzt ist. Das ist ein beliebter Fehler. 
Wenn die Fuse gesetzt ist, wird dein Controllertakt intern nochmal durch 
8 geteilt.

von Sebastian -. (zettixzehner)


Lesenswert?

Hab sogar mit einem Oszilloskop gemessen der läuft mit 3,68Mhz -.-

Ich werd nochmal die UART settings prüfen kann doch nicht sein:(

von Sebastian -. (zettixzehner)


Angehängte Dateien:

Lesenswert?

Lediglich diese 3 Fusebits sind gesetzt sonst keines.

von Thi L. (flothi)


Lesenswert?

Also läuft dein µC mit 1 MHz - schau mal hier rein: 
http://www.engbedded.com/fusecalc

VG

von Lord Z. (lordziu)


Lesenswert?

Genau. Du hast zwar ein Quarz am µC, dessen Schwingungen du mit dem Oszi 
messen kannst, aber intern benutzt dein µC diesen Takt nicht. Sondern 
einen eingebauten 1MHz Takt.

Siehe hierzu: AVR Fuses

von Karl H. (kbuchegg)


Lesenswert?

Sebastian -.- schrieb:
> Hab sogar mit einem Oszilloskop gemessen der läuft mit 3,68Mhz -.-
>
> Ich werd nochmal die UART settings prüfen kann doch nicht sein:(

Da gibts noch viele Möglichkeiten, warum dein µC nicht mit 3.68Mhz 
läuft.

Da hilft nur noch ein Testprogramm
1
#define F_CPU 3680000
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
int main()
7
{
8
  DDRB = 0xFF;
9
10
  while( 1 ) {
11
    PORTB = 0xFF;
12
    _delay_ms( 1000 );
13
    PORTB = 0x00;
14
    _delay_ms( 1000 );
15
  }
16
}

Häng eine LED an PORTB, irgendeinen Pin zb 0.
Wenn die LED exakt 1 Sekunde an ist und danach 1 Sekunde aus, dann hast 
du die Gewissheit, dass dein µC auch tatsächlich mit 3.68Mhz läuft.
Läuft dein µC hingegen mit 1Mhz, dann ist die LED ca 3.6 Sekunden an und 
3.6 Sekunden aus. Diesen Unterschied kann man auch mit freiem Auge 
sehen.

Also: solange die Zeiten nicht 1 Sekunde sind, brauchst du gar nicht 
erst in eine andere Richtung weitersuchen.

von Sebastian -. (zettixzehner)


Lesenswert?

Perfekt 1. Sahne nun läuft alles einwandfrei auch eine Analogwertmessung 
mit Ausgabe war echt nur der blöde Fehler mit dem Takt

Vielen Dank für die Hilfe :)

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.