Kommt mein Mikrocontroller da überhaupt mit ?

Gast #926379
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
Gast #926395
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?
Gast #926403
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
#926407
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
Persönliche Seite #926413
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
Gast #926503
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
Gast #926527
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren