Forum: Compiler & IDEs UART-Problem mit FleuryLib


von Jey B. (jeybee)


Lesenswert?

Moin Moin,

Ich hab ein seltsames Problem und weiss nicht mehr weiter:


Ich habe hier ein GPS Modul (EM-411). Dieses ist so programmiert, dass 
es nur noch die $GPGGA Zeile mit nem 4800er Baud sendet.
Nun habe ich ein ATmega16 mit einem LCD, um das ganze auszuwerten.

Ich benutzte sowohl für das LCD als auch für den UART die orginalen 
Peter Fleury librarys.


Nun zu meinem Problem:
Alles funktioniert so lange, bis ich die uart_init(); Zeile 
auskommentiert lasse. Sobald ich diese Zeile jedoch wieder hineinnehme, 
erscheint auf dem LCD nur noch "Bereit". Die LED in der While wird auch 
nicht getoggelt...

Es liegt eindeutig an der uart_init(). Wenn ich die uart_getc(); 
rausnehme, ist nähmlich das selbe Problem noch da.
Mit dem Oszi konnte ich feststellen, dass die Daten vom GPS-Modul 
richtig am RxD Pin des Mega16 ankommen. Es liegt auch nicht an einem 
falschen Baud, da ich mit einer USB<-->UART Brigde die Daten korrekt 
mitlesen kann.
Der Pin ist so auch "alleinstehend". Es ist sonst nichts an dem Pin 
angeschlossen.

Hier die main.c
1
#include <avr/io.h>
2
#include <string.h>
3
#include <avr/interrupt.h>
4
#include <util/delay.h>
5
#include "lcd.h"
6
#include "uart.h"
7
8
#ifndef F_CPU
9
#define F_CPU 16000000
10
#endif
11
12
#define UART_BAUD_RATE      4800        //Baud = 4800
13
14
int main(void)
15
{
16
  DDRD = 0x08;          //PD3 ausgang
17
  unsigned char c;
18
19
  //uart_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU));    //Wenn dabei, hängts    wenn nichtdabei, alles ok
20
  sei();
21
  lcd_init(LCD_DISP_ON);
22
23
  lcd_clrscr();
24
  lcd_home();
25
  lcd_puts("Bereit");        // I am rdy
26
  _delay_ms(500);
27
28
29
  while(1)
30
  {  
31
    c = uart_getc();
32
33
    PORTD ^= (1<<PD3);      //Toggle als test
34
35
    lcd_clrscr();
36
    lcd_home();
37
    lcd_puts("Tetris");      //einfach was als Test
38
    _delay_ms(300); 
39
  }
40
}



Hat jemand eine Idee??

Greez Jey

von gerd (Gast)


Lesenswert?

Versuch mal:

#define F_CPU 16000000UL

- gerd

von Jey B. (jeybee)


Lesenswert?

hab ich auch schon: ändert nichts.

Als Compiler nutze ich AVRstudio4. Dort ist auch der richte 
Controllertyp mit der richtigen Taktfrequenz angegeben.


Any ideas?

von gerd (Gast)


Lesenswert?

Hast du die Werte
1
UART_TX_BUFFER_SIZE
2
3
UART_RX_BUFFER_SIZE
geändert? Wenn ja, hast du auf eine Zahl zu Basis 2 geachtet?

- gerd

von Jey B. (jeybee)


Lesenswert?

Ich verstehe nicht, was es da zu ändern gibt. Das ist ja die standart 
Library von Peter, da gibt es nichts zu ändern. Bisher ging das super...

btw: ich habe die selbe Hardware vor ca 4 Monaten schon benutzt, jedoch 
mit einem anderen GPS Modul (EM-401). Dort ging alles wunderbar


greez Jey

von gerd (Gast)


Lesenswert?

Jey Bee schrieb:
> Ich verstehe nicht, was es da zu ändern gibt. Das ist ja die standart
> Library von Peter, da gibt es nichts zu ändern. Bisher ging das super...

Ok, du hast da nichts geändert, aber der Vollständigkeit halber, ein 
Zitat von Pete Fleuys Seite:

"The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define the 
size of the circular buffers in bytes. Note that these constants must be 
a power of 2. You may need to adapt this constants to your target and 
your application by adding CDEFS += -DUART_RX_BUFFER_SIZE=nn 
-DUART_RX_BUFFER_SIZE=nn to your Makefile."

Also, man kann schon was ändern und manche machen das sogar! ;)

Wenn du wirklich nur das GPS-Modul getauscht hast, dann bleibt ja nicht 
viel als dort nochmal genauer hinzuschauen. Wenn du den Atmega16 
getauscht hättest, wäre mein Tipp auch die Fuses nochmal gegenzuchecken 
(z.B. DIV8, JTAG, etc.)

- gerd

von Jey B. (jeybee)


Lesenswert?

Nun, Fuses sollten okay sein. Kein JTAG, kein Watchdog, alles so wie 
beim vorderen GPS auch ;)

Ist der Code so im eimer?

von Karl H. (kbuchegg)


Lesenswert?

Da gibt es nicht viel, was im Eimer sein könnte.

Klemm mal das GPS ab, dann dürfte sich ja auf der UART nichts mehr tun 
und uart_getc() kommt ständig ohne Zeichen sofort wieder zurück.

von Jey B. (jeybee)


Lesenswert?

Ich habe jetzt mal die UART Leitung zum uC getrennt und siehe da->  es 
geht... wo ist jetzt das problem?

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.