Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller mit USB Host - Automatische Kopierstation


von DerPaul (Gast)


Lesenswert?

Hallo Leute,

Habe in nächster Zeit ein Projekt vor und hoffe, dass ihr mit vielleicht 
ein paar Tipps geben könnt...

Hintergrund ist folgender:
Bei uns in der Kirche werden alle Veranstaltungen aufgenommen. Wenn 
jetzt jemand die Aufnahme möchte kommt er u.a. zu mir und fragt nach 
einer CD oder gibt mir einen USB-Stick, wo ich dann die Aufnahme drauf 
mache...

Da jetzt aber in letzter Zeit immer mehr mit USB-Stick kommen dachte ich 
mir, dass ich es mal versuche eine Automatische Kopierstation zu bauen.

Gedacht hatte ich es mir folgendermaßen:
Gesteuert werden soll alles über den PC, dort schiebe ich die Aufnahme 
in einen bestimmten Ordner und gebe den Befehl für Kopierbereit, dann 
soll am USB-Host Controller eine LED angehen damit man sehen kann, dass 
die Daten verfügbar sind. Sobald jetzt jemand einen USB-Stick rein 
steckt, sollen die Dateien automatisch drauf kopiert werden und sobald 
das Kopieren abgeschlossen ist, wieder eine andere LED aufleuchten...

Habe jetzt längere Zeit gegoogled, habe da aber noch nicht so richtig 
den durchblick...

Wie ich das verstanden habe brauche ich einen USB-Host Controller und 
einen anderen Mikrocontroller - diese beiden Kommunizieren dann z.B. 
über SPI und die Verbindung zum PC geht dann über UART oder wie?

Dann hab ich gelesen, dass die USB-Host dinger auch nicht alle 
USB-Sticks lesen können - könnt ihr mir dann vielleicht einen empfehlen?

Hab etwas Erfahrung in C, zumindest haben wir grad in der 
Technieker-Schule einen Atmel Controller programmiert mit I²C, LM75 und 
Display und fangen jetzt an ein Modell-Auto zu programmieren komplett 
mit CAN-Bus mit Sensoren und Antrieben...


Wie würdet ihr das realisieren? - ich kenne ja nur den Atmel 89C51CC03.

Würde mich über ein paar Tipps sehr freuen...

Gruß
Paul

von da1l6 (Gast)


Lesenswert?

Hallo

Mal ganz abgesehen davon das ein µC am PC zu langsam für größere 
Datenmengen sein wird:

Wieso der Aufwand? Dein PC hat doch USB!

Also nur noch ein Skript/Programm erstellen, dass beim einstecken eines 
USB Sticks gestartet wird und dann kopiert. Fertig.
Unter Linux ist das mit udev und einer (Skript-)Sprache deiner Wahl 
recht schnell gemacht.

da1l6

von Arne W. (ronnyroster)


Lesenswert?

Dafür würde ich einen Raspberry Pi empfehlen, mit den GPIO kann man LED 
ansteuern, und durch das Linuxoide Betriebssystem kann man mit einfachen 
Skripten arbeiten und muss nicht beim Urschleim anfangen. Durch die 
geringe Größe kann man auch noch leicht ein schickes Gehäuse drumherum 
bauen, sodass nur eine USB-Buchse und evtl ein Taster und die LED zu 
sehen sind.

Wie groß sind denn die Videos so?

von STK500-Besitzer (Gast)


Lesenswert?

DerPaul schrieb:
> Wie würdet ihr das realisieren?

Nur mit dem PC. Da steckt schon ein USB-Host drin...
Welchen Sinn hat es, den USB-Stick noch mal "zu puffern"?

Ein PC erkennt einen USB-Stick. Daraufhin kann man ein Programm starten, 
das die Daten einfach dorthin kopiert und fertig ist die Laube.

von Deutsch Sprach würd schweres Sprach (Gast)


Lesenswert?

Hintergrund ist folgender:
Bei uns in der Kirche werden alle Veranstaltungen aufgenommen. Wenn
jetzt jemand die Aufnahme möchte kommt er u.a. zu mir und fragt nach
einer CD oder gibt mir einen USB-Stick, wo ich dann die Aufnahme drauf
mache...

Da jetzt aber in letzter Zeit immer mehr mit USB-Stick kommen dachte ich
mir, dass ich es mal versuche eine Automatische Kopierstation zu bauen.

Wozu der Aufwand, stell das Zeug einfach ins Internet.

von STK500-Besitzer (Gast)


Lesenswert?

Deutsch Sprach würd schweres Sprach schrieb:
> Wozu der Aufwand, stell das Zeug einfach ins Internet.

Das ist doch Teufelszeug ;)

von DerPaul (Gast)


Lesenswert?

da1l6 schrieb:
> Hallo
>
> Mal ganz abgesehen davon das ein µC am PC zu langsam für größere
> Datenmengen sein wird:
>
> Wieso der Aufwand? Dein PC hat doch USB!
>
> Also nur noch ein Skript/Programm erstellen, dass beim einstecken eines
> USB Sticks gestartet wird und dann kopiert. Fertig.
> Unter Linux ist das mit udev und einer (Skript-)Sprache deiner Wahl
> recht schnell gemacht.
>
> da1l6

Hatte mir schon fast gedacht, dass so eine ähnliche Antwort kommt...

Da ich es aber nicht immer mitbekommen würde, wenn jemand einen Stick 
steckt möchte ich doch schon gerne wenigstens ein paar Status-LEDs 
haben...


Arne Westphal schrieb:
> Dafür würde ich einen Raspberry Pi empfehlen, mit den GPIO kann man LED
> ansteuern, und durch das Linuxoide Betriebssystem kann man mit einfachen
> Skripten arbeiten und muss nicht beim Urschleim anfangen. Durch die
> geringe Größe kann man auch noch leicht ein schickes Gehäuse drumherum
> bauen, sodass nur eine USB-Buchse und evtl ein Taster und die LED zu
> sehen sind.
>
> Wie groß sind denn die Videos so?

Das klingt sehr interessant, werd ich mir auf jeden Fall noch näher 
anschauen... Allein schon vielleicht auch für andere Projekte. Aber wie 
kann ich das Ding verstehen? Ist das eine Art Mini-PC mit 
µC-Funktionalität?


Deutsch Sprach würd schweres Sprach schrieb:
> Wozu der Aufwand, stell das Zeug einfach ins Internet.

Für die jüngeren unter uns ist das ja auch kein Problem, aber die 
älteren tun sich da noch etwas schwer...


STK500-Besitzer schrieb:
> Deutsch Sprach würd schweres Sprach schrieb:
>> Wozu der Aufwand, stell das Zeug einfach ins Internet.
>
> Das ist doch Teufelszeug ;)

Genau deswegen informier ich mich ja auch im Internet darüber :-P

von STK500-Besitzer (Gast)


Lesenswert?

DerPaul schrieb:
> Da ich es aber nicht immer mitbekommen würde, wenn jemand einen Stick
> steckt möchte ich doch schon gerne wenigstens ein paar Status-LEDs
> haben...

Darf das Ding einen Monitor besitzen?
Da könnte man definitiv einen besseren Dialog realisieren, als es eine 
LED ermöglicht.

von Christopher (Gast)


Lesenswert?

Da ja sowieso ein PC verwendet wird könntest du den USB Stick direkt an 
den PC stecken und ein Programm für den Kopiervorgangschreiben! LED´s 
könntest du dann z. B. noch über ein RS232 Adapter ansteuern....

von Arne W. (ronnyroster)


Lesenswert?

DerPaul schrieb:
> Das klingt sehr interessant, werd ich mir auf jeden Fall noch näher
> anschauen... Allein schon vielleicht auch für andere Projekte. Aber wie
> kann ich das Ding verstehen? Ist das eine Art Mini-PC mit
> µC-Funktionalität?

Der Raspberry ist im Grunde ein SoC, dort ist ein kompletter Computer in 
einem Chip. Also Speicher, Grafik und die CPU.
Auf dem Raspberry läuft ein angepasstes Debian Linux namens Raspian. Die 
unterschiede zum "normalen" PC liegen in einer geringeren 
Leistungsfähigkeit und dass keine x86 sondern eine ARM Architektur 
verwendet wird.
Dadurch lässt sich kein Windows installieren.

Allerdings ist das für deine Bedürfnisse auch nicht nötig, da du ka gar 
kein Display verwenden willst.

von DerPaul (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> DerPaul schrieb:
>> Da ich es aber nicht immer mitbekommen würde, wenn jemand einen Stick
>> steckt möchte ich doch schon gerne wenigstens ein paar Status-LEDs
>> haben...
>
> Darf das Ding einen Monitor besitzen?
> Da könnte man definitiv einen besseren Dialog realisieren, als es eine
> LED ermöglicht.

Hab ich auch schon drüber nach gedacht... Vielleicht nicht sofort einen 
Monitor, aber vielleicht ein kleines Display für die Statusanzeige...

Lassen sich in so eine RPi auch Netzwerkfestplatten einbinden? Dann 
könnte man das ganze später noch erweitern...

Könnte ich dann z.B. jetzt auf dem Windows Rechner den Ordner mit den 
Daten bereitstellen und den RPi so programmieren, dass sobald ein Stick 
gesteckt wird, die Daten vom Windows Rechner über den RPi auf den Stick 
gespeichert werden?
Ich habe keinen Zeitdruck und würde das alles dann nach und nach 
aufbauen und mich damit langsam in die ganze Materie einarbeiten...

Welchen Compiler und Editor für C werden den Bereitgestellt oder welchen 
würdet ihr empfehlen? In der Schule arbeiten wir mit GCC mit dem Ubuntu 
Editor(grad vergessen wie der heißt).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

DerPaul schrieb:
> Lassen sich in so eine RPi auch Netzwerkfestplatten einbinden?

Da auf dem ein Linux läuft, und es für Linux einen Samba-Client gibt 
(der nutzt das aus der Windows-Welt stammende Netzwerkprotokoll SMB), 
sollte das möglich sein.

von Tong (Gast)


Lesenswert?

DerPaul schrieb:
> Welchen Compiler und Editor für C werden den Bereitgestellt oder welchen
> würdet ihr empfehlen? In der Schule arbeiten wir mit GCC mit dem Ubuntu
> Editor(grad vergessen wie der heißt).

Udev + Shellscript sollte reichen. Ich würde die Dateien vorher auf 
das Gerät kopieren.

von DerPaul (Gast)


Lesenswert?

Von udev und Shellcript habe ich leider noch keine Ahnung, programmiere 
zwar in Ubuntu, aber nur C. Werd mir das aber auf jeden Fall noch 
anschaun...

Wie könnte man denn von einem Windowsrechner Befehle z.B. Bits oder 
Bytes senden? Und dann mit der RPi einlesen und verarbeiten? Gibts da 
eine Schnittstelle oder so?

Tut mir leid für die vielen Fragen, habe leider noch nicht so viel 
Ahnung von Hardware-Programmierung...

von DerPaul (Gast)


Lesenswert?

DerPaul schrieb:
> Wie könnte man denn von einem Windowsrechner Befehle z.B. Bits oder
> Bytes senden? Und dann mit der RPi einlesen und verarbeiten? Gibts da
> eine Schnittstelle oder so?
>
> Tut mir leid für die vielen Fragen, habe leider noch nicht so viel
> Ahnung von Hardware-Programmierung...

Vielleicht kann mir da noch jemand eine Antwort geben... Dann hätte ich 
erst mal die wichtigsten Informationen!!!

von Malte S. (maltest)


Lesenswert?

DerPaul schrieb:
> Von udev und Shellcript habe ich leider noch keine Ahnung, programmiere
> zwar in Ubuntu, aber nur C. Werd mir das aber auf jeden Fall noch
> anschaun...

udev-Regeln sind mit ein wenig Gewöhnung sehr einfach machbar. Du 
reagierst auf Ereignisse wie das Hinzufügen oder Entfernen eines Gerätes 
mit z.B. def Ausführung eines Skriptes oder Binaries - aber Achtung in 
neueren udev-Versionen kann so ein externer Befehl auch nach einem 
fork() nicht mehr weiterlaufen, aber ein daemon - passend für den 
Kircheinsatz ;) kann z.B. per UNIX-Socket Befehle entgegennehmen, die 
ein udev-Regelchen absetzt.
Das kannste dann auch in C erledigen.

> Wie könnte man denn von einem Windowsrechner Befehle z.B. Bits oder
> Bytes senden? Und dann mit der RPi einlesen und verarbeiten? Gibts da
> eine Schnittstelle oder so?

Da der RPi am Ende auch ein Computer ist ganz normal per Netzwerk per 
TCP oder UDP. Oder per SSH (von Windows mit plink.exe aus dem 
PuTTY-Paket und public key auth). Oder...

> Tut mir leid für die vielen Fragen, habe leider noch nicht so viel
> Ahnung von Hardware-Programmierung...

Macht nix. Aus o.g. Grund ist das eher "normale" PC-Programmierung.

von Der (Gast)


Lesenswert?

Hi!

Es gibt auch kleine Displays die CPU Temperatur oder den Titel der 
aktuellen MP3 anzeigen. Und es gibt Tastaturen in denen ein kleines 
Display ist.

Den Inhalt kann man über kleine Programme steuern.

Laut gedacht:
- Altes Laptop von eBay mit defektem Bildschirm kaufen. Warum Laptop? 
Klein, stromsparend und leise. Warum defekter Bildschirm? Deutlich 
billiger.
- Zum Einstellen  Programmieren  Daten überspielen normalen PC 
Bildschirm anschließen.
- Windows oder kleines Linux aufspielen, dazu die oben genannten Skripte 
/ Programme.
- Schränkchen bauen: Laptop + Netzteil rein. Vorne das kleine Display, 
oben das Ende eines USB-Verlängerungskabels raushängen lassen.
- Sobald Stick erkannt wird, beginnt das kopieren. Fortschrittsbalken 
während des kopieren anzeigen.


Ich habe bereits Sachen mit USB auf µCs programmiert und verspreche dir, 
dass eine Lösung mit Windows/Linux auf einem "normalen" PC deutlich 
einfacher ist.

P.S.: Was soll passieren, wenn die Daten nicht mehr drauf passen oder 
Dateien mit gleichem Namen schon vorhanden sind?

von Der (Gast)


Lesenswert?

Edit:

- Zum Einstellen  Programmieren  Daten überspielen normalen PC
Bildschirm anschließen.

Sollte eigentlich heißen:

- Zum Einstellen/Programmieren/Daten überspielen normalen PC
Bildschirm anschließen.

von RP (Gast)


Lesenswert?

DerPaul schrieb:
> Wie könnte man denn von einem Windowsrechner Befehle z.B. Bits oder
> Bytes senden? Und dann mit der RPi einlesen und verarbeiten? Gibts da
> eine Schnittstelle oder so?

Samba installieren, ist ein CIFS/SMB Server, damit kannst du Unix 
Filesysteme als Netzlaufwerke einbinden.

von DerPaul (Gast)


Lesenswert?

Der schrieb:
> Ich habe bereits Sachen mit USB auf µCs programmiert und verspreche dir,
> dass eine Lösung mit Windows/Linux auf einem "normalen" PC deutlich
> einfacher ist.
>
> P.S.: Was soll passieren, wenn die Daten nicht mehr drauf passen oder
> Dateien mit gleichem Namen schon vorhanden sind?

Ich würde schon gerne eine RPi nehmen, allein schon um es zu lernen... 
und wegen den GPIOs, Anbindung an Bus Systeme usw...

Wenn die Dateien schon vorhanden sind, wäre es eigentlich egal, ob 
abbrechen oder überschreiben... wenn kein Speicherplatz mehr da ist 
Meldung an Status Anzeige...

von DerPaul (Gast)


Lesenswert?

Danke Malte...

Das schau ich mir auch noch mal an...

von Malte S. (maltest)


Lesenswert?

Ach ja, um Dateien von Windows auf ein Linux-System zu kopieren, ist wie 
schon gesagt wurde samba auf dem Linux das Mittel der Wahl. Wenn das 
Linux sich die Daten von der Freigabe eines Windows-Systems ziehen soll, 
ist das nichtmal nötig, bzw. höchstens die cifs-utils werden gebraucht. 
Das ist ein mittlerweile meistens eigenständig paketierter Teil von 
samba, der ausreicht, um CIFS-Freigaben zu mounten. Ist komfortabler, 
dank mount einfach auf die Dateien zuzugreifen als wären sie lokal, als 
mit smbclient rumzuhantieren.
Ob die Pakete auch bei ubuntu aufgeteilt sind und wie sie da genau 
heißen, kann ich Dir allerdings nicht sagen.

Der Ablauf könnte also im Groben so sein:
* das Video wird irgendwo im Netz bereitgestellt und die entsprechende 
Freigabe auf dem RasPi gemountet.
* ein daemon wird gestartet (oder läuft immer), der darauf wartet, dass 
ihm
* mittels entsprechender udev-Regel als Trigger mitgeteilt wird, dass 
ein USB-Massenspeicher angeschlossen wurde
* der Massenspeicher wird gemountet und das Video darauf kopiert
* umount, Info an User, dass das Kopieren abgeschlossen ist

Je nachdem, ob Du nun eine oder mehrere LEDs für den Status an die GPIOs 
anschließt oder ein kleines Display mit oder ohne ein paar Tasten, 
können diese Schritte dann mehr oder weniger interaktiv und mit mehr 
oder weniger Statusinfos ablaufen.

Denke auch, dass eine solche Lösung am zielführendsten ist, auch wenn es 
sicherlich interessant sein kann, das Ganze mit einem µC aus dem Nichts 
aufzubauen. Dann kommt allerdings nicht zu unterschätzen zur 
grundlegenden Implementierung eines USB-Hosts noch der Dateisystemcode 
dazu, um die Daten auch auf die Sticks zu kriegen. Und das sollte sauber 
sein, man möchte ja nicht fremde Sticks logisch zerschießen. Das alles 
kriegste mit (Embedded) Linux-Variante nebenbei dazu.

Schöne Feiertage!

von DerPaul (Gast)


Lesenswert?

Danke Malte...

So ungefähr hatte ich mir das gedacht... und dank deiner Hilfe weiß ich 
jetzt noch womit ich mich beschäftigen soll!!!

Hab jetzt noch 2 Projekte in der Techniker Schule, das erste ist: Daten 
von einem, als Spannungsmesser mit 4 Kanälen programmierten, PIC 
einlesen und mit einem C- Programm die Spannungen sowie eine Kurve von 
jeden Kanal auf einer HTML ausgeben...
Das zweite: Mut mehreren Gruppen ein Modellauto mit CAN-bus 
programmieren - ausgestattet mit Antrieb, Sensoren und so weiter...

Danach will ich auf jeden Fall dieses Projekt in Angriff nehmen und 
werde wahrscheinlich auch hier von meinem Fortschritt berichten!

von DerPaul (Gast)


Lesenswert?

Auch von mir schöne Feiertage an Alle!!!

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.