Forum: Mikrocontroller und Digitale Elektronik Kommt mein Mikrocontroller da überhaupt mit ?


von Mark S. (Gast)


Lesenswert?

hallo Leute,

ich lese gerade von einer GPS Maus über den UART die Daten auf einen AVR 
Mikrocontroller ein. Dafür verwende ich im wesentlichen den Sourcecode 
unter http://www.mikrocontroller.net/attachment/highlight/31757.

Die Passagen mit dem SPI-Port hab ich dabei rausgeworfen. Dafür hab ich 
noch eine Bibliothek für ein Display eingefügt. Die vom GPS über die 
RS232 Verbindung geschickten Daten hab ich mir dann gleich auf dem LCD 
anzeigen lassen.
Das funktioniert noch recht gut.

Wenn ich jetzt aber anfange die GPS Daten zu analysieren, dazu die 
string.h einbinde und beispielsweise ein strcmp verwende - läuft gar 
nichts mehr und ich krieg massig Buffer Overruns.

Kann irgendwie nicht richtig glauben, dass es am Code selber liegt. Mein 
Verdacht geht in die Richtung, dass ich mit meinem Controller ein 
bisschen zu langsam bin, denn entgegen dem Codebeispiel von oben lasse 
ich meinen Controller nur mit 4MHz laufen und meine GPS Daten kommen mit 
4800 baud.

Ach ja und ich verwende die uart und lcd Bibliotheken von Peter Fleury.

Was meint ihr dazu ?

danke im voraus
Mark

von Gast (Gast)


Lesenswert?

Die String-Funktionen sind teilweise seeeehr rechenintensiv und wenn dir 
dann noch der UART-Interrupt dazwischen funkt, kann es schon mal schnell 
Probleme geben.

Kannst du nicht auch ohne die Textvergleiche auskommen?

Ich vermute mal, dass das Gerät mobil betrieben werden soll. Wäre es 
trotzdem eine Alternative, den AVR mit 16 MHz (oder was dein Typ maximal 
hergibt) zu betreiben?

von lightninglord (Gast)


Lesenswert?

Wie schnell ist den die Akualisierungszeit deines GPS, denn wenn du die 
Daten nur Anzeigen lassen willst, würde es doch genügen wenn du 1-2mal 
in der Sekunde das Display refreshst. Und solange deine Strings 
verglichen werden einfach den TX-Interupt disablen.

Grüßle lightninglord

von Peter D. (peda)


Lesenswert?

Mark S. wrote:

> Kann irgendwie nicht richtig glauben, dass es am Code selber liegt.

Höchstwarscheinlich doch.

Du hast irgendwo Wartezeiten drin, die die CPU mit Nichtstun belasten 
oder Funktionen, die Du viel zu häufig aufrufst.

Z.B. das LCD ist ein beliebter Kandidat, um CPU-Zeit zu vernichten.
Nur alle 0,5s nen neuen Text darzustellen reicht völlig aus, schneller 
kann eh keiner lesen.

Ich würde auch der UART nen FIFO spendieren, die nur 3 Byte 
Empfangspuffer sind sonst schnell voll.


Peter

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Mark S. wrote:
> hallo Leute,
>
> ich lese gerade von einer GPS Maus über den UART die Daten auf einen AVR
> Mikrocontroller ein. Dafür verwende ich im wesentlichen den Sourcecode
> unter http://www.mikrocontroller.net/attachment/highlight/31757.

Ich vermute da (ohne mir den Code anzusehen) eher einen 
Programmierfehler. Sowas wie strcmp kann nicht rechenintensiv sein, das 
glaube ich mal garnicht. Eigentlich sollte sich der Controller bei 
dieser Anwendung in erster Linie langweilen.

Is lustig wie wenig Vorstellungen manche Anfaenger von der Leistung von 
solchen CPUs haben :D

von holger (Gast)


Lesenswert?

>Ich vermute da (ohne mir den Code anzusehen) eher einen

Lohnt sich auch nicht. Die kritischen Stellen stehen
im Code den er nicht gepostet hat.

von Εrnst B. (ernst)


Lesenswert?

"Buffer Overruns"?

Du hast schon die strncmp_P Funktionen verwendet, und die konstanten 
Vergleichsstrings im Flash abgelegt, oder?

Ansonsten kopiert dein AVR beim Start erstmal alle diese Strings in das 
RAM, und das wird dann ganz schnell knapp.

von spess53 (Gast)


Lesenswert?

Hi

Also mein GPS (ATMEGA128) macht zwischen 2 NMEA-Strings folgendes:

NMEA-String decodieren
Länge,Breite,Höhe,Geschwindigkeit,Richtung(Grafisch) darstellen
Kartenausschnitt(240x128 Pixel) berechnen und anzeigen
Position im Kartenausschnitt anzeigen
Tasten abfragen
Umgebungshelligkeit messen
PWM für Hintergrundbeleuchtung einstellen
und Däumchen drehen

Also es ist massig Zeit.

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

Uhrzeit und Anzahl der Satelliten hatte ich noch vergessen.

MfG Spess

von Matthias L. (Gast)


Lesenswert?

>und Däumchen drehen

Vielleicht braucht das viel Rechenzeit?

Ich habe in meinem PC auch einen Task, der hat immer 99% Rechenzeit. Den 
kann ich aber nicht abbrechen. Keine Ahnung warum. Der heißt 
"Leerlaufprozes"..


duck und weg

von spess53 (Gast)


Lesenswert?

Hi

Den habe ich mir auch irgendwie eingefangen.

MfG Spess

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.