UART & atmega644

Gast #2356228
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
Angehängte Dateien:
Gast #2356248
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.
#2356271
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.
Gast #2356280
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.
Gast #2356289
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
Angehängte Dateien:
Gast #2356469
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 !!!!!!
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren