Hallo liebe Gemeinde,
ich habe folgendes Problem:
Ich habe ein C programm das ein Int Array über die uart schnittstelle
einließt. Das ganze läuft auf dem Atmega8 Dip, kompiliert habe ich es
mit AVR-GCC unter Linux. Auf der Dip version des mega8 funktioniert das
super.
Als also mein Prototyp fertig war habe ich mir eine Platine mit mega8 in
smd Bauform und einen FT232 als RS232-TTL Wandler gebaut. Als die
Platinen ankamen habe ich natürlcih gleich alles zusammen gebaut und
dann die software auf den mega geladen. Doch dann kam die herbe
Enttäuschung, es funktionierte genau nichts.
Nach einiger zeit habe ich versucht die Kommunikation mit Bascom
zutesten.
Also habe ich mir schnell ein kleines Bascom Programm geschrieben das
die Zeichen einließt und bei einem "a"ein "b" zurück sendet. Das hat
alles wunderbar funktioniert. Ich kann also ein Hardwarefehler
ausschließen.
Hier ist der Abschnitt aus meinem Programm mit dem ich ein Zeichen
einlese:
1 | ...
|
2 | #define BAUD 9600UL // Baudrate
|
3 |
|
4 | // Berechnungen
|
5 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
6 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
|
7 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
|
8 | ...
|
9 |
|
10 | uint8_t getc()
|
11 | {
|
12 | while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar
|
13 | {
|
14 | }
|
15 | return UDR;
|
16 | }
|
17 | ...
|
18 |
|
19 | z3 = getc();
|
20 | ...
|
Was mich wie gesagt verwirrt ist das dieses Progeamm auf der Dip version
des mega8 einwandfrei funktioniert, aber auf der tqfp version nicht.
Ich hoffe ihr könnt mir helfen.
Alex