PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GameBoy-Cam mit RN-Control



luma
15.09.2005, 13:01
Hio. Also ich habe mir jetzt eine GameBoy-Kamera zukommen lassen um die als Einsteigskamera für meinen Roboter zu verwenden. Ich weiß das es hier im Forum schon eine längere Diskussion zum Thema gab. Allerdings waren die verwendeten µC's immer C-Controlls.
Jetzt kurz zu dem Sinn dieses Themas: Ich habe eigentlich vor das ganze (fast) alleine zu konstruieren. Allerdings habe ich noch nicht so viel Erfahrung. Und mein teures RN-Controll will ich auch nicht gleich nach den ersten paar Tagen schrotten, das ist klar :). Deswegen schreibe ich jetzt hier wie und wo ich was anschließe und wie meine Software dann später aussehen wird. Ihr müsst (könnt) mir dann schreiben ob das so okay ist. Das ist alles! Danke für euer Verständnis. Wenn das ganze dann am Schluss läuft schreib ich auch sicher ein kleines Tutorial welches die Verwendung der GB-Cam zusammen mit RN-Controll erläutert.
Ich habe mich in das ganze u. a. mit dem GB-Tutorial von http://www.destroy-yourself.de/julian/juliprograms/amr/gbcam.htm eingearbeitet. Da sind die ganzen Ausgänge der Kamera beschrieben. Insgesamt sind das neun. Einer davon bekommt +5V ein anderer Masse (GND). Die kann ich ja jetzt beliebig bei einem der Ports die 5V/GND liefern reinstecken, oder? Ich hab mal nachgemessen. Bei mir liegen nicht ganz 5V an, sondern 4,85V oder so... (Ich denke das ist normal). Alle anderen Anschlüsse würde ich für den Anfang einfachheitshalber in Port A mit der Steckklemme reinstecken....
Kurze Zwischenfrage: Muss ich da dann irgendwas beachten damit ich den µC nicht schrotte?? Ein kaputter Port A wäre nicht so fein.
Dann wäre das „mechanische“ getan. D. h. ich kann jetzt loslegen mit dem Programmieren, oder? Muss ich beim Programmieren was beachten. Kann man auch was schrotten, wenn man irgendwo nen kleinen Bug drin hat? Ich denke mal nicht.

Jetzt noch ein bisschen theoretisches zum Programmieren. Ich weiß das man immer einen Puls auf die Leitung Xck (die Taktleitung ) legen muss damit irgendetwas anderes übertragen wird. Frage: Wie lange muss der Puls sein? Würde es reichen wenn ich z. B. so Programmieren würde (angenommen Xck wäre an PA0 angeschlossen):


DDRA |= (1 << PA0);
// High,
PORTA |= (1 << PA0);
// Hier kommt dann, dass was man übertragen möchte
// dann sofort wieder low
PORTA &= ~(1 << PA0);

Das wäre dann aber ein ziemlich kurzer Puls. Oder sollte ich da eine Pause einlegen? Und wenn ja wie lange? (Mein µC taktet mit 16MHz.). Wenn man dann Programmieren nichts irgendwie schrotten kann versuch ich dann mein Glück alleine. Wenn die Cam dann läuft poste ich das dann natürlich hier.

Grüße
Lutz

tobimc
15.09.2005, 15:24
Hi!

Bist du dir da auch GGGAAANNNNZZZZZZ sicher, dass das alles C-Controlls waren?
Kann hierfür nur AVRs empfehlen, die sind um einiges schneller... :D

Nun, wenn du den PortA schrotten solltest(Das haben wir alle schon durchgemacht... ;D) Kannst du im RN-Controll den AVR wechseln, und direkt weiterarbeiten.

Zur Spannung der GBC: 4,8 sind glaub ich noch OK, aber ab so ca. 4,5 wirds kritisch.

Naja, VCC und GND der Cam, und man braucht einen ADC-Eingang und einen digitalen Eingang.

Eine hale Periode des Takts muss glaub ich min. 2µs lang sein, auf jeden Fall darf der Takt 500kHz nicht überschreiten.

Wie dass mit den Timings ist, würde ich mich komplett an die Diagramme im Datasheet halten und ein Bisschen damit spielen.

Viel Glück!

VLG Tobi

pebisoft
15.09.2005, 17:04
hallo luma, ich habe ein programm aus der winavr-c-scene.
habe es für mich funtionsfähig gemacht.
schreibe mir ein mail: pebisoft@arcor.de wenn du es als hilfe haben möchtest.
mfg pebisoft

luma
15.09.2005, 17:08
Hauptsache ich kann von der programmiertechnischen Seite nichts schrotten, oder??? Das ist mir am wichtigsten...

Z80
15.09.2005, 17:12
Ich glaube ich war bis jetzt der einzige der die Cam mit ner C-Control angesteuert hat. Alle anderen Versionen sind mit avr's aufgebaut.

Der Tackt darf 500kHz micht übersteigen.

luma
15.09.2005, 17:17
Was ist wenn ich den Takt überschreite? Geht dann was kaputt?

tobimc
15.09.2005, 17:32
Hi!

Nein. Dann kommt nur die Cam nciht mit, und du bekommst Datenmüll.
Die Cam kann man fast nicht kaputt machen. (Halt keine 6V an den AD-Ausgang und so... Der sollte hochohmig sein.)

VLG Tobi

luma
15.09.2005, 17:49
(Halt keine 6V an den AD-Ausgang und so... Der sollte hochohmig sein.)

Das kapier ich jetzt nicht ganz... Ich denke du meinst den AD-Ausgang des AVR. Klar der darf nicht über 5V und nehme mal an die Cam liefert auch nicht mehr. Aber was heist bitte hochohmig?

tobimc
15.09.2005, 18:07
Hi!

Nein, die Cam hat einen Analog-Ausgang. Den solltest du direkt mit einem AD-Eingang des AVRs verbinden.
Hochohmig ist einfach... hm. hochomig. Also ein ein sehr hoher Widerstand.

VLG Tobi

luma
16.09.2005, 18:11
Hio. Jaaa ich habs geschaft nen (und nicht nur eins 8)) Bild mit der Gamelboy-Kamera zu schießen. Saß gestern noch ein paar (viele) Stunden vorm Rechner und hab dann ganz spät in der Nacht die ersten Bilder geschossen. Grauenhaft allerdings ist die Empfindlichkeit der Kamera, was hier ja schon besprochen wurde. Da muss ich noch tuenen. Sonst ist alles perfekt. Keine komischen Streifen oder sonst was im Bild. Nur ein Problem habe ich noch (und das hat mich einige Nerven gekostet). Und zwar war mir das direkte Übertragen jedes einzelnen Pixels (also z. B. Pixel x,y lesen durch den AD-Wandler laufen lassen und dann via USART an PC schicken) viel zu langsam. Bei mir dauert das bei 38400 Baud etwa 4 Sekunden. Dann habe ich gedacht das ich ein uint8_t-Array mit genügend Speicherplatz für alle Bildpunkte erstelle und das dann am Stück schicke... Das habe ich gemacht und hin und her Programmiert und dann ging nichts mehr. Mein µC (so bin ich am Schluss draufgekommen) ist gar nicht erst richtig gestartet. Vor lauter *******-Flüchen habe ich dann auch noch fälschlicherweise den ISP-Programmer in den PORT-D gesteckt. (Klar, dass es in diesem Fall dann auch Fehler gab). Der ISP-Programmer ist ganz sicher nicht kaputt, ich kann ihn immernoch verwenden ohne das Fehler beim Übertragen eines Programms entstehen. Wie bekomme ich heraus ob mein armer PORT-D jetzt kaputt ist oder nicht? Ist dann da alles kaputt oder wie ist das? Nunja und irgendwan habe ich dann KamAVR beschuldigt und gedacht das Programm macht nur noch Schrott. Bin dann auf ProgrammersNotepad umgestiegen und fand dann nach einigen stressigen Momenten im Output folgende Zeile:
Data: ...(768.0% Full)...
Dann war mir klar was los war. Mein SRAM ist ja nur 2kB groß... Viel zu klein um so ein riesiges Array zu speichern. Naja am Schluss ging dann wieder alles. Was mit dem Port-D los ist weiß ich halt noch nicht.
Im Anhang sind 2 Bilder. Die sind von der Qualität noch nicht so optimal. Da muss ich wohl an den Einstellungen der Cam noch ein wenig rumspielen...

Jetzt noch eine Frage nebenbei: Die höchste Baudrateneinstellungen die im Datenblatt des Atmega32 zu finden ist (Seite 166) ist 1M Baud. Ziemlich schnell. Nur kann ich, wenn ich diese Baudrateneinstellung verwende, nichts mit dem BrayTerminal empfangen (bei HypterTerminal lässt sich das gar nicht erst einstellen)... Auch das Javaprogramm Camera Image Viewer lässt sich da nicht ändern. Es gibt ne Exception wenn ich die Baudrate im Code auf 1M Baud setze. Für alle Nichtjavakenner. Ne Exception ist ganz einfach ein Fehler. Die sagt mir das die Baudrate zu hoch ist. Mit welcher Baudrate kann man den maximal mit nem PC kommunizieren. Das höchste was ich rausholen konnte waren die genannten 38400 Baud. Ein bisschen wenig denke ich. Was sagt ihr?

Grüße
Lutz


EDIT: Ich posten später noch den Code. Aber mein Hund sah schon auf dem Foto nicht so erfreut aus. Ich glaub der muss mal um die Ecke... 8) :)

Marco78
16.09.2005, 19:08
Respekt!!!

Ich will nicht nerven, aber wann gibt's den Code?
Ich habe meine Cam schonmal aufgeschraubt und vor ewigen Zeit mich an den Code gesetzt. Aber hier habeich nicht wirklich viel Hilfe bekommen und erstmal ne Pause eingelegt ;)

Aber irgendwie sieht dein Code weniger nach BASCOM aus :(
Egal, nur die HEX würde ja reichen. Ggf müsste iches mir auch einen M8 oder M16 anpassen. Oder auf einen Tiny26 wenn der Speicher reicht?!

tobimc
16.09.2005, 19:33
Hi!

Super!
Ich weis nicht, ich übertrage mit 19200 Baud...
Habe auch ein externes 64kb RAM.... :D

Kansst du mal deine Registereinstellungen schreiben?

Glaub nicht, dass der Portd kaputt ist....

Also ich habe das in BASCOM programmiert, und ich habe zwar zwei streifen oben und unten, aber ich habe ein komplett klares Bild.

Hast du einen eigenen Viewer geschrieben?

VLG Tobi

Marco78
16.09.2005, 19:39
Also ich habe das in BASCOM programmiert
Würdest du den Schaltplanund den Code veröffentlichen?

tobimc
16.09.2005, 19:43
Hi!

Sorry, Schaltplan geht nicht, das ist meine JuFo-Arbeit und der Code steht im anderen Thread.

Aber wartet's ab, nach JuFo gibts das alles zum Download!

VLG Tobi

Marco78
16.09.2005, 19:53
Und wo steht der Code? Ich denke, aus dem Code geht auch hervor, wo die Cam angeschlossen ist usw.

tobimc
16.09.2005, 19:59
HI
Ich kann dir meinen Code nicht wirklich empfehlen, der ist auf die Hardware geschrieben...
Der Code ist irgendwo in diesem Thread, ich garantiere aber nicht, dass die Version, die da ist funzt.......
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=7504

Wirklich... ich rate eher davon ab... :D

Aber warum fängst du nicht selber an coden?? ;)

VLG Tobi

luma
16.09.2005, 22:05
Hio. Also im Anhang ist der gewünschte Code. Nochmal Danke an pepisoft der mir sein Programm geschickt hat. Ich hab mich an dem Codeschnippsel orientiert (vorallem die Timings) aber auf meine Bedürfnisse und Umgebung (damit meine ich wie meine Cam angeschlossen ist) angepasst.
Also ganz wichtig: Nicht einfach das Programm im Anhang in den µC flashen und dann läufst. Das ist klar, dass das nicht geht. In der Datei gbcam.h müsst ihr erstmal einstellen wo was dransteckt. In meinem ersten Posting in diesem Thread gibts einen Link zu einem Tutorial, in welchem die Verwendung der Kamera erklärt wird. Da findet man auch eine Beschreibung der Aus- bzw. Eingänge der Kamera. (Den ersten Pin VDD kommt einfach in einen +5V Stecker, VSS/GND einfach in einen GND-Stecker). Ich habs jetzt erstmal ganz einfach gemacht und zwar alle anderen Kabel der GB-Cam mit den Steckklemmen des PORT-As verbunden. Da muss man nichts löten und es geht ganz einfach. Wie man in gbcam.h sieht steckt das Kabel Vout in PA6, READ in PA5 und alle anderen Kabel immer der Reihenfolge immer so weiter (bis PA0). So das wars. Wenn ihr euere Kabel genauso befestigt könnt ihr dann das Programm so flashen. Zum Anzeigen des Bildes gibt es Javaprogramm. Man kann es hier direkt Downloaden: http://www.seattlerobotics.org/encoder/200205/code/GBCamView.jar. Allerdings wird eine JAVA-VM und ne Extrabibliothek (die niemand hat) vorrausgesetzt. Man findet hier eine Beschreibung zu dem ganzen (Abschnitt Software): http://www.seattlerobotics.org/encoder/200205/gbcam.html

Ich werde allerdings in den nächsten paar Tagen noch ein ausführlicheres Tutorial schreiben. Wenns noch Fragen hat einfach fragen :).


Grüße
Lutz


EDIT: "JuFo-Arbeit" Gibts da noch nen Robowettbewerb den ich noch nicht kenne?

roboter
16.09.2005, 23:07
Und wo steht der Code? Ich denke, aus dem Code geht auch hervor, wo die Cam angeschlossen ist usw.

In dem Thread https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=7504 gibts auch n Code von mir (Seite 18). Der funktioniert auch. Mußt aber eventuell noch ein bißchen mit den Registern rumspielen.

Irgendwo gibts dann da auch nen Schaltplan (einige Seiten vorher).

crowdy
29.09.2005, 12:15
Guten Tag meine Damen und Herren!

Sehr viel Weiter Oben im Thread war die rede vom Clock Signal. Da ich auch demnächst mit der GB CAM experimentieren will und mein µC relativ wenig Ports hat kam mir folgende Idee.
Das Clock Signal werde ich mit einem NE555 erzeugen und dann an die CAM anschließen und da ich aus den Datenblättern und dem RC Glied dann die Frequenz weiß lese ich in diesem Takt dann auch die Daten am µC aus. Nun die Frage klappt das und gibt es dabei vielleicht noch Probleme die ich übersehen habe?

Und wie sieht die Sache mit den Registern aus, ist wichtig das man die Register vom µC aus ansteuern kann oder könnte ich das auch mit ein paar Schaltern machen??
mfg

tobimc
29.09.2005, 12:50
Hi!

Naja, du bräuchtest halt auch einen Pin, der den Takt auch wieder abschaltet, weil das sonst so eine Arbeit ist......

Im prinzip sollte es aber schon gehen, würde ich aber nciht empfehlen, weil du für manche Sachen(ADC-Wandlung) länger brauchst als für andere, und wenn die Zeit nicht reicht, ists schon Mist.

VLG Tobi

pebisoft
29.09.2005, 16:53
register und schalter ???????? verstehe ich nicht, die register sind doch kleine schalterchen.
mfg pebisoft

tobimc
29.09.2005, 18:05
Hi!

Ich denke, dass du auf das Zeitliche mit den Schaltern anspielst... :D

Also, die minimale Taktfrequenz ist unbekannt, d.h. dass du die Register auch mit nem Schalter setzen kannst, wenn du zu viel Zeit hast.

Die Maximale Taktfrequenz liegt aber bei 500kHz.

VLG Tobi

crowdy
30.09.2005, 15:35
Hey Tobimc
Danke für die schnelle Antwort, aber leider versteh ich nicht ganz was du meinst. Wieso soll man den Takt wieder abschalten und warum ist das sonst so eine Arbeit??
Habt ein wenig Nachsicht mit mir...

mfg

tobimc
30.09.2005, 15:47
HI!

Naja, die Sache ist die, dass die Camera das Bild immer neu ausgibt, wenn du einen Takt anlegst.

Wenn du den Takt extern generierst, musst du den Takt mit dem Prozessor abfragen usw.
Du machst dir das Leben (programmiertechnisch) damit nur viel zu schwer.

VLG Tobi

crowdy
04.10.2005, 16:08
Hi
Also ich hab da wohl ein Verständnisproblem mit dem was du da sagst ich habe mir das Datenblatt und die Dokumentation auf http://www.destroy-yourself.de/julian/juliprograms/amr/gbcam.htm#intro
durchgelesen. Und dachte, dass das Xck Signal nur zur Orientierung der anderen Signale an diesem Takt dient. Dementsprechen würde die Camera nicht immer ein neues Bild ausgeben wenn ein Rechecksignal an Xck anliegt, sondern nur wenn auf dem START Signal ein Impuls gegeben wird. Auch verstehe ich nicht warum das Programmieren damit viel schwerer wird.
[shadow=green:86dfaf3fd5]mfg[/shadow:86dfaf3fd5]

tobimc
04.10.2005, 17:06
Hi!

Ja, das stimmt schon, aber irgendwo im kleingedruckten des DS steht, dass die camera so lange Bilder ausgibt bis kein Takt mehr an XCK anliegt.

lasses mit dem NE, du machst dur nur das leben unnötig schwer. nimm halt sonst einen Portexpander oder nen dickeren Controller.

VLG Tobi

crowdy
04.10.2005, 20:23
jo vielen dank für die schnelle Antwort
dann werde ich die Idee mit dem Ne555 wohl fallen lassen mfg

tobimc
05.10.2005, 12:55
Hi!

Ja, das wird besser sein. Es ist wirklich einfacher wenn man den Takt mit dem Prozessor erzeugt.

VLG Tobi

crowdy
15.10.2005, 14:44
Moin Moin,

an alle GB CAM Nutzer und an die anderen auch
Also im DB bei den Skizzen der verschiedenen Signale (Xck, Start, Sin etc.) sind ja die ganzen verschieden Zeiten eingezeichnet und aus einer weiteren Tabelle gehen die minimal bzw. maximalen Werte für diese Zeiten hervor. Wie genau sind beim Programmieren diese Werte zuberücksichtigen. Ich hab halt auch noch keine Ahnung wie mein Signal vom µC aussieht, wegen der Steig- und Fallzeiten und so...
Also: Wie wichtig sind diese Zetangaben!