Hallo, möchte mit Arduino UNO anhängende serielle Datenausgabe erzeugen. Wenn man mit 100kHz taktet braucht es keine Pause zwischen Datenbyte 1 und 2, da t(nxt) > 4ms erfüllt ist. Meine Frage: wie realisiere ich obigen Takt ubd Datenausgabe möglichst simpel auf dem UNO (mit sketch). Sprich gibt es eine Bibliothek die genau das macht. I2C geht ja nicht, da diese Start und Stopsequenzen hat. Sind in meiner Anwendung immer 8 Bit ohne Start, Stop und Prüfbit. Falls jemand wissen möchte wofpr ich das brauche, der kann im Unterforum "Platinen" unter "PLCC Adapter" nachsehen. Grüße Marco
:
Bearbeitet durch User
Mit Funktion Serial.print oder mit SPI sollte es gehen. Oder lässt die Hatdware vom UNO das nicht zu? Grüße Marco
Das sieht mir nach einem Anwendungsfall für SPI aus. https://docs.arduino.cc/learn/communication/spi/ Alternativ kannst du es selbst programmieren, auf Basis direkter Zugriffe auf die Pins und Warteschleifen (delay). Man braucht nicht für jede Pillepalle eine Library. Marco S. schrieb: > Mit Funktion Serial.print Sicher nicht. Die Serial Klasse kann mur asynchrone Ausgabe ohne Taktsignal, ohne selbst definierbare Pausen und außerdem ist der einzige serielle Port gereits mit dem USB-UART belegt.
:
Bearbeitet durch User
Ist eigentlich eine gute Übung, SPI mal "zu Fuß" umzusetzen und sich so einfache Funktionen wie readByte() und writeByte() selber mit Low-Level-Pinfunktionen anzulegen. Wenn das klappt, kann man sich mal tiefer in die Register der USART-Module einlesen und versuchen, dem SPI-Modul das beizubringen.
Nur ein reines Datenbyte ohne jede Synchronisation geht nur über SPI. Mit der UART im SPI-Mode läßt sich die Bitrate auch recht fein einstellen.
Marco S. schrieb: > Wenn man mit 100kHz taktet braucht es keine Pause zwischen Datenbyte 1 und 2, > da t(nxt) > 4ms erfüllt ist. Du brauchst nicht einmal einen festen Takt. Die Zeiten sind alles Mindestzeiten, d.h. bis auf die Umschaltzeit t_HIZ absolut unkritisch.
Grundsätzlich kannst du SPI verwenden. Falls deine Anwendung nicht "zeitkritisch" ist, kannst es auch selber mit nem PIN raustackten. Erinnert mich an mein LED Treiber IC von vor 2 Wochen.
1 | void send(uint8_t addr_cmd, uint8_t *data, size_t length) |
2 | {
|
3 | digitalWrite(cs_pin, LOW); |
4 | |
5 | send_byte(addr_cmd); |
6 | |
7 | for (size_t i=0; i<length; i++) |
8 | send_byte(data[i]); |
9 | |
10 | digitalWrite(cs_pin, HIGH); |
11 | }
|
12 | |
13 | void send_byte(uint8_t data) |
14 | {
|
15 | for (uint8_t i=0; i<8; i++) |
16 | {
|
17 | digitalWrite(clk_pin, LOW); |
18 | |
19 | digitalWrite(data_pin, data & 1 ? HIGH : LOW); |
20 | data >>= 1; |
21 | |
22 | digitalWrite(clk_pin, HIGH); |
23 | }
|
24 | }
|
:
Bearbeitet durch User
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.