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
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
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?
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.
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.
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
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.
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....
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.
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).
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.
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 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...
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!!!
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.
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?
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.
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.
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...
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!
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!