www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ringbuffer Problem


Autor: Gerhard Hagenauer (computerkora)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe folgende Aufgabe zu lösen:

Meine digitale Rennbahn, liefer mit 38400 Baud kontinuierlich einen 41 
Byte langen Datenstream, welcher alle möglichen Informationen enthält. 
Jeder Datenstream beginnt mit &HA2 gefolgt von &H01. Bei speziellen 
Ereignissen ist der Datenstream nur 6 Byte lang.

Um dies zu lösen, möchte ich einen Ringbuffer programmieren, der auf der 
einen Seite mittels ISR gefüllt wird und im Hauptprogramm dann 
ausgelesen und bewertet wird.

Leider habe ich irgendwo schon einen grundsätzlichen Fehler, den in 
meinen Testprogramm, das nur zum Austesten des Ringbuffers gedacht ist, 
wird der Index des Ringbuffers in der ISR hochgezählt, auch dann wenn 
ich an RX gar nichts angeschlossen habe - was mache ich da falsch?

Compiler: Bascom
Microcontroler: Mega8
Entwicklungsboard:STK500

lg.
gerhard

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerhard Hagenauer wrote:

> wird der Index des Ringbuffers in der ISR hochgezählt, auch dann wenn
> ich an RX gar nichts angeschlossen habe - was mache ich da falsch?


Ja, das kommt hier öfters.

Garnichts angeschlossen ist großer Bockmist.

Du mußt Dich schon für einen Pegel entscheiden, VCC oder GND. Kann auch 
über nen Widerstand erfolgen (Pullup).


Peter

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man auf
RX_index_in <> RX_index_out
testet kann man sich den "BufferOverrun" (und die damit verbundenen 
Abfragen) sparen.

>Bei speziellen Ereignissen ist der Datenstream nur 6 Byte lang.

Woran erkennt man das?
Ist die Datenrahmenlänge sonst gleich?

Wie Peter schon schrieb:
Eingänge sollte man nie offen lassen.

Autor: Gerhard Hagenauer (computerkora)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach den 2 Startbytes ist im 4 Byte die Info über den 
Spielbetriebsmodus. Wenn diese Byte &H05 (Start) oder &H09 (Reset) dann 
werden 6 Bytes geliefert.

Ansonsten schauts so aus:

Die 2 Startbytes (&HA2,&H01), danach kommt die Info über Spannung an den 
Schienen, Byte 4 gibt Auskunft über Rennbetrieb und Byte 5 wieviele 
Regler angeschlossen sind - danach kommen für jedes Auto 6 Bytes, wobei 
im ersten die Info über Fehlstart ist, dann 4 Bytes die Zeitinfo in 
Tausenstelsekunden seit Startbeginn und zum Abschluß infos zur 
Reglerposition.
Es ist ein konituierlicher Datenstrom, wenn ein Auto die Zielline quert, 
werden die entsprechenden Infos eingeplegt - somit kann man die Runden 
auch mit Zählen, bzw. den Abstand zwischen den Autos errechnen.

lg.
gerhard

Autor: Gerhard Hagenauer (computerkora)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eingang offen ist wirklich ein Anfängerfehler.

Danke

Aber grundsätzlich müßte mein Ansatz schon funktionieren?

lg.
gerhard

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es zu dem Protokoll irgendwo eine Dokumentation?

Autor: Gerhard Hagenauer (computerkora)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja,

im Anhang

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber grundsätzlich müßte mein Ansatz schon funktionieren?
ja.

Welche Rennbahn ist das denn?

Autor: Gerhard Hagenauer (computerkora)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist die Scalextric Sport Digital. Die Bahn hat eine Aux Port an dem 
eben die oben beschriebenen Daten geliefert werden.

Ich bin nun dabei, eben verschiedene Teile (Rundenanzeiger, Ampeln, LCD 
Displays - so like Großbildleinwand) dazuzubauen die man in die Deko gut 
integrieren kann, aber auf der anderen Seite habe ich ein gutes Projekt 
um meine Programmier und Hardwarekenntnisse wieder aufzubessern. Darum 
versuche ich auch verschiedene Bussystem in das Projekt zu integrieren 
(RS232, I2C, CAN und vielleicht auch TCP/IP). Am Ende sollten die ganzen 
HW Teile vom PC aus konfigurierbar sein - mal sehen welche Probleme noch 
so entstehen.

lg.
gerhard

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab es auch gerade gefunden. Das System erinnert etwas an die 
Carrera-Servo.

Schade, dass ich keine Kinder habe (und mich auch nicht wirklich für 
"Motorsport" interessiere)... ;-)

Autor: Gerhard Hagenauer (computerkora)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es es notwendig den Interrupt teilweise zu disablen.

Ich glaube durch den permaenten Datenstrom überholt der Einleseindex 
permanent den Ausleseindex?

lg.
gerhard

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich glaube durch den permaenten Datenstrom überholt der Einleseindex
>permanent den Ausleseindex?

Sollte eigentlich nicht passieren, solange du den Puffer schneller 
bearbeitest als neue Zeichen eintreffen.

Wenn du ihn sperrst, verlierst du ja Zeichen.

Wenn du allerdings mehr Daten mit einer geringeren Datenrate ausgibst, 
als du einliest, provozierst du natürlich einen Pufferüberlauf.

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht solltest du den Controller gegen einen ATMega162 tauschen. 
Der hat zwei Hardware-USARTs. (der Mega8 ist mit der Aufgabe u.U. schon 
etwas überfordert).

Autor: Gerhard Hagenauer (computerkora)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lasse mir für die Tests ans Terminalprogamm Kontrollinfos mit 57600 
ausgeben.

Kann es sein das dieser SW Uart mir mehr Probleme bringt als es als 
Debuginfo liefert?

lg.
gerhard

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann es sein das dieser SW Uart mir mehr Probleme bringt als es als
>Debuginfo liefert?

Möglicherweise... das sind BASCOM-Interna.
Ein Hardware-UART finde ich auf jeden Fall besser. Da weiß man, wie sehr 
die den Controller noch belastet: fast gar nicht...
SoftUART ist schon ziemlich anstrengend für den Controller.

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.