Schnelles Datenstreaming von Microcontroller zu PC
Moderator: Jan3D
Forumsregeln
Bitte beachte die Forumsregeln!
Bitte beachte die Forumsregeln!
Schnelles Datenstreaming von Microcontroller zu PC
Hallo,
Für ein kleines Projekt mit Zeilensensor aus einem Scanner bin ich auf der Suche nach einer Möglichkeit für eine schnelle analoge Datenefassung (1 x 8 Bit) und Übertragung (Streaming) an PC. Versuche mit diversen Arduinos (UNO, MEGA) waren noch nicht zufreidenstellend.
Es gibt mehrere Bottlenecks:
1. AD-Wandler
2. Datenübertragung Ausgangsseitig (Max 1Mb/s)
3. Datenübertragung Eingangsseitig (PC)
Momentan hänge ich schon bei der Datenübertragung. Effektiv schaffe ich mit USB-Serial nicht mehr als 33 kByte / s. Und mit ESP8622 und Wifi: 70 kByte/s. Ich würde mindestens 100 kByte/s bekommen wollen. Und der AD-Wandler vom ESP ist zu langsam.
Was kann ich da tun? Ethernet-Shield? Anderen Microcontroller verwenden? FPGA einsetzen?
Grüße
Florian
Für ein kleines Projekt mit Zeilensensor aus einem Scanner bin ich auf der Suche nach einer Möglichkeit für eine schnelle analoge Datenefassung (1 x 8 Bit) und Übertragung (Streaming) an PC. Versuche mit diversen Arduinos (UNO, MEGA) waren noch nicht zufreidenstellend.
Es gibt mehrere Bottlenecks:
1. AD-Wandler
2. Datenübertragung Ausgangsseitig (Max 1Mb/s)
3. Datenübertragung Eingangsseitig (PC)
Momentan hänge ich schon bei der Datenübertragung. Effektiv schaffe ich mit USB-Serial nicht mehr als 33 kByte / s. Und mit ESP8622 und Wifi: 70 kByte/s. Ich würde mindestens 100 kByte/s bekommen wollen. Und der AD-Wandler vom ESP ist zu langsam.
Was kann ich da tun? Ethernet-Shield? Anderen Microcontroller verwenden? FPGA einsetzen?
Grüße
Florian
- elektrofuzzis
- Beiträge: 212
- Registriert: 25 Jun 2016, 09:40
Re: Schnelles Datenstreaming von Microcontroller zu PC
Hallo Florian,
die ATMEL Familie ist dafür zu langsam.
Über serielle Verbindungen wirst du max 256kBit zusammen bekommen.
Bleibt nur WLAN, da schaffst Du es mit den ESPs wahrscheinlich gerade so eben.
Musst Du zwingend Online übertragen oder kannst Du ggf. auf einer SD Karte oder im RAM buffern?
Gruss
Stefan
die ATMEL Familie ist dafür zu langsam.
Über serielle Verbindungen wirst du max 256kBit zusammen bekommen.
Bleibt nur WLAN, da schaffst Du es mit den ESPs wahrscheinlich gerade so eben.
Musst Du zwingend Online übertragen oder kannst Du ggf. auf einer SD Karte oder im RAM buffern?
Gruss
Stefan
Re: Schnelles Datenstreaming von Microcontroller zu PC
Hallo Stefan,
ich möchte gerne eine "Live-Übertragung" zum PC.
Die ESPs sind von der Übertragung her vielversprechend, allerdings kann ich die ADCs nicht verwenden, da zu langsam..
Für einen parallelen ADC reichen die Pins nicht und Serielles Auslesen über SPI/I2C macht die Sache auch wieder langsam.
Mir scheint aber auch die PC-Schnittstelle mit der seriellen Übertragung limitiert zu sein. DA muss man evtl. auf andere Protokolle ausweichen.
Ein schneller Microcontroller mit ausreichend Leistung und USB3 müsste es doch geben.
Florian
ich möchte gerne eine "Live-Übertragung" zum PC.
Die ESPs sind von der Übertragung her vielversprechend, allerdings kann ich die ADCs nicht verwenden, da zu langsam..
Für einen parallelen ADC reichen die Pins nicht und Serielles Auslesen über SPI/I2C macht die Sache auch wieder langsam.
Mir scheint aber auch die PC-Schnittstelle mit der seriellen Übertragung limitiert zu sein. DA muss man evtl. auf andere Protokolle ausweichen.
Ein schneller Microcontroller mit ausreichend Leistung und USB3 müsste es doch geben.
Florian
- elektrofuzzis
- Beiträge: 212
- Registriert: 25 Jun 2016, 09:40
Re: Schnelles Datenstreaming von Microcontroller zu PC
Hallo Florian,
selbst die neuste Generstion der esp/s3 kommt nicht über usb2 hinaus. Wifi reicht von der Bandbreite laut Datenblatt aus. Bei der Implementierung wirst Du etwas feilen müssen, die Webserver Implemtierung von espressif ist z.B. recht langsam.
Grundsätzlich hast Du mit den ESPs für einen parallelen AD Wandler genug Pins, kommt darauf an was Du sonst noch brauchst. Schau mal, ob Du einen AD Wandler mit I2S findest. Da würde die Bandbreite reichen, ist ein serieller Bus.
Wenn Du mehr Leistung brauchst, dann wird es im Microcontrollerumfeld eng.
Gruss,
Stefan
selbst die neuste Generstion der esp/s3 kommt nicht über usb2 hinaus. Wifi reicht von der Bandbreite laut Datenblatt aus. Bei der Implementierung wirst Du etwas feilen müssen, die Webserver Implemtierung von espressif ist z.B. recht langsam.
Grundsätzlich hast Du mit den ESPs für einen parallelen AD Wandler genug Pins, kommt darauf an was Du sonst noch brauchst. Schau mal, ob Du einen AD Wandler mit I2S findest. Da würde die Bandbreite reichen, ist ein serieller Bus.
Wenn Du mehr Leistung brauchst, dann wird es im Microcontrollerumfeld eng.
Gruss,
Stefan
- MasterOfGizmo
- Beiträge: 2720
- Registriert: 30 Nov 2014, 07:44
Re: Schnelles Datenstreaming von Microcontroller zu PC
Mir ist nicht ganz klar, welche Datenrate Du anstrebst. 1MBit/s oder 1MByte/s?
Der ESP32 und die gängigen CP2102 auf den ESP32-Boards schaffen 921kBit/s über USB, kommen also nah an ein MBit/s heran. Über WLAN geht mehr. Und zB. SPI geht am ESP32 mit 80MBit/s. Da hängt es dann davon ab, ob Dein ADC da mithalten kann.
Der ESP32 und die gängigen CP2102 auf den ESP32-Boards schaffen 921kBit/s über USB, kommen also nah an ein MBit/s heran. Über WLAN geht mehr. Und zB. SPI geht am ESP32 mit 80MBit/s. Da hängt es dann davon ab, ob Dein ADC da mithalten kann.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32
Re: Schnelles Datenstreaming von Microcontroller zu PC
Also mir würde 921 kBit/s ausreichen. Wobei diese Geschwindigkeit vermutlich nicht mit Serial.write erreicht werden kann. Und ob's der PC über Serial schafft bin ich mir auch nicht sicher. Habt Ihr vielleicht einen Link auf ein Projekt, wo so was schon mal gemacht wurde?
- MasterOfGizmo
- Beiträge: 2720
- Registriert: 30 Nov 2014, 07:44
Re: Schnelles Datenstreaming von Microcontroller zu PC
Der esptool-Flasher flasht den ESP32 mit dieser Geschwindigkeit und gibt an Ende einen Messwert der erreichten Geschwindigkeit aus.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32
Re: Schnelles Datenstreaming von Microcontroller zu PC
Suggestion:
Windows 10 still supports a parallel interface (8 bits):
https://docs.microsoft.com/en-us/window ... allel-port
parallel interface: 1.5Mbytes/sec:
https://www.allekabels.nl/pci-kaart/497 ... allel.html
Windows 10 still supports a parallel interface (8 bits):
https://docs.microsoft.com/en-us/window ... allel-port
parallel interface: 1.5Mbytes/sec:
https://www.allekabels.nl/pci-kaart/497 ... allel.html
Re: Schnelles Datenstreaming von Microcontroller zu PC
I cannot believe it but meanwhile I accomplished a buffered transfer of 6500 k Bytes / s with an Arduino Due (Native USB) and a python program on Windows 10.
The buffer size is 10000 Bytes. I am transferring in free running mode without handshaking. Before starting reading I call a synchronization sequence in the python program that waits for a sync sequence. The synchronization is also invoked in case of an error.
Strangely if I do a simple handshaking by starting a transfer by sending one byte brings the speed down to 50 k Bytes /s.
I need to find out what the reason is. (Edit: somehow it is now working )
And if I can maintain this speed if I do something useful on Arduino and/or in the python program that is another question.
The buffer size is 10000 Bytes. I am transferring in free running mode without handshaking. Before starting reading I call a synchronization sequence in the python program that waits for a sync sequence. The synchronization is also invoked in case of an error.
Strangely if I do a simple handshaking by starting a transfer by sending one byte brings the speed down to 50 k Bytes /s.
I need to find out what the reason is. (Edit: somehow it is now working )
And if I can maintain this speed if I do something useful on Arduino and/or in the python program that is another question.