Forum: Mikrocontroller und Digitale Elektronik AVR: Debug-Ausgabe fehlt


von Pete K. (pete77)


Lesenswert?

Hallo zusammen,

ich versuche, einen m168 unter Ubuntu zu programmieren mit Eclipse, was 
auch soweit funktioniert.

Allerdings bekomme ich keine serielle Ausgabe über UART hin.

Der Code wird fehler- und warnungsfrei übersetzt, ich habe einen MAX3232 
an /dev/ttyS0. Wenn ich RX und TX verbinde (loopback) dann kann ich vom 
PC z.B. eine Datei senden und sehe die LEDs auf dem MAX-Adapter blinken.

Die LED an PB0 leuchtet auch, daher vermute ich mal, dass der m168 bis 
zu der Stelle kommt, allerdings hätte ich auch an /dev/ttyS0 eine 
Ausgabe erwartet.

Der m168 läuft auf internen 8 Mhz und ist mit 10kR VCC an Reset sowie 
einem 100nF Kerko zwischen VCC und GND direkt an den Pins beschaltet.
Weiterhin hängt noch ein OLED an I2C was ich programmieren möchte, aber 
das ist dann die nächste Geschichte.

Was habe ich übersehen oder falsch gemacht?

Hier der Code:
1
int main(void)
2
{
3
    _delay_ms(500);
4
    DDRB |= (1 << PB0);  //LED an PB0
5
6
    uart_init(9600);
7
    sei();
8
9
    uart_puts("**** Start ****\n");
10
    PORTB |= (1 << PB0);
11
12
    i2c_init();
13
    uart_puts("Nach i2c_init \n");
14
[...]
15
}

: Bearbeitet durch User
von THOR (Gast)


Lesenswert?

Mach nach uart_puts ein kurzes delay_ms und dann die LED wieder aus um 
zu sehen ob der Code da hängt.

Falls Oszi vorhanden: Guck, ob da Bits rausgeschickt werden.

von Pete K. (pete77)


Angehängte Dateien:

Lesenswert?

Eigentlich scheint alles zu stimmen, nur die Ausgabe sieht komisch aus. 
Als ob die Baudrate nicht korrekt ist.
Eigentlich sollten bei 8Mhz doch 9600 baud funktionieren. (siehe Bild)

von Bastian W. (jackfrost)


Lesenswert?

Geht es wenn du Minicom auf 1200 Baud stellst ? Wenn ja schau ob du 
nicht die clkdiv8 Fuse gesetzt ist.

Gruß JackFrost

von Pete K. (pete77)


Lesenswert?

Nein, 1200 geht nicht. Die LED leuchtet etwa 1 sek. daher denke ich 
passt das. Die clkdiv fuse ist auch nicht gesetzt.

von Bastian W. (jackfrost)


Lesenswert?

Dann ist es am einfachsten, du postes den ganzen Code. Sonst wird es 
schwer mit der Fehler suche.

Gruß JackFrost

von Rainer B. (katastrophenheinz)


Lesenswert?

An welcher Stelle und auf welchen Wert ist F_CPU gesetzt?

Die internen 8Mhz aus dem RC-Oszillator können zu ungenau sein.
Musst du ggf über OSCCAL-Register abgleichen. Dazu brauchst du aber 
wieder eine bekannte, externe Referenz. Einfacher wirds mit einem 
externen Quarz als taktgeber. Da sind die nominell 8MHz auch ziemlich 
genau 8 MHz. Was beim internen RC-Oszillator nun mal nicht der Fall ist.

von Georg G. (df2au)


Lesenswert?

Falls du die Fleury Lib benutzt hast, ist dein uart_init() falsch. Da 
gibt es extra ein Macro für die Baudrate.

von Pete K. (pete77)


Lesenswert?

@Georg: Danke für die Info, das war's! Du hast Dir ein Bier verdient :-)
Danke!!!

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.