Hallo, folgendes Problem: Ich habe einen Inkrementalgeber, der über ein Arduino Board mit einem ATMEL ATMEGA328 Impulse für eine Bewegung hoch bzw. runter zählt. Dabei sollen Hin- und Her- Bewegungen über die Zeit als Messdaten aufgezeichnet werden. Als Zeitstempel wird der interne Wert des zur Zeit laufenden Prozessors verwendet. Die Echtzeitausgabe der Werte über die serielle Schnittstelle ist anscheinend zu langsam, sodass die Abtastung nicht mehr schnell genug läuft und Signale verloren gehen. Nun wäre es hilfreich, zum Beispiel 1000 Schritte in ein Array aufzunehmen, also in einer Art Aufzeichnungsphase, der Geber wird dabei bewegt, anschließend wäre die Aufzeichnungsphase vorbei und das Array wird dann über die seriellle Schnittstelle ausgegeben. Diese Lösung funktioniert bereits, allerdings begrenzt der Speicher des Mega328 das ganze erheblich, sodass nur 400 Werte gespeichert werden können innerhalb eines Arrays. Hat jemand eine Idee, das ganze irgendwie anders zu machen, also die Werte irgendwie zu speichern oder ausgeben zu können, ohne die eigentliche Abtastung des SIgnals dabei zu stören? Bin für jeden Tipp dankbar!
So richtig schlau werde ich aus Deinen Angaben nicht. Möchtest Du jeden Impuls mit einem Zeitstempel versehen oder möchtest Du die jeweilige Position z.B. einmal pro Millisekunde ermitteln?
Habe mich präzise genug formuliert. Also an einem Rad wird per Hand gedreht, und zu jedem daraufhin erzeugten Impuls soll eine Zeit mit gepsiechert werden. Beispiel: Ich drehe 5 Schritte nach vorne, Zähler zählt 5 Schritte nach vorne, und speichert zu jedem Wert die jeweilge aktuelle Zeit. Diese entnehme ich einfach aus der Laufzeit des Mikrocontrollers seit Programmstart (dafür ausreichend). Es geht darum, die Daten anschließend als Kurve Schritte über der Zeit aufzutragen.
Ich meinte natürlich "Habe NICHT präzise genug formuliert" Sry ;)
Wenn Du mit der Standard-Baudrate 115,200 kBaud sendest, dann kannst Du ca. alle 0,1 Millisekunden ein Ereignis übertragen. Das sollte bei einer Handverstellung ausreichen.
@ testuser (Gast) >Die Echtzeitausgabe der Werte über die serielle Schnittstelle ist >anscheinend zu langsam, sodass die Abtastung nicht mehr schnell genug >läuft und Signale verloren gehen. Kann passieren. >Hat jemand eine Idee, das ganze irgendwie anders zu machen, also die >Werte irgendwie zu speichern oder ausgeben zu können, ohne die >eigentliche Abtastung des SIgnals dabei zu stören? Mit einem FIFO, der muss nur kurze Burst von Daten puffern. Sinnvollerweise puffert man nur die kurzen Zeitstempel + Richtungsinformation, den String für den UART baut man hinter dem FIFO zusammen, das spart massiv Speicher. MfG Falk
Vielen Dank für eure Antworten. Ich habe jetzt für die genaue Abtastung einen Timer - Interrupt verwendet und außerdem die Übertragung bei der Ausgabe auf 115,200 kBaud gestellt (habe es die ganze Zeit auf 9600 kBaud betrieben, einfach nicht daran gedacht) Danke hier an Frank F. So scheint das ganze nun gut zu laufen, sodass ich mir den FIFO sparen kann. Aber danke für die Info darüber Falk. Super wie schnell man hier Antworten erhält. Danke nochmal.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.