mikrocontroller.net

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


Autor: Mark S. (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: lightninglord (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

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

Autor: holger (Gast)
Datum:

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

Autor: Εrnst B✶ (ernst)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Uhrzeit und Anzahl der Satelliten hatte ich noch vergessen.

MfG Spess

Autor: Matthias Lipinsky (lippy)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Den habe ich mir auch irgendwie eingefangen.

MfG Spess

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.