Hallo zusammen, Ich bastele gerade an einer Art Datenlogger und brauche ein bisschen Hilfe. Ich habe einen Wegpositionssensor, den ich über SSI auslesen kann. Ich möchte diesen Sensor für etwa 1 Sekunde im Takt von mind. 10ms, besser 1ms auslesen, und die Positionsdaten über den UART ausgeben. Ich muß aus dem Sensor 25bit (also effektiv 32bit) auslesen, obwohl ich tatsächlich nur 16 verwende. SPI läuft momentan bei ca 1MHz. Im Prinzip funktioniert alles: 1. SSI kann ich über SPI und einen MAX490 (für kurze Strecken gehts sogar ganz ohne) auslesen 2. Ausgabe über den UART: Da habe ich schon einige Erfahrungen mit FTDI 3. Takt: Der Timer ist dein Freund Leider ist der UART zu langsam, um mit 1ms mitzuhalten. Daher speicher ich momentan alle Daten im internen ROM zwischen, um sie anschließend auszugeben. In meinem extrem einfachen Aufbau habe ich im Moment einen Atmega8, dessen ROM natürlich extrem klein ist (ich glaube 2kB). Was soll ich tun, um die Daten zwischenzuspeichern? - externen ROM? Da habe ich keine Erfahrung? Kennt Ihr Schaltungen? Chips? Am besten über SPI? Geht das? - ich hab irgendwo gelesen, dass es einfacher sein soll eine SD-Karte anzuschließen als SRAM? - Andere Ideen sind natürlich auch willkommen... Danke im Voraus Schorsch
Wenn ich auf die schnelle richtig gerechnet habe, möchtest Du 1000 * 4 Bytes = 4 KByte speichern. Das sollte für heutige uC wirklich kein Problem sein. Hast Du mal geschaut, ob es nicht einfacher ist, auf einen größeren uC umzusteigen, der z.B. mindestens 8 KByte RAM beinhaltet, als selber zu versuchen, jetzt irgendwas zu erweitern oder gar eine (schwierige) SD-Karte anzuschließen, die dir dann im Extremfall vielleicht (manchmal) zu langsam ist... Du speicherst die Daten übrigens nicht im ROM: ROM = Read Only Memory (dort kannst du nur lesen) RAM ist der richtige Speicherort für deine Daten
Schorsch schrieb: > Leider ist der UART zu langsam, um mit 1ms mitzuhalten. Dann machst du irgendetwas falsch. Wenn dein Sensor jede Millisekunde 25 Bit liefert, sind das incl. Overhead für 8-Bit Transfer und Start-/Stopbits so um die 40 kBit/s. Mit 57.6 kBd, besser noch 115.2 kBd solltest du also bei vernünftiger Programmierung im Rennen sein.
Hi, danke erstmal für die schnellen Antworten. Klar ich meine natürlich RAM und nicht ROM - shame on me... Die Idee mit dem zu langsamen UART werde ich nochmal untersuchen... ne Idee was man da falsch machen kann? Gruß und Danke Schorsch
Hallo, Wolfgang hat recht. Es funktioniert. Im Anhang sieht man, die Logic Signale von UART und SPI. Ich habe hier in diesem Beispiel einfach die SPI-Empfangsroutine und die UART-Senderoutine unmittelbar viermal nacheinander aufgerufen. Ganz ohne Timer. Sie Sequenz läuft mit einer Cycletime von 0.75ms. Ich habe hier einen Quarz mit 7.3MHz benutzt - War einfach der erste, den ich in der Kiste gefunden hatte, 20MHz würden hier noch ein bisschen Luft bringen. Danke für die Hilfe Gruß Schorsch
>Sensor 25bit (also effektiv 32bit) auslesen, obwohl ich tatsächlich >nur 16 verwende. Eine weitere Möglichkeit wäre die oberen 3 Bytes um eine Position nach rechts zu schieben und dann nur die Bytes 2 und 3 (16 Bit) zu versenden. So kannst Du mit minimalem Rechenaufwand deinen Datenumsatz halbieren.
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.