Forum: Mikrocontroller und Digitale Elektronik Arduino UNO => Takt und serielle Daten erzeugen


von Marco S. (hochfrequenz)


Angehängte Dateien:

Lesenswert?

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
von Marco S. (hochfrequenz)


Lesenswert?

Mit Funktion Serial.print oder mit SPI sollte es gehen. Oder lässt die 
Hatdware vom UNO das nicht zu?

Grüße
Marco

von Nemopuk (nemopuk)


Lesenswert?

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
von Sebastian R. (sebastian_r569)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Rainer W. (rawi)


Lesenswert?

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.

von Adam P. (adamap)


Lesenswert?

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
Noch kein Account? Hier anmelden.