www.mikrocontroller.net

Forum: Compiler & IDEs UART-Problem mit FleuryLib


Autor: Jey Bee (jeybee)
Datum:

Bewertung
0 lesenswert
nicht 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
#include <avr/io.h>
#include <string.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "lcd.h"
#include "uart.h"

#ifndef F_CPU
#define F_CPU 16000000
#endif

#define UART_BAUD_RATE      4800        //Baud = 4800

int main(void)
{
  DDRD = 0x08;          //PD3 ausgang
  unsigned char c;

  //uart_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU));    //Wenn dabei, hängts    wenn nichtdabei, alles ok
  sei();
  lcd_init(LCD_DISP_ON);

  lcd_clrscr();
  lcd_home();
  lcd_puts("Bereit");        // I am rdy
  _delay_ms(500);


  while(1)
  {  
    c = uart_getc();

    PORTD ^= (1<<PD3);      //Toggle als test

    lcd_clrscr();
    lcd_home();
    lcd_puts("Tetris");      //einfach was als Test
    _delay_ms(300); 
  }
}



Hat jemand eine Idee??

Greez Jey

Autor: gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal:

#define F_CPU 16000000UL

- gerd

Autor: Jey Bee (jeybee)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du die Werte
UART_TX_BUFFER_SIZE

UART_RX_BUFFER_SIZE
geändert? Wenn ja, hast du auf eine Zahl zu Basis 2 geachtet?

- gerd

Autor: Jey Bee (jeybee)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jey Bee (jeybee)
Datum:

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

Ist der Code so im eimer?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jey Bee (jeybee)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.