Forum: Mikrocontroller und Digitale Elektronik Webcam/USB-Kamera Bilder über Bus verschicken


von Lars S. (kallipeter)


Lesenswert?

Guten Morgen,

ich bin Student im Praxissemster. Meine Aufgabe für dieses Zeit soll es 
sein, einen bestehenden Busknoten um einen USB-Anschluss zu erweitern, 
um eine Webcam anzuschließen. Die Daten sollen dann als Bild an einem 
anderen Busknoten auf einem Webserver bereit gestellt werden. Die 
Verbindung zwischen den beiden Knoten besteht und funktioniert, auch der 
Webserver dürfte machbar sein, nur finde ich leider keine Informationen 
für die Einbindung von USB. Das Projekt soll dazu dienen, mir in den 
nächsten 5 Monaten die C-Programmierung und USB näher zu bringen. Das 
Problem ist auch nicht, das ich nichts über USB finde, ich habe hier 
Bücher über Bücher liegen und im Internet steht ja auch eine Menge, ich 
weiß aber nicht, was wichtig ist und was eher zweitrangig sein sollte. 
Daher möchte ich gerne ein paar Tips, wo ich mich am Besten einlesen 
sollte, bzw was (Webseiten, Bücher) für einen Anfänger die  besten 
einstiegsmöglichkeiten bietet.
Als vorgegebener Microcontroller wurde ein Atmel AT32UC3A3 verwendet. 
Ich weiß das dieser laut Datenblatt USB integriert hat, nur kann ich da 
trotz einer Woche recherche noch nicht viel mehr mit Anfangen.

Ich wäre über jeden Tip sehr Dankbar, evtl auch über ein paar 
Codeschnipsel, um vielleicht ein paar Sachen nachvollziehen zu können. 
Ich möchte die Praxissemsterzeit wirklich gerne intensiv nutzen um Tief 
in die Microcontroller und C-Programmierung Materie zu kommen, nur 
leider sehe ich momentan die Zeit nur so dahin fliegen weil ich keine 
Ansätze für die Webcam einbindung finde.

Danke im Voraus

von Volker S. (volkerschulz)


Lesenswert?

Hallo Lars.

Dass eine Webcam einen USB-Stecker hat, heisst ja noch lange nicht dass 
Du auch ihr Uebertragungsprotokoll kennst. Und da die Hersteller ja 
seltenst Treiber fuer Atmel Controller bereitstellen, bleiben Dir 
eigentlich nur zwei Moeglichkeiten:

a) Die Daten von der Webcam per USB entgegennehmen und den 
unveraenderten Datenstrom ueber den Bus an ein System zu schicken, fuer 
das Treiber vorhanden sind (und dort so tun als waere die Cam direkt 
angeschlossen).

b) Recherchieren ob fuer eine bestimmte Webcam (oder einen 
Webcam-Controller-Typ) ein offenes oder "entschluesseltes" Protokoll 
existiert.


Was ist denn das fuer ein Knoten? Was fuer ein Bus? Was haengt alles 
dran? Und was genau ist die Zielsetzung?

Volker

von Lars S. (kallipeter)


Lesenswert?

Hallo Volker,

danke schon mal für deine Antwort, leider darf ich nicht sagen, was das 
für ein Bussystem ist, da ich sonst gegen meine Betriebsvereinbahrung 
verstoßen würde und mein Praktikum dann wahrscheinlich hier sein ende 
finden würde :-(

zu a)
Diese Möglichkeit kommt in sofern nicht in betracht, weil das Zielsystem 
ein anderer Knoten mit dem selben Microcontroller ist, auf dem Direkt 
der Webserver realisiert werden soll.

zu b)
Genau das ist mein Problem, ich weiß überhaupt noch nicht so genau, wie 
das Protokoll funktioniert. Funktioniert das im Prinzip so wie in der 
Handycam, die in den anderen Projekten hier im Forum beschirieben sind? 
Wird eine Bildanfrage an die Kamera gesendet und bekommt man daraufhin 
ein Bild oder wie funktioniert das genau?

Über die ansteuerung von USB-Sticks habe ich schon eine Menge gefunden, 
da gibt es auch Beispiele und grobe erklärungen für, aber mit den 
Kameras scheint es ein wenig komplizierter zu sein, wobei das für mich 
total unverständlich ist. So eine ganze Kamera kostet um die 5 €, da 
kann es doch nicht so kompliziert sein...

gruß
Lars

von Volker S. (volkerschulz)


Lesenswert?

Bei Massenspeichern (USB-Sticks) ist das was ganz anderes. Diese setzen 
alle auf einem Treiber (und somit auf einem Protokoll) auf, das auch 
noch offen und gut spezifiziert ist.

Bei den Webcams kocht jeder Hersteller sein eigenes Sueppchen, das meist 
heimlich und ohne oeffentlich zugaengliche Dokumentation. Deshalb 
braucht es fuer eine Webcam eben auch herstellerspezifische Treiber.

Muss es denn unbedingt eine USB-Webcam sein? Ansonsten koennte man ja 
eine analoge Videoquelle und einen Frame Grabber benutzen... Oder google 
mal nach "AVRcam".

Volker

von Birger Z. (nohelp)


Lesenswert?

Meine zuletzt gekauften WebCams brauchten keinen speziellen Treiber 
mehr, der Windows-XP-eigene reichte aus. Möglicherweise gibt's schon 
Leute, die mt solchen Webcams irgendwas Dolles angestellt haben.

von Lars S. (kallipeter)


Lesenswert?

Es muss nicht unbedingt eine Webcam sein, mein Projektleiter es wäre die 
schönste Lösung, wenn es aber garnicht geht, dann soll ich nach 
alternativen suchen, nur eben nicht unbedingt die Handycam.

Aber das ist schon mal eine ziemlich hilfreiche Antwort gewesen, dass 
jeder Hersteller seinen eigenen Treiber verwendet. Das heißt dann ja 
schon mal, das der USB Anschluss keine weiteren vorteile bietet als eine 
andere Kamera, da man auch, selbst wenn man es hinbekommen würde, an ein 
Model gebunden ist.

Die AVRCam hatte ich mir auch schon oft angeguckt und ist definitiv ein 
sehr interessantes Projekt, worauf jetzt wohl auch mein Wahl fallen 
wird.

Aber eine Frage habe ich trotzdem noch, könnte man denn evtl auch eine 
"normale" Video-Kamera ansprechen? Also, wenn man eine Kamera mit einem 
normalen Videoausgang nehmen möchte? Kannst du mir da evtl ein Referenz 
Projekt nennen?

Tausend Dank schon mal

Lars

von Volker S. (volkerschulz)


Lesenswert?

Lars Schröder schrieb:
> Aber eine Frage habe ich trotzdem noch, könnte man denn evtl auch eine
> "normale" Video-Kamera ansprechen? Also, wenn man eine Kamera mit einem
> normalen Videoausgang nehmen möchte? Kannst du mir da evtl ein Referenz
> Projekt nennen?

Ein Bild aus einem analogen Videosignal muss natuerlich digitalisiert 
werden. Dafuer werden "Frame Grabber" verwendet.

Sowas:

http://www.digitalcreationlabs.com/uCFG.htm

Lassen sich die Hersteller aber gut bezahlen. ;)

Volker

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Aber das ist schon mal eine ziemlich hilfreiche Antwort gewesen,
> dass jeder Hersteller seinen eigenen Treiber verwendet.

Dem muss nicht so sein, es gibt eine Standardgeräteklasse für 
USB-Videogeräte.

von Weingut P. (weinbauer)


Lesenswert?

Naja, hab schon 2-3 der 5€ USB-Cams zerlegt und nicht selten
ist mir da nix mirakulöses entgegengefallen.
I.d.R. war das nix als n Kameramodul mit serieller
Schnittstelle und ein USB-Uart wandler in der Art von FTDI.
Oft war sogar noch der Modulhersteller ersichtlich,
gerne Omnivision-Typen.
Hat man den Typ kann man sich das "Protokoll"
aus den gängigen Datenblättern ziehen.
Die 5€-Hersteller versuchen natürlich nicht das
Rad neu zu erfinden.

von Lars S. (kallipeter)


Lesenswert?

@Volker:
Oh ja, habe jetzt gesehen und verstehe was du mit "gut bezahlen" 
meinst... Daher fällt es schon mal raus, zu viele Extras, zu teuer.. 
usw, alles das was das Projekt nicht kosten darf. Trotzdem Dank

@Rufus
Hallo, wie meinst du das? Heißt das es gibt doch eine einheitliche 
Möglichkeit eine USB-Schnittstelle zu haben, in der ich jede beliebeige 
Webcam anschließen kann? Kannst du mir einen Hinweis geben, wo ich 
Informationen bekommen kann? Habe hier zwei Bücher liegen
1. USB 2.0 von Franzis ISBN 3-7723-7966-4
2. Messen, Steuern, Regeln mit USB auch von Franzis ISBN 3-7723-5874-8

Nur das sind unendlich viele Informationen wenn man nicht weiß wogenau 
man nach suchen muss...

Gruß Lars

von Volker S. (volkerschulz)


Lesenswert?

http://en.wikipedia.org/wiki/USB_video_device_class

Das ist gemeint.. Funktioniert NICHT mit jeder Webcam.. Aber 
vielleicht findest Du ja eine, die explizit auf UVC oder Kompatbilitaet 
mit der Playstation verweist?

Volker

von Lars S. (kallipeter)


Lesenswert?

@Fhutdhb
Genau sowas habe ich mir schon gedacht, dann es ja so gesehen nur ein 
Umweg der sie Sache unnötig kompliziert macht. Erst von Seriell auf USB 
und ich muss dann den Kram (nach meiner jetzigen Einschätzung aufwendig) 
wieder zurückwandeln um dann ein serielles Signal, welches ich 
idealerweise haben möchte, zu bekommen. Ich hoffe noch auf den ein oder 
anderen Betrag, der mich in die richtige Richtung lenkt, was das 
Programmieren, bzw die Einbindung von USB angeht, ansosnten werde ich 
heute nachmittag mal zu Reichelt fahren und mir ne Kamera zum basteln 
holen. Auch wenn das nicht die optimalste Lösung ist, die ich meinem 
Projektbetreuer zeigen möchte. Es hätte lieber eine Funktionierende 
Lösug von mir, ohne Bastellei, einfach USB Stecker rein und es muss 
funktioneren.

Vorgabe ist auch für den Anfang erstmal, das überhaupt ein Bild kommt. 
In welchen Abständen ist egal, ein "flüssiges" Bild soll ich dann im 
Anschluss bei meiner Bachelorarbeit draus machen.

Danke schon mal

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Hallo, wie meinst du das? Heißt das es gibt doch eine einheitliche
> Möglichkeit eine USB-Schnittstelle zu haben, in der ich jede beliebeige
> Webcam anschließen kann?

Nicht jede beliebige, nur die, die die Standardgeräteklasse 
implementieren.

> Kannst du mir einen Hinweis geben, wo ich Informationen bekommen kann?

Hier wird die Geräteklasse beschrieben:

http://www.usb.org/developers/defined_class/#BaseClass0Eh

Das ist die offizielle Dokumentation:

http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip


Und hier gibt es Informationen über den diese Klasse implementierenden 
Linux-Treiber:
http://linux-uvc.berlios.de/

von Lars S. (kallipeter)


Lesenswert?

Nach der Farbe der Links, bin ich auf den Seiten schon einmal gewesen, 
aber ich werde dort jetzt lesen, lesen, lesen... Dankeschön

von micha (Gast)


Lesenswert?


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.