Forum: Mikrocontroller und Digitale Elektronik UART & atmega644


von Sven (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

als Mikrocontroller- Neuling habe ich mich an UART ran gewagt. Seit 
Tagen versuch ich es schon, aber irgend etwas läuft schief. Alle 
Beispiele die ich bis her gefunden habe funktionieren nicht richtig. Ich 
bekomme im Terminal immer irgend welche Sonderzeichen, obwohl dich die 
richtige Baudrate eingestellt habe.

Ich habe einen atmega644 ohne Quarz an meinem Pollin Board hängen.

Das ist mein Code:
1
#define UART_BAUD_RATE 4800 
2
3
4
int main(void)
5
{
6
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
7
  sei();
8
  while(1)
9
  {
10
    uart_puts( "Hallo " );
11
  }
12
13
  return 0;
14
}

Das hier ist der Anfang meines Makefiles:
1
# MCU 
2
MCU = atmega644
3
4
# Main Oscillator Frequency
5
# This is only used to define F_OSC in all assembler and c-sources.
6
F_OSC = 3686400
7
8
9
# Processor frequency.
10
#     This will define a symbol, F_CPU, in all source code files equal to the 
11
#     processor frequency. You can then use this symbol in your source code to 
12
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
13
#     automatically to create a 32-bit value in your source code.
14
F_CPU = 1000000
15
16
17
18
# Output format. (can be srec, ihex, binary)
19
FORMAT = ihex
20
21
22
# Target file name (without extension).
23
#TARGET = test_uart
24
TARGET = main
25
26
# List C source files here. (C dependencies are automatically generated.)
27
SRC = $(TARGET).c uart.c
28
29
.....

Könnte mir jemand einen Tipp geben ???

Danke

von holger (Gast)


Lesenswert?

>Könnte mir jemand einen Tipp geben ???

Sieht nach falscher Baudrate aus.
F_CPU im makefile anzugeben ist nur die halbe Miete.
Die Fuses müssen auch dazu passen.

von Sven (Gast)


Lesenswert?

An denen habe ich noch nichts gemacht. Die stehen noch im 
Auslieferungszustand.

Wie müsste ich den F_CPU einstellen, ich dachte 1000000 wäre richtig?

von holger (Gast)


Lesenswert?

>An denen habe ich noch nichts gemacht. Die stehen noch im
>Auslieferungszustand.
>
>Wie müsste ich den F_CPU einstellen, ich dachte 1000000 wäre richtig?

Ok, ist es dann auch. Stellst du bei Putty auch die richtige
Baudrate, Parity usw ein? Interessant wäre das komplette Programm.

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

holger schrieb:
> Stellst du bei Putty auch die richtige
> Baudrate, Parity usw ein?

Hmmm... Ich denke mal.

von Sascha W. (sascha-w)


Lesenswert?

trotzdem kann die Frequenz des Oszillators so weit abweichen, das im 
Terminal nur Mist ankommt.

Wenn du was zum messen der Frequenz hast, da setze mal die CKOUT-Fuse 
und miss die Taktfrequenz an PB1.


Sascha

von Thomas E. (thomase)


Lesenswert?

Wenn ich das richtig sehe, dann benutzt du Studio 5.
In deiner main.c teilst du dem Compiler den Takt deiner CPU mit.
Und zwar ganz oben vor den includes:

#define F_CPU 1000000UL

Und daß es ein Makefile gibt vergisst du einfach.

Sascha Weber schrieb:
> trotzdem kann die Frequenz des Oszillators so weit abweichen, das im
> Terminal nur Mist ankommt.

4800 bei 1 MHz geht wunderbar. So groß ist die Abweichung nicht.

mfg.

von holger (Gast)


Lesenswert?

>In deiner main.c teilst du dem Compiler den Takt deiner CPU mit.
>Und zwar ganz oben vor den includes:
>
>#define F_CPU 1000000UL
>
>Und daß es ein Makefile gibt vergisst du einfach.

Schwachsinn. Das makefile ist der richtige Platz für F_CPU.
Dann wissen alle Module mit welcher F_CPU sie laufen sollen.

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

Sascha Weber schrieb:
> messen der Frequenz

Zum Messen der Frequenz habe ich leider noch nichts :-(


Thomas Eckmann schrieb:
> Wenn ich das richtig sehe, dann benutzt du Studio 5.

Nein, ich mach das unter Windows in der CMD, mit "make all" und lade es 
dann mit Burn-O-Mat hoch.


Hier die Ausgabe beim Kompilieren:
1
D:\avr\uart>make all
2
3
-------- begin --------
4
avr-gcc (WinAVR 20100110) 4.3.3
5
Copyright (C) 2008 Free Software Foundation, Inc.
6
This is free software; see the source for copying conditions.  There is NO
7
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8
9
10
Compiling: main.c
11
avr-gcc -c -mmcu=atmega644 -I. -gdwarf-2 -DF_CPU=1000000UL    -Os -funsigned-cha
12
r -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa
13
,-adhlns=main.lst  -std=gnu99 -MD -MP -MF .dep/main.o.d main.c -o main.o
14
15
Compiling: uart.c
16
avr-gcc -c -mmcu=atmega644 -I. -gdwarf-2 -DF_CPU=1000000UL    -Os -funsigned-cha
17
r -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa
18
,-adhlns=uart.lst  -std=gnu99 -MD -MP -MF .dep/uart.o.d uart.c -o uart.o
19
20
Linking: main.elf
21
avr-gcc -mmcu=atmega644 -I. -gdwarf-2 -DF_CPU=1000000UL    -Os -funsigned-char -
22
funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-a
23
dhlns=main.o  -std=gnu99 -MD -MP -MF .dep/main.elf.d main.o uart.o --output main
24
.elf -Wl,-Map=main.map,--cref    -lm
25
26
Creating load file for Flash: main.hex
27
avr-objcopy -O ihex -R .eeprom main.elf main.hex
28
29
Creating load file for EEPROM: main.eep
30
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
31
        --change-section-lma .eeprom=0 -O ihex main.elf main.eep
32
c:\WinAVR-20100110\bin\avr-objcopy.exe: --change-section-lma .eeprom=0x00000000
33
never used
34
35
Creating Extended Listing: main.lss
36
avr-objdump -h -S main.elf > main.lss
37
38
Creating Symbol Table: main.sym
39
avr-nm -n main.elf > main.sym
40
41
Size after:
42
main.elf  :
43
section           size      addr
44
.data                8   8388864
45
.text              578         0
46
.bss                69   8388872
47
.debug_aranges      64         0
48
.debug_pubnames    149         0
49
.debug_info        837         0
50
.debug_abbrev      377         0
51
.debug_line        652         0
52
.debug_frame       160         0
53
.debug_str         348         0
54
.debug_loc         356         0
55
Total             3598
56
57
58
59
-------- end --------

Anbei noch ein Bild der Fuses

von Christopher G. (cbg)


Lesenswert?

Was steht in der uart.c? Bitte posten.

von confuse (Gast)


Lesenswert?

nimm mal den fuses den haken bei ckdiv8 weg...

von confuse (Gast)


Lesenswert?

confuse schrieb:
> nimm mal den fuses den haken bei ckdiv8 weg...

confuse schrieb:
> nimm mal den fuses den haken bei ckdiv8 weg...

ach ja...
oder geh in putty auf 600baud

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

600 Baud brachte auch kein lesbares Ergebnis :-(

Habe die Fuses eingelesen, den Harken bei ckdiv8 weg gemacht und zurück 
gespielt. Gleiches Ergebnis, Hyroklüfen.
Also wieder eingelesen und ckdiv8 wieder gesetzt, so wie es vorher war. 
Und siehe da es steht "Hallo" auf der Konsole^^. Obwohl die alte 
Einstellung wieder gesetzt ist.

Also habe ich das Spielchen wiederholt. Noch einmal ckdiv8 weg gemacht 
hochgespielt, eingelesen, wieder gesetzt und hochgespielt. Und nun sind 
wieder Hyroklüfen auf der Konsole.

Also habe ich mir MTTTY http://sites.google.com/site/hb9cuf/ runter 
geladen. Und siehe da, es geht !!!!

Es hat an Putty gelegen ! Die Parameter sind in Putty und MTTTY gleich.

Vielen Dank für eure 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.