PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gameboy Camera, Probleme bei dem Auslesen des Bildes



Seiten : [1] 2 3

batti112
07.03.2005, 15:50
Hi!

Ich versuche momentan eine Cam für meinen Roboter zu bauen, die ich direkt über den TWI ansteuern kann.
Habe eine Schaltung gebaut, die aus einer GB-Cam, einer PCF8574P Porterweiterung sowie den PCF8591 AD-Wandler besteht.

Dank des wirklich guten Tutorials von

http://www.destroy-yourself.de/julian/juliprograms/amr/gbcam.htm

schien das Ansteuern der Cam recht einfach.

So, und nun zum Problem:

Reset'te die Cam, lade die Register und warte dann darauf das der READ-Pin auf High geht.

Dies passiert nach so ca. 15sek. , unabhängig davon wie ich mein delay einstelle... (1. Frage dauert das bei euch auch so lange?)

Dann lese ich solange die Spannung am Vout aus, bis READ wieder aus low zurück geht (und dies ist nach 128x128 Pixeln der Fall).

Soweit alles ok, nur die Spannungen die ich auslese sind konstant bei nahezu 5V. Messe also die Versorgungsspannung der Cam.

Der AD-Wandler funktioniert richtig (habe nach dem Bau der Schaltung als erstes ein paar Spannungen gemessen).

Ein Nachmessen der Spannung an Vout ergibt 4.95V.
Besitze kein Oszi, kann also nicht testen ob es sich um ein "getaktetes" Signal handelt.

Hatte jemand schonmal die selben Probleme?
Oder sogar Ahnung woran das liegen könnte?

mfG

Batti

batti112
07.03.2005, 21:18
Wie verhält sich die GB-Cam denn, wenn man sie nicht konfiguriert und dann einen Start-Impuls gibt?(Vielleicht liegt es an der Konfiguration der Register)

Oder ist der I2C-Bus einfach zu langsam?

:-)

Kjion
07.03.2005, 21:45
Ich würde vermuten, das es an deinen Einstellungen in den Registern liegt. Bei mir hatte es auch nicht so gepasst mit den Einstellungen die auf der Seite angegeben waren. Spiel mal ein bißchen mit den Werten für die Verstärkung usw. herum, dann sollte sich evntl. was tun ...

MfG Kjion

batti112
07.03.2005, 22:15
Danke!

Werd das jetzt mal sofort testen...

batti112
07.03.2005, 23:06
Habe mal mit den Bits G4 - G0 rumgespielt.
Der Output verändert sich auch (konnte die Spannungsausgabe sehr deutlich "runterdrehen").

Allerdings ist jeder ausgelesener Wert der selbe.
Ebenso reagiert die Cam kein bisschen auf Helligkeitsunterschiede
(Cam zuhalten, Cam mit Lampe beleuchten alles liefert den selben Wert).

Allerdings liefert die Cam 128x128 Pixel...

Nutze grundsetzlich beide Cam-Kofigurationen die bei dem Tutorial vorgegeben wurden.

Bei diesen Konfigs. müsste aber doch ein Spannungsunterschied auftauchen, und nicht ein konstanter Wert.


Werde wohl mal die heutige Nacht nutzen um mal ein bisschen rumzuspielen...

Kjion
08.03.2005, 09:41
Falls es dir was hilft hier mal meine Einstellungen:

kamera_load_register( 0x00, 0x80 );
/* 000 GAIN */
kamera_load_register( 0x01, 0x0c ); // 0x07
/* Belichtungszeit */
kamera_load_register( 0x02, 0x04 );
kamera_load_register( 0x03, 0x00 );

kamera_load_register( 0x04, 0x01 );
kamera_load_register( 0x05, 0x00 );
kamera_load_register( 0x06, 0x01 );
kamera_load_register( 0x07, 0x07 );

MfG Kjion

batti112
08.03.2005, 10:39
Danke! *freu

Habe es vermutlich heute Nacht geschafft ein Bild auszulesen...
Muss gleich mal gucken, ob das wirklich der Fall war, oder ob es einfach nur an der frühen Uhrzeit gelegen hat ;-)

Deine Einstellungen werde ich aber auch mal testen!

Besten Dank

batti112
08.03.2005, 13:13
Entweder es war müdigkeit, oder es lag an der "Tagesform" der Cam.

Konnte bis jetzt die Ergebnisse nicht reproduzieren.
Wie empfindlich ist die GB-Cam gegenüber Spannungsschwankungen?

Habe bis auf meine Stromquelle keine Spannungsstabilisierung eingebaut.

(AD-Wandler, Porterweiterung, GB-Cam hängen an einer Stromversorgung)

batti112
09.03.2005, 12:53
Das Problem scheint wohl ein größeres zu sein...
Ich habe auch gestern Nacht versucht Fortschritte zu erzielen, leider mit keinem Erfolg. ](*,)

Kennt jemand vll. eine Seite auf der es fertigen Gameboykamera Code gibt,
das ich einmal meinen mit diesem vergleichen kann?

Habe bis jetzt nur sehr kompliziert wirkenden Assemblercode gefunden...

mfG

Batti

MrNiemand
09.03.2005, 17:14
öhm bei mir reagiert die cam mit den einstellungen von deinem link viel zu empfindlich da muss ich die helligekti in meinem zimemr voll runterdrehn!

MJA
09.03.2005, 17:49
@Batti: Hehe, vielleicht solltest du mal tagsüber arbeiten, denn wenn es dunkel ist kommt logischweise kein Signal ;-) Nein, ich frage mich, warum du unbedingt die GB-Cam benutzt. Du kriegst eine Webcam mit besserer Qualität für 10€ und die wird dir bestimmt nicht solche Probleme bereiten. Aber das ist jedem selbst überlassen. Vielleicht hast deine GB-Cam auch kaputt? Funktioniert sie denn im GameBoy? Bei den anderen klappt es ja offensichtlich, vielleicht ist an deinem Aufbau was falsch oder nimm einfach mal exakt den Code, den die anderen nehmen... Naja, kannst dir ja überlegen. (Ich geb zu ich bin kein Experte auf diesem Gebiet, hab relativ wenig Ahnung von so hardwarenahen Sachen, aber was ich bis jetzt so gelesen hab, könnte es durchaus an einer der oben genannten Ursachen liegen)

Gruß, Jan.

batti112
09.03.2005, 19:20
ich habe die einstellungen extra so gewählt, da die cam immer volle 5V ausgegeben hat, und ich diese damit herrunterbrechen konnte.

MrNiemand
09.03.2005, 19:23
naja wenn du immer 5v für jeden pixel hast bringt dir das ja wenig, denn dann hast du nur ein ganz helles bild!

batti112
09.03.2005, 22:11
Problem ist ja das die Pixelwerte nahezu identisch sind, die Kamera aber sonst soweit funktioniert (Read geht High/Low).

MrNiemand
10.03.2005, 15:03
setz mal deine belichtungszeit sehr weit runter erstmal beide register auf 00 dann auf dem lsb teil des registeres langsam die belichtung erhöhen

batti112
10.03.2005, 21:49
Werde das in kürze testen, danke für die Tipps...

Finde es nur komisch, dass bei meiner Cam, bei erprobten Einstellungen, fast ein konstanter Wert rauskommt. Andere variieren hier und da ein bisschen (belichtungszeit an den Gegebenheiten anpassen etc.).

Naja, werd mal gucken.

MrNiemand
11.03.2005, 15:07
meine hat auch mit den werten die bei anderen funktionieren, überhaupt keine helligkeitsunterschiede gebracht, hatte deshalb am anfang auch immer 5v an vout!

batti112
11.03.2005, 16:11
Oh! Das gibt mir jetzt echt mal Hoffnung!
Danke für den Hinweis!

Hatte mir jetzt nicht so viel Hoffnung gemacht, dass ich das einfach mit nen paar Registereinstellungen in den Griff bekomme...

Melde mich sobald ich das getestet habe (mal sehen, wann ich dazu komme)

batti112
12.03.2005, 17:01
Habe die Einstellungen jetzt mal so getestet.

Das Ergebnis ist sehr sehr merkwürdig.

Meine Register Einstellungen:
Reg0 = 0x80;
Reg1 = 0x00;
Reg2 = 0x00;
Reg3 = 0x06;
Reg4 = 0x01;
Reg5 = 0x00;
Reg6 = 0x01;
Reg7 = 0x07;

Das Ergebnis sieht wie folgt aus :
(ein einfaches printf das die uart_werte darstellt)

-61 -61 -61 -61 -61 -61 -62 -62 -62 -62 -62 -62 -61 -62 -61 -61 -61 -61 -61 -61 -61 -61 -61 -62 -62 -62 -62 -62 -62 -62 -62 -61 -61 -61 -61 -61 -61 -61 -62 -61 -61 -61 -62 -62 -62 -62 -61 -61 -61 -61 -61 -61 -61 -61 -62 -61 -61 -64 -64 -64 -65 -65 -64 -64 -64 -64 -64 -64 -64 -64 -63 -64 -64 -64 -64 -65 -64 -64 -64 -64 -64 -64 -63 -64 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -63 -62 -62 -62 -62 -62 -61 -61 -61 -61 -63 -61 -61 -61 -62 -62 -62 -62 -62 -61 -61 -61 -62 -61 -61 -61 -61 -61 -61 -61 -62 ...

Wenn ich nun die Cam zuhalte, müssten diese Werte sich doch verändern, egal auf welche Art und Weise. Dies ist zumindest nicht der Fall...

mfG
Batti

Uli
13.03.2005, 21:41
Hallo,

Habe auch heute mal eine GB Cam an meinen Atmel und 8Bit Grafikkarte angebastelt. Nach längeren suchen und einigen einstellungen habe ich auch ein Bild herrausbekommen. Das ganze Programm habe ich in C geschrieben werde es morgen noch ein bischen säubern und Dokumentieren. Also das Problem mit den 5V kenne ich, lag bei mir am C0 und C1 Register.

Mfg Ulrich

Uli
13.03.2005, 22:03
Hier der noch nicht ganz Fertige aber funktionstüchtige Source Code!

Mfg Ulrich

batti112
14.03.2005, 13:05
So habe nochmal groß getestet:
Registereinstellungen:
Reg0 = 0x80;
Reg1 = 0x0C;
Reg2 = 0x00;
Reg3 = 0x00;
Reg4 = 0x01;
Reg5 = 0x00;
Reg6 = 0x01;
Reg7 = 0x07;

Ergebnis:
... 172 174 168 171 175 173 172 172 169 173 172 172 175 168 174 169 170 165 167 166 174 174 170 176 170 173 170 169 176 171 175 177 172 170 175 175 169 170 168 177 174 173 169 174 171 174 173 167 176 174 175 174 179 172 182 171 176 175 172 167 175 172 177 180 171 174 174 174 171 172 174 174 176 172 176 175 176 174 177 181 162 150 170 170 163 167 169 171 167 170 169 169 169 168 173 164 167 169 167 174 167 174 161 166 173 167 164 164 169 168 169 168 177 169 166 168 166 169 167 170 161 169 169 171 167 166 167 171 167 167 170 172 168 170 170 163 161 169 170 173 170 176 177 173 170 170 171 168 173 171 172 175 172 170 171 171 165 174 172 167 167 170 169 170 172 171 171 175 176 175 171 167 172 176 168 175 169 174 171 170 171 171 172 177 179 167 174 175 168 171 172 181 176 184 178 178 169 176 171 178 179 172 177 175 178 179 175 178 161 160 166 169 172 171 172 167 164 168 168 168 169 174 172 168 171 172 166 166 168 172 168 169 167 169 170 169 170 169 172 174 166 173 168 170 170 168 166 175 166 165 168 173 168 171 167 164 171 166 168 171 175 167 171 174 175 173 173 172 168 172 168 167 169 168 174 176 172 165 171 174 175 172 172 161 171 174 164 171 167 179 173 171 166 169 176 173 173 178 175 176 172 178 174 177 172 178 182 183 180 177 175 177 171 172 177 180 168 172 176 176 176 167 179 167 179 173 177 179 171 172 183 174 179 172 181 173 163 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

Das Ergebniss ist garnicht so schlecht, aber:

1. Die Cam müsste doch bei "keiner" Belichtungszeit ein schwarzes Bild liefern (Output = 0, -> ca. 0V). Bekomme bei dieser Einstellung aber immer so ungefähr 3,1 V heraus, was mit dem AD-Wert übereinstimmt.
Ich sehe das aber doch wohl richtig, das die Cam Spannungen von 0-5V ausgibt, oder????

2. Frage warum bekomme ich nur 123x128 Pixel sowie 3x128: 255
Habe schon öfters gelesen das die Cam angeblich nur 123x128 Pixel liefert.




2. Versuch:
Registereinstellungen:

Reg0 = 0x80;
Reg1 = 0x0C;
Reg2 = 0x00;
Reg3 = 0x04;
Reg4 = 0x01;
Reg5 = 0x00;
Reg6 = 0x01;
Reg7 = 0x07;


...172 167 163 172 171 167 171 175 168 166 168 179 176 167 171 167 165 168 170 170 174 171 162 170 171 171 167 172 171 164 172 166 169 174 169 170 174 170 174 172 174 168 170 175 172 171 172 169 172 172 172 175 167 173 169 170 165 167 166 174 174 169 176 169 173 169 169 176 171 175 177 172 170 175 175 168 169 167 177 173 173 169 175 172 174 173 167 175 131 133 132 137 129 140 131 137 136 136 137 147 149 158 162 158 165 172 177 180 187 194 201 208 209 219 224 232 239 250 255 255 150 170 171 163 167 169 171 167 169 169 169 169 169 173 164 167 169 167 174 167 174 161 166 173 167 164 164 169 168 169 168 177 169 166 168 166 168 167 169 161 169 169 171 167 166 167 171 167 167 170 172 168 169 170 163 161 169 170 173 170 176 177 172 170 169 171 168 172 171 171 175 172 170 170 171 165 173 172 166 167 170 169 170 172 171 171 175 176 175 170 167 172 176 168 176 169 135 131 130 132 131 131 136 139 126 136 141 140 145 151 163 165 175 175 176 173 183 186 200 207 207 220 220 231 237 240 250 252 159 166 169 172 171 172 167 164 168 168 168 168 174 172 167 171 172 166 166 168 172 168 169 167 169 170 168 169 169 172 172 167 172 168 170 170 168 165 174 166 165 167 173 168 171 167 164 171 166 168 171 174 167 171 173 175 173 172 172 168 172 168 167 169 168 174 177 172 165 171 173 175 172 172 161 171 174 164 171 167 179 172 171 165 169 175 173 173 179 175 176 172 178 174 177 172 136 140 141 139 137 134 136 132 132 141 146 136 143 151 155 158 156 172 164 182 179 189 194 193 199 215 210 222 222 238 239 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255


3. Versuch:

Registereinstellungen:

Reg0 = 0x80;
Reg1 = 0x0C;
Reg2 = 0x00;
Reg3 = 0x10;
Reg4 = 0x01;
Reg5 = 0x00;
Reg6 = 0x01;
Reg7 = 0x07;

...255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 115 128 135 133 129 147 152 162 168 177 198 194 209 220 231 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 115 132 129 129 136 143 143 157 171 175 181 201 209 215 231 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 109 129 130 122 127 135 147 153 166 176 185 195 205 222 222 235 248 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 120 127 129 131 130 137 140 147 160 171 182 190 206 215 219 233 247 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255...


4.Versuch

Registereinstellungen:

Reg0 = 0x80;
Reg1 = 0x0C;
Reg2 = 0x01;
Reg3 = 0x00;
Reg4 = 0x01;
Reg5 = 0x00;
Reg6 = 0x01;
Reg7 = 0x07;

...255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255...

Wie man sieht, scheint die Cam viel viel zu empfindlich zu sein.
Habe die Cam bei normaler Beleuchtung (tagsüber :cheesy: ) getestet.

Was haltet ihr von diesen Ergebnissen?
Woran könnte dies liegen?

Uli
14.03.2005, 13:20
Hallo,

Habe festgestellt das die Camera einen min Takt und einen Max Takt zum auslesen der Bildinformationen hat. Max Takt von 500KHz war mir ja laut Datenblatt bekannt. Meine Ausleseroutine funktionierte einwandfrei, bis ich die Werte über serrielle Schnittstelle einzelt ausgegeben hatte. Dann waren alle Werte gleich. Somit Speicher ich nun alle Werte in einen SRAM und gebe dann diese Werte über Serielle Schnittstelle aus.

Mfg Ulrich

batti112
14.03.2005, 13:41
Danke für die Antwort Uli,
wie du aber doch siehst, sind die Werte bei sehr sehr niedriger Belichtungszeit nicht gleich. Und die vom A/D-Wandler gemessene Spannung stimmt ja mit der von mir gemessen Spannung überein (ohne Oszi gemessen).

MrNiemand
14.03.2005, 16:13
hm das ist komisch, genau das mache ich auch die CAmdaten direkt ohne Pufferung oder so über rs232 zu üübertragen wobei es auch egal ist, welche Baudrate ich genommen habe!

Das die Cam sehr empfindlich ist erwähnte ich bereits, und die Register C0 und C1 sind ja genau für die Bleichtungsdauer da.

Ob Aber hellere Bildpunkte einem höherem oder niedrigerem Spannungswert entsprechen sollen kann (wie immer) über Register festgelegt werden.

batti112
14.03.2005, 17:23
Habe jetzt mal per Registereinstellung die Referenzspannung auf 0,5 V geändert (mit minimaler Belichtungszeit).

Registereinstellungen:
Reg0 = 0x80;
Reg1 = 0x0C;
Reg2 = 0x00;
Reg3 = 0x02;
Reg4 = 0x01;
Reg5 = 0x00;
Reg6 = 0x01;
Reg7 = 0x01;

Das Ergebnis:

...59 64 69 64 67 59 62 60 66 60 63 65 61 65 66 59 67 64 60 65 64 62 59 62 62 60 66 65 61 60 64 62 65 60 63 64 63 57 65 70 68 62 65 67 65 67 68 59 65 63 66 69 65 64 63 67 66 62 67 62 65 62 66 65 68 61 65 64 71 71 70 63 72 66 64 68 63 64 64 65 70 68 67 65 62 69 75 62 67 68 70 63 71 65 71 69 72 33 39 29 33 27 28 26 33 31 44 39 43 43 48 47 42 50 60 61 63 61 61 67 64 63 63 62 59 68 64 58 60 69 69 62 62 65 60 66 65 61 64 61 60 68 62 63 63 61 60 61 66 59 62 60 63 66 61 72 57 64 64 65 64 61 64 67 63 60 58 64 63 64 67 63 60 65 69 64 67 67 64 67 65 66 72 67 71 73 64 65 68 67 67 66 63 65 67 62 67 62 63 70 68 64 69 66 64 70 66 65 65 68 64 63 67 69 68 68 72 68 70 69 65 67 66 70 69 29 36 33 31 28 32 30 27 31 32 35 41 49 54 49 45 48 63 61 63 62 62 60 60 60 65 72 67 65 68 65 66 57 69 63 66 65 62 60 64 55 65 57 67 65 60 63 62 62 66 69 62 59 63 58 65 61 60 62 64 63 70 63 67 68 63 60 60 67 64 64 62 63 71 68 67 64 71 61 58 59 64 64 64 60 61 70 58 64 65 63 66 63 66 64 68 60 70 67 70 63 69 65 69 72 69 60 63 61 71 65 66 63 69 61 71 73 68 65 74 66 68 76 77 69 70 66 68 28 28 33 32 35 32 28 34 30 32 31 37 49 51 48 50 50 62 63 67 58 67 58 66 64 70 61 63 66 63 62 62 65 68 61 68 67 63 60 62 67 63 63 63 60 58 62 64 65 70 62 67 64 66 68 60 64 57 63 64 62 66 63 72 61 60 68 67 63 67 59 67 65 65 70 65 66 64 69 60 64 63 59 62 68 60 63 61 67 64 65 68 66 72 67 68 67 67 74 67 62 62 71 69 67 71 64 75 66 67 68 71 66 67 74 69 71 71 70 76 67 74 63 72 67 72 65 71 28 33 31 34 28 32 35 31 28 31 35 36 44 48 55 39 52 70 65 64 61 66 63 67 67 59 62 64 66 69 60 68 58 64 56 63 65 65 65 64 66 67 62 60 63 64 60 65 60 66 60 63 64 67 61 65 61 63 62 68 62 55 63 67 62 57 67 62 62 67 61 62 65 63 65 66 64 65 61 63 68 67 68 65 70 62 62 72 66 69 65 61 68 62 66 67 66 68 65 61 64 63 70 71 72 72 68 64 70 63 69 73 71 65 65 70...

Garnicht mal so schlecht.
Allerdings wundert es mich, dass meine Konfiguration der GB-Cam soweit von den Konfigurationen der anderen Abweicht.

MrNiemand
15.03.2005, 17:12
wie schon gesagt, ist ganz normal ich hab auch ganz kurze belichtunsgdauer!

batti112
15.03.2005, 17:38
Ok!, das ist schonmal gut.

Wundert mich halt nur, dass man die belichtungsdauer so weit hochschrauben kann... Und manche sie auch so weit hochschrauben können... (tutorial etc.)

MrNiemand
15.03.2005, 17:41
je nach Verstärkung der Picelwerte usw. kann man mehr gebrauchen, außerdem ist es nice wenn man in ziemlich dunklen räumen bilder macht!

batti112
28.03.2005, 01:56
Habe jetzt mal bisschen rumgebastelt, so dass man sehen kann was für "Bilder" die Cam schießt.
Die Belichtungszeit muss ich absolut minimal halten, damit die Cam nicht gleich ein weißes Bild schießt (d.H. Register 2 = 0, Register 3 max 5).

Habe mal ein paar Shots gemacht, wie man sieht ist das 0_0 (Register2=0 Register 3 = 0) das beste Ergebnis, da es am dunkelsten ist.

Danach "reißt" das Bild immer mehr ein...

Kann jemand dieses Ergebniss deuten?

Komme da momentan überhaupt nicht mehr mit klar, überlege schon ob ich nicht eine CMU-Cam kaufen sollte....

mfG
Batti

batti112
28.03.2005, 02:06
Wenn ich mir allerdings die bedienung der CMU-Cam durchlese, dann kann ich die wohl eher vergessen, wenn ich nicht einmal die GB-Cam zum laufen bekomme

MrNiemand
28.03.2005, 10:03
hab ich dir ja gesagt das die Belcihtungsdauer extrem kurz sein muss. Die dunklen streifen passen auch liegt an den Register eintellungen! Zeig doch mal wovon dun Bild gemacht hast denn wenn du von nem Blatt Papier ein Bild gemacht hast passen die einstellungen ;)

batti112
28.03.2005, 10:20
Ich habe mit der Cam ein Bild von meinem Schreibtisch herunter auf die Erde gemacht gemacht (-> recht großer Abstand).

Werde jetzt gleich mal den Edge-Modus Probieren, und dann mal gucken ob sich etwas erkennen lässt.
Ich hab mal gelesen, dass wenn man zu langsam die Pixel ausliest, das diese dann irgendwie verfallen(fragt mich nicht wo ich das gelesen habe).

Da ich alles über den I2C-Bus mache, und immer warten muss bis dieser frei ist, weiß ich nicht wie meine Timings sind. Wenn ich die im Programm verwendeten delays abändere, ändert sich allerdings das Bild nicht
(dann könnten die Timings ja nur zu lang sein).

Werde gleich auch mal meinen µC statt mit 4Mhz mit 16 betreiben,
dies müsste ja ein wenig mehr Speed bringen...

batti112
28.03.2005, 10:23
Mr. Niemand, wenn du dir mal so meine Bilder anguckst, mit welchen Belichtungszeiten würdest du denn experimentieren?

MrNiemand
28.03.2005, 10:52
naja das datenblatt gibt ne mindest taktrate von 0,5khz an ;)

Die Bleichtung würd ich auf wen minimal wert setzen also das höhere der beiden register auf 0 das andere auf 1 setzen!

Probier mal die "Pixel Verstärkung zu erhöhen"

Immerhin kannst durch den schwarzen Streifen unten Fehler beim Aufbau auschließen ;)

Ach das "einreisen" hab ich bei mir am Anfang auch für überbelichtung usw gehalten im Endeffekt waren es aber die ersten Teile des Bildes die erkennbar waren!!!

batti112
28.03.2005, 10:59
Ja, das stimmt, aber ein Bild auszulesen dauert bei mir ohne delays so ca. 15sek. Ist bei dir die Zeit auch so hoch? (Finde das ein wenig lang, wenn ich bedenke das manche angeblich unter 1fps kommen).
Und was hälste von meiner Theorie dass das auslesen einfach zu lange dauert?

Ich werde jetzt einfach mal ein bisschen rumprobieren...

MrNiemand
28.03.2005, 11:03
wenn ichs direkt über seriell jage ohne Puffer usw. dauert es bei der höchsten Baudrate von 115kb (I"C ist ja noch schneller) max. 1-2sec bei niedriger Baudrate hatte ich aber auch keine Probleme da hast ziemlich lang gedauert, aber wie bringst du ne zeit von 15sek zam????

batti112
28.03.2005, 11:38
Die Zeit entsteht beim auslesen des Bildes.
Habe erst mit 2 for-Schleifen gearbeitet, die einfach 128x128 Pixel auslesen,
d.H 128x128 mal den PCF8591 ne Spannung auslesen lassen.
Danach habe ich ne while Schleife genommen, die solange den PCF8591 ne Spannung auslesen lassen, wie am PCF8574 der Read-Pin High ist (funktioniert auch, nach 128x128 geht er auf low).
Problem bei dieser Art ist halt nur das ich 2 unterschiedliche I2C Module ansteuern muss...

Wenn ich nun zu der For-Schleifen Methode zurückgehe und die Pixelwerte nur auslese, nicht versende ist die Cam nach ca. 2sek. fertig.
Habe das Uart nur mit 9600kBaud konfiguriert, denke ich sollte das mal schneller machen, wa?

MrNiemand
28.03.2005, 12:10
2sek da geht kein bild verloren! hab es am anfang auch so lagsam übermittelt mit 9600erbaud über rs232 direkt raus und es hat gefunzt man musste halt nur lange warten, bis das Bild übermittelt war ;) aber es sieht dann bei mir noch genauso aus wie wenn ichs schneller sende!

ich habe es so gemacht ne while schleife bis der adc signalisert wandeln fertig, dann die vorgeshene zeit gewartet bis nächster pixel übermittelt ist , dann wieder gewartet bis adc sagt fertig!

stell doch mal deinen source rein, ich kenn mich zwar net mit C aus aber ich schaus mir mal an!"

batti112
28.03.2005, 12:34
Hier der benutzte Wichtige Code, wie gesagt die Timings sind egal.
Kann da einstellen was ich will.
Die delay_us Funktion sieht wie folgt aus:

void delay_us( unsigned short us )
{
while( us ) us--;
}

Nachtrag:
Ohne die Übertragung per Uart brauch der µC fast genau so lange auch über 10 sek.
Ich glaube es liegt einfach daran, das ich 2 unterschiedliche Module per I2C Ansprechen muss, und immer wieder eine Start-Bedingung auf den Bus legen muss, und zum Schluss eine Stop-Bedingung.
Die Zeit dafür scheint einfach zu lange zu dauern, besonders weil man ja immer warten muss bis der Slave antwortet...

MrNiemand
28.03.2005, 12:44
wieso verschwendest du soviel zeit damit den takt über i2c herzustellen nehm doch dafür direkt die avr pins!!!!!
und genau deswegen kann ich nich sagen obs schnell genug ist usw. du verwendest zeit in die sub zu springen (ist ja beim avr rechtl nagsam in den standartoptionen da erst alle register gespeichert/widerhergestllet) werden

mach einfach liber direkt über die pins vom avr die signale und dirket die pause rein! auf 2us secs ssetzen fürn anfang und des passt!
und wieso machst du ne schleife in erdu auf die genau pixelzahl 128*128 wartest? es gibt auch bilder mit weniger Pixeln!

Aber allgemein gesagt du scheinst überhaupt nich auf dei TImings der Cam geschaut zu haben, jeder Pegelwechsel hat ne definierte Periode!

batti112
28.03.2005, 12:45
Nochmal zu der Sache :
Denke es handelt sich einfach um einen Konstruktionsfehler meines Cam-Boards. Werde es wohl nicht hinbekommen die Cam nur über diese beiden I2C Bausteine in den Bus zu bekommen, da muss wohl ein eigener µC her...

Falls mich niemand ;-) (tolles wortspiel) vom Gegenteil überzeugen kann, werd ich mir wohl mal heut abend ein neues Board aufbauen um die Auslese Zeit zu verkürzen, d.H. mit einem µC und nur dem I2c AD-Wandler...

Besten Dank für die ganze Hilfe!

mfG
Batti

batti112
28.03.2005, 12:53
Oh, da haben wir wohl gleichzeitig geschrieben.

Zu den Timings:
Ich habe am Anfang sehr genau versucht die Timings "nachzubauen".
Als ich aber keine guten Ergebnisse erhalten habe, habe ich begonnen mit den Timings rumzuspielen. Wie ich bei dem Code beigeschrieben habe ist es total egal wie ich die Timings einstelle, und wo ich noch delays einbaue, das Ergebniss ist immer das gleiche.Desweiteren wusste ich auch nicht wie lange die jeweiligen Operationen auf den I2C Bus dauern...(Anscheinend dauern diese ja länger als die 2us, da ich ja weit länger als die 2sek. für ein Auslesen des Bildes benötige)

Zu den for-Schleifen:
Habe ja normalerweise auch eine While-Schleife benutzt, die solange lief wie die Cam ein Bild sendete(was 128x128 Pixeln entsprach).
Die For-Schleifen habe ich nur genommen, um an der Stelle ein wenig Zeit zu sparen, dadurch das ich diese Überprüfung (Abfrage der Porterweiterung übern I2C-Bus) weglasse.

Werde aber deinen Rat befolgen und die Timings direkt über einen µC machen
(siehe vorherige Antwort).

Besten Dank
Batti

batti112
01.04.2005, 12:56
So, ich habe jetzt mal wieder größer getestet.
Habe die Cam direkt an den µC angeschlossen (Atmega 8, 4Mhz, 9600Baud).
Als AD-Wandler dient aber immernoch der PCF8591.
Habe eigenen Code benutzt, sowie den für mich angepassten Code von Uli (danke für den Code!). Die Ergebnisse sind die selben:

Das Auslesen eines Bildes dauert immernoch deutlich über 10 Sek.
Schuld scheint das UART zu haben, wenn ich die Pixel nicht übers UART versende dauert das Auslesen nur 3Sek.
Daraufhin habe ich einfach mal 128*128 Werte unabhängig von der Cam per Uart verschickt, dies dauerte ca. 15Sek.!!!!!!!!!! bei 9600Baud
Kann so also garnicht auf eine kurze Zeit kommen...

Die Bilder an sich sind zum Großteil Müll, nur ein kleiner Teil am Rand (der "eingerissene" Teil) zeigt ein Abbild der Umgebung. Habe Bilder die eindeutig den Trafo meiner Deckenlampe zeigen(siehe Anhang).
Mr. Niemand, du meintest das du am Anfang auch dieses Einreißen hattest.
Ein Verändern der Pixelverstärkung bringt zwar schöne Konturverbesserungen, allerdings bleibt die Größe des Eingerissenen Bereiches die selbe.
Wie konntest du das Problem abschalten?
Liegt dies an dem Timing?
Was passiert bei dir, wenn du ein Bild in 15sek aussliest?

mfG
Batti

MrNiemand
01.04.2005, 19:36
jo dieses einreisen am anfang hat mich davon abgebracht total auszuflippen und zu fluchen weil es net funzt, weil ich durch zufall gesehen habe das es ein teil der umgebung ist.

Selbst so ne lange lesedauer sollte noch machbar sein.

Wenn das der Trafo der Deckenlampe ist, war die Lampe dann an?

wenn mgl. dimm sie mal runter und versuchs dann

batti112
02.04.2005, 09:22
Mit den Beleuchtungszuständen meines Zimmers hat es nichts zu tun. Die Lampe war dieganze Zeit aus, die Halogenstrahler sind auf den Bildern auch garnicht erkennbar, weil sie nicht im Bereich des Bildes liegen.Habe die ersten Bilder meiner Lampe tagsüber (Zimmer im Sonnenlicht) gemacht. Abends als es dunkel war habe ich die Belichtungszeit erhöht, und hatte die selben Ergebnisse.

Hast du denn dieses Einreißen nur dadurch wegbekommen das du an der Belichtungszeit oder der Pixelverstärkung rumgespielt hast?

MrNiemand
02.04.2005, 11:24
am anfang hab ich nur die helligkeit im zimmer verrringert. und bei ziemlich wenig licht im zimmer kam dann ein erstes erkennbares bild, dann hab ich die Pixelverstärkung geändert!°

batti112
04.04.2005, 15:10
Bekomme es irgendwie nicht hin.
Welche Register hast du denn genau verändert?
Bist du so nett und postest mal deine Konfig.?

Der "eingerissene" Bereich wird je nach Konfiguration mal größer und mal kleiner.
Komme aber nie über 1/3 des Bildes.

mfG

Batti

MrNiemand
04.04.2005, 16:40
naja die konfig hab ich gerade nicht da werd sie aber mal suchen *fg*

probier das höherweritege register auf 00 das niederwertige register der bleichtung auf 01 zu setzen

batti112
05.04.2005, 12:48
Was meinst du mir 01?
Das steht in dem Datenblatt für die Kamera auch drin, du meinst doch sicher 0x01 also = 1, oder?

Hier sind erstmal meine Einstellungen:
Reg0 = 0x80
Reg1 = 0x14
Reg2 = 0x00
Reg3 = 0x0E // bei dieser Belichtungszeit ist das Bild am besten (siehe Anhang)
Reg4 = 0x01
Reg5 = 0x00
Reg6 = 0x01
Reg7 = 0x01 // möglichst niedirge Vref, bei 0x00 funktionierte es irgendwie garnicht

Ich bekomme es nicht hin eine Belichtungszeit zu finden, bei der ich ein sauberes Bild bekomme. Die unteren Bilder sind bei normaler Beleuchtung gemacht worden, und es gab keine Lichtquelle die die Cam blenden konnte...

batti112
05.04.2005, 13:18
Habe es nun geschafft ein vernümpftiges Bild zu machen, indem ich am Register1 rumgeschraubt habe. \:D/

Reg0 = 0x80
Reg1 = 0x03
Reg2 = 0x00
Reg3 = 0x14
Reg4 = 0x01
Reg5 = 0x00
Reg6 = 0x01
Reg7 = 0x01

Wenn ich die Cam allerdings ein wenig ins Licht halte, erhalte ich nurnoch ein gleichmäßig graues Bild.
Wie macht ihr das mit den Einstellungen?
Gibt es da nen trick, wie man ganz einfach die Register anpassen kann?

Es kann doch nicht sein, dass man je nach Beleuchtung ne Stunde rumprobieren muss, bis man vll. nen Bild bekommt...

MrNiemand
05.04.2005, 16:22
sieht doch schon viel besser aus auch wenn du das deiner meinung nach gute nicht gepostet hast *Fg* mit 00 und 01 hab ich die wertigkeit der 8bit register c0 und c1 der belichtung in hex gemeint.

Nach jedem auslesem vom Bild kannst du die Register ja wieder verändern, d.h. du kannst dir z.b. eine Routine schreiben die die Belichtungsdauer ändert. Möglichkeinten hier wäre über ein LDR oder Über die Pixelhelligkeit oder über die ausgabe der cam (Bild mit 2Pixelreihen die dem Mittelwert der Helligkeit entsprechen)

=> Z.b. wenn ein Bild im Durchschnitt heller ist als 128 belichtungsdauer runter wenn dunkeler dann belichtungsdauer hoch.

über ein LDR ist es vom Programmieraufwand her geringer, aber u.u ist das Ergebnis nicht so gut (z.b. hell am bot aber dunkel am Objekt)

batti112
05.04.2005, 17:36
Die Helligkeit anzupassen ist denk ich nicht so sehr problematisch.
Anscheinend reicht dies manchmal nicht aus, ich muss auch noch an der Pixelverstärkung "rumschrauben", weil ich sonst wieder weiß "eingerissene" Stellen bekomme. Dies zu automatisieren stell ich mir schwierig vor.
Desweitern hab ich bei den Bildern noch ein schwarz-grau Übergang (von links nach rechts), den konnte ich bis jetzt nicht beseitigen(siehe Anhang).

Kannst du mir nicht einmal deine Register-Konfig. posten?
mfG
Batti

MrNiemand
05.04.2005, 20:36
wie du schon gemekrt hast, bei jeder minimalen änderung der helligkeit im zimmer ist es ganz anders was man braucht an registereinstellungen!

das ist bei mir nicht anders, und da du bei einer belichtung scheinbar ein gutes bild hast, stimmt die grundkonfiguration und wie du schon sagst belichtungsdauer und pixelversätrkung müssen angepasst werden!

aber hier mal meine config ( als code auschnitt eines älterne source ):

'Bits für Adr.: 000
R0(1) = 0
R0(2) = 0
R0(3) = 0
R0(4) = 0
R0(5) = 0
R0(6) = 0
R0(7) = 0
R0(8) = 1

'Bits für Adr. 001
R1(1) = 0 '0
R1(2) = 0 '0
R1(3) = 1 '1
R1(4) = 1 '0
R1(5) = 0 '0
R1(6) = 0
R1(7) = 0
R1(8) = 0

'Adr.: 010 'BelichtungszeitC1
R2(1) = 0
R2(2) = 0
R2(3) = 0 '0
R2(4) = 0 '0
R2(5) = 0
R2(6) = 0
R2(7) = 0
R2(8) = 0

'Adr.: 011 'BelichtungszeitC0
R3(1) = 0
R3(2) = 0
R3(3) = 0
R3(4) = 1
R3(5) = 1
R3(6) = 0 '1
R3(7) = 0 '1
R3(8) = 0

'Adr.: 100
R4(1) = 1
R4(2) = 0
R4(3) = 0
R4(4) = 0
R4(5) = 0
R4(6) = 0 '0
R4(7) = 0
R4(8) = 0 '0

'Adr.: 101
R5(1) = 0
R5(2) = 0
R5(3) = 0
R5(4) = 0
R5(5) = 1 '0
R5(6) = 0
R5(7) = 0
R5(8) = 0

'Adr.: 110
R6(1) = 1
R6(2) = 0
R6(3) = 0
R6(4) = 0
R6(5) = 0
R6(6) = 0
R6(7) = 0
R6(8) = 0

'Adr.: 111
R7(1) = 1
R7(2) = 1
R7(3) = 1
R7(4) = 0
R7(5) = 0
R7(6) = 0
R7(7) = 0
R7(8) = 0

welches register welches ist denk ich siehst du durch die adresse
das höherwertige Bit ist Rx(8) das niederwertigste Rx(1)

=> D7 entspricht Rx(8) ; D0 entpricht Rx(1)

die einstellungen hatte ich so umständlich da ich so leicht was ändern konnte!

batti112
05.04.2005, 20:50
Danke für die Mühe Mr. Niemand!

Ich denke das ich die Helligkeit des Bildes nutzen kann, um die Belichtungszeit softwaregesteuert anpassen kann. Aber die Pixelverstärkung den Bildern anzupassen, damit dieses weiße Rauschen oder die "Nebelschwaden" aufhören, das stell ich mir sotwaremäßig schwer vor.

Es gibt aber doch nun einige in diesem Forum die die GB-Cam für ihren Robby nutzen/nutzen wollen. Wenn es aber doch so schwierig ist die Cam geänderten Umgebungen anzupassen, dann scheidet sie doch als Roboter-Cam aus... oder irre ich mich?

Wie macht man das denn dann richtig?

Nachtrag: Habt ihr auch einen schwarz/grau Übergang? (siehe Bild)

MrNiemand
06.04.2005, 18:20
naja viele im fourm laber die wildesten sachen zu gbcam haben dabei aber keine Ahnung!!!

hast du immer links schwarzes stück und rechs grau? kriegst du das mit rumspielen mit den registern weg?

dann wär es evl ne möglichkeit sich die entprechenden eckpunkte bei der korektur mal anzukucken und entsprechend ändern zu lassen

batti112
08.04.2005, 12:05
So, ich scheine es nun so weit zu haben, dass ich nur noch die Belichtungszeit anpassen muss.
Auch der schwarz/grau Übergang ist nicht mehr so schlimm (hat sich irgendwie von alleine erledigt.... )

Wenn ich nun aber meine Uart Geschwindigkeit auf 38400 bit/sek erhöhe benötige ich immernoch so an die 4sek. um ein Bild zu Übertragen.
Wie macht ihr das?(Baudrate + µC Taktung)
Arbeite mom. wie schon gesagt mit 38400 + 16Mhz,
wobei 7,3728Mhz Quartzoszi nehmen werde, damit ich auch sicher sein kann, dass der Uart - Fehler möglichst gering ist.

Edit:

Habe nochmal ein wenig getestet, bekomme ich Probleme wenn ich 2 Lichtquellen habe (Tageslicht + Zimmerbeleuchtung). Ich fürchte auf die Dauer muss da eine andere Cam her...

pebisoft
10.04.2005, 09:37
bei conrad für 13 euro s/w cmoscamera und steckplatine dazu für 3 euro.
hervorragend.
mfg pebisoft

McNugget
20.04.2005, 22:22
witzbold, und wie willst du die mit einem AVR auslesen?

Ich meine: Extrem billig sind die ja! Keine Frage, aber Composit-Video ist ja mehr als komplex!

batti112
20.04.2005, 23:16
Also ich muss sagen:
-Es hat wirklich lange gedauert bis ich soweit war ein Bild auslesen zu können (habe miich aber auch stellenweise ein wenig doof angestellt...)
-Die Kamera reagiert bei mit immernoch recht empfindlich auf unterschiedliche Belichtungen
(muss ich bei der Anzeige noch ein wenig ausbügeln)
-Das Übertragen dauert recht lange
nutze 115200 Baud/sek -> ~1,14sek pro Bild nur für Übertragung(128x128 Pixel)
- Aber ich benötige keinerlei zusätzliche Hardware!
- Ich benötige keine 2 "Datenleitungen" (Funkübertragungsset für Kamera/ Roboter)
- diese Kamera ist günstig

Also ich denke das diese Kamera zum experimentieren wirklich ideal ist.
Wer nur ein besseres "Modellbauauto" mit Kamera haben möchte, für den sind die Cmos-Cams wirklich perfekt.
Wer aber diese Bilder auswerten will, der benötigt zusätzlich einiges an Hardware.
Und in diesem Fall ist die GB-Cam die günstigere Wahl.

mfG

Batti

McNugget
20.04.2005, 23:20
Wer aber diese Bilder auswerten will, der benötigt zusätzlich einiges an Hardware.
Und in diesem Fall ist die GB-Cam die günstigere Wahl.

mfG

Batti

Und genau das ist ja bei dir der Fall, denke ich :)
Bei mir ebenso und ich denke einige hier denken auch so. Den Roboter mit einer Composite Camera auszustatten nützt ja ohne PC im Hintergrund recht wenig, denn ein µC reicht nicht um die Signale der CMos Camera auszuwerten.

Gruß
Timo

pebisoft
21.04.2005, 08:33
hallo, ich übertrage das bild von der cmoskamera von conrad vom robby über den videosender(auf dem robby) zum pc. auf dem pc versuche ich ein grafikprogamm/auswerteprogramm , welches die übertragenden bilder nach hindernissen auswerten soll (ca 2bilder pro sekunde). da ich vom videoempfänger, der auch ein ir-steuer-impuls zum video-sender senden kann (ist dafür gedacht, das man evtl den fernsehsender oder den videorecorder steuern kann) ,fährt der robby auch ohne meine hilfe durch den raum, nur anhand der bilderauswertung und durch die ir-steuersignale zum robby (ir-signale-rc5 haben 14bit). bei einem unfall des robbby (festfahren) kann ich weiterhin vom pc aus über die ir-signale den robby aus dieser situation befreien. die günstige anschaffung der cmoskamera und dem videosender/empfänger kompesieren den betrag wieder gegenüber der gameboy-kamera und den zusätzlichen bauteilen einschliesslich des avr, der nur für die gameboy-datenauswertung vorhanden sein muss, wenn der robby noch andere aufgaben ausführen soll. die -ir-signale gehen auch über funk ca 30m durch decken und wände.
mfg pebisoft

pebisoft
21.04.2005, 09:01
hallo, euer projekt ist aber trotzdem interessant.
habt ihr die auswertung auch mit einem avr ohne zusätzliche umwandler probiert, nur am adc-port des avr und auf 115000bit.
mfg pebisoft

McNugget
21.04.2005, 09:23
Hallo pebisoft!
Bei mir wird (hab noch keine) die Camera direkt an den 10 Bit ADC angeschlossen werden. Da es ein mega 128 sein wird, hat der sogar die kapazitäten ein ganzes Bild aufzunehmen, wenn ich mich nicht täusche. Damit sollte sich die Komplexität im Rahmen halten denke ich. Wenn das wirklich nicht funktionieren sollte, dann muss halt wirklich ein externer ADC ran, aber das hoffe ich einfach mal nicht. Ziel ist nat. eine Bildauswertung. Ob ich da nur 0.5 fps habe ist mir da (noch) nicht so wichtig. Objekte erkennen und Räume abtasten ist das Ziel dern Übung :)

Gruß
Timo

pebisoft
21.04.2005, 13:24
das program von uli in c finde ich gut.
was ist das für eine grafikkarte, die dort angesteuert wird.
gibt es ein exe-programm um die daten der camera auf dem pc als bildpunkte darzustellen.
mfg pebisoft

pebisoft
21.04.2005, 13:31
hallo, ich bastele auch gerne mit dem avr und eine bildauswertung direkt am avr ist eine unabhängige sache. ich werde es mal mit dem avr16 8mhz ausprobieren und die daten im i2ceeprom 24c256 ablegen.
vielleicht finde ich mal eine günstige camera.
melde dich mal, ob es mit dem adc des 168 geht.
mfg pebisoft

pebisoft
29.04.2005, 22:45
hallo, hat eienr schon die kamera nur allein mit dem avr in betrieb genommen und die bilder am pc auswerten können.
mfg pebisoft

tobimc
30.04.2005, 08:22
Hi

Ich bastle auch gerade an sowas. Mit nem Mega8 und 128kb externem parallel-RAM.

Ich habe nur eine Frage: Die Gameboy-Cam hat doch einen Connector mit 9 Buchsen. Frage: Ist das normales 2.54mm Raster, oder irgendwas exotisches?

Liebe Grüße,
Tobi

Ps:
Herzlichen Glückwunsch, pebisoft zu den 1000 Beiträgen!!

pebisoft
30.04.2005, 08:50
hallo, dieses raster kann man nicht gebrauchen. ich schneide die kabel ab und löte eine standartbuchsenreihe dran. den kugelkopf lasse ich als schutz dran, er ist doch recht klein nachdem man das grosse gehäuse abgebaut hat. die elektronik ist so dann schön vor beschädigungen und statischen aufladungen geschütz.
wie hast du am mega8 dein parallel-ram angeschlossen???
melde dich mal wieder.
"1000 beiträge", auch kritische beiträge zum beleben der seite waren dabei, aber immer über der gürtellinie.
mfg pebisoft

tobimc
30.04.2005, 09:07
Hi!

Naja, es gibt einen 8Bit Hauptbus.
Es werden 16 Adressleitungen des Rams damit angesteuert, und zwar über 2 74HC573. Danach wird ins RAM geschrieben, denn der Datenbus hängt auch an den Datenleitungen.

Da ich vor habe, die Technik in nen zimlich kleinen Roby zu verbauen... werde ich die Kugel (wenn ich ne cam habe... :D)
auch abnehmen.

Standardbuchsenleiste... Mist. Ich hab mir ein "steck' die Platinen aufeinander"-System ausgedacht, und da dürfte nur wenig Platz sein. Mal sehen...

Meinst du dass ADC6 und ADC7, die ja eh (und Gott sei Dank) nur 8-Bit AD-Wandlung machen können für die Sache schnell genug sind?

Auch das Bild soll auf dem M8 ausgewertet werden. Aber nur sehr sporadisch. Aber erst mal Platine malen... :D

Liebe Grüße,
Tobi

pebisoft
30.04.2005, 12:31
hallo, mit dem demoprogramm und avr16 mit 16mhz und baud 57600
kommen als adc-wert immer 999. ich gebe den adc-wert in 10-bit aus.
ist die frequenz zu schnell. wo müssen noch ruhezeiten eingefügt werden.
mfg pebisoft

tobimc
30.04.2005, 13:24
Hi pebisoft!

Brobiers doch mal mit dem ADC-Interrupt! On ADC ...

Gerade sind meine 128kb gekommen *freu*

Grüße,
Tobi

pebisoft
30.04.2005, 14:02
welche referenzspannung muss eigentlich für diese adc-spanung vom gameboy genommen werden. ich habe noch 5volt dran.
mfg pebisoft

tobimc
30.04.2005, 14:07
HI

Jo, 5 Volt sei laut www.juliprograms.de richtig!

Liebe Grüße;
Tobi

pebisoft
30.04.2005, 15:41
hallo, wann wird im dem programm-demo "v0.01.zip" eigentlich das foto geschossen. finde keine startmöglichkeit, weil es in einer while-schleife eingebunden ist.
mfg pebisoft

pebisoft
30.04.2005, 19:31
hallo batti112, kannst du einmal ein programm, womit du deine bilder auf dem bildschirm darstellen kannst reinstellen. im welchen bereich schwanken deine bytedaten.
mfg pebisoft

tobimc
30.04.2005, 22:26
Hi!

Also in C müsst's gehen, dass man das als Bitmap abspeichert, aber fragt mich nicht, wie das geht, da muss ich erst in meinr Fibel lesen.

Sonst würd ich einfach nen Screenshot machen.

Wie erstellt man eigentlich Grauwerte (Aus ADC-Werten... :D) für RGB? Also ich habe 3Bytes, die ich beschreiben kann.

Ganz liebe RAM-Grüße,
Tobi

Michael
30.04.2005, 22:36
Hallo tobimc,


Sonst würd ich einfach nen Screenshot machen.
Screenshot wovon?


Wie erstellt man eigentlich Grauwerte (Aus ADC-Werten... Very Happy) für RGB? Also ich habe 3Bytes, die ich beschreiben kann.
indem du jedem Byte den gleichen Wert gibst, ergibt sich ein Grau. Viel Wert = mehr Weiß, wenig Wert = mehr Richtung Schwarz.
Gruß, Michael

tobimc
30.04.2005, 22:54
Hi Michael!

Einen Screenshot von dem Bild, das die Cam gemacht hat.. :D

Ah sehr gut!
Dann lässt sich das mit C sehr gut machen!

Liebe Grüße,
Tobi

pebisoft
01.05.2005, 08:44
hallo tobimc, hast du dein ram eingebaut.
kannst du einmal den schaltplan posten von deinem ram am avr8.
kann auch von hand gezeichnet sein.
mfg pebisoft

pebisoft
01.05.2005, 08:48
hallo, meine gameboydaten haben im adc-wert einen maximalen zahlenabstand im gesammten bild von der niedrigsten stufe bis zur höchsten von ca "30" also von 198 - 231 z.b.
hat denn mal einer ein einfaches programm um die zahlen in grauwerten darzustellen in visula-basic als compilat zum beispiel.
mfg pebisoft

tobimc
01.05.2005, 10:07
Hi

Also im Moment hat avatar, der kräftig mitentwickelt (sprich: Er hat die ganze Hardware aufgestellt) hat, einen Schaltplan gezeichnet.

DANKE NOCHMAL!

Ich bin gerade am Layout. Die 573er 'halten' die Adresse fest.

... und das kommt auf ungefähr 35cm²...

Liebe Grüße,
Tobi

pebisoft
01.05.2005, 12:20
hallo, ätzt du die platinen für den ram und den avr.
mfg pebisoft

tobimc
01.05.2005, 12:35
Hi

Klar. das RAM kriegst du garnicht ausser SMD, ausserdem passt das sonst nicht in mein geplantes Projekt.

Magst du's ätzen nicht?

Liebe Grüße
Tobi

pebisoft
01.05.2005, 14:53
sag , mal könntest du für mich 2 platinen mit herstellen für die rams und die anderen baugruppen ,natürlich gegen bares.
kannst mich ja noch einmal kontakten: pebisoft@web.de

batti112
01.05.2005, 15:18
Hi pebisoft!

Ich habe es mir ein wenig schwierig gemacht.
Mein Roboter sendet die Daten an meinen "Server",der wiederrum die Daten an einen Client per TCP sendet. Den Client habe ich mit Java programmiert, hier werden aus den Bilddaten (Byte) RGB's erstellt, und angezeigt. Zur Zeit kämpfe ich noch damit, dass ich manchmal ein weißes "Überblenden" habe (besonders bei starken Tageslicht). Habe bis jetzt versucht, dies durch Konfiguration der Cam zu lösen, bekomme dies aber nicht hin.
Denke ich muss einfach die eingehenden Pixelwerte ein wenig auseinanderziehen, um den Kontrast zu erhöhen (auf Client Seite).

Sorry, ein einzelnes Programm das die Bilderanzeigt habe ich nicht, insgesamt ist mein Client-Programm schon ziemlich groß geworden.

Habe mir ein eigenes Objekt geschrieben (abgeleitet von JComponent) und die paint Methode überlagert, um ein Bild darzustellen. Hier der entscheidene Code (wie gesagt noch nicht ideal, da die Pixelwerte zu nah beieinander liegen):


public void newPic(byte[] camdata)
{
//displays a new Picture
for(int i=0;i< (w*h); i++)
{
rgbdata[i] = (int)(0xFF000000+(Tools.convertBytetoInt(camdata[i]) << 16)
+ (Tools.convertBytetoInt(camdata[i]) << 8)
+ Tools.convertBytetoInt(camdata[i]));
}
ImageProducer p = new MemoryImageSource( w, h, rgbdata, 0, w );
image = frame.createImage( p );

repaint();
}

pebisoft
01.05.2005, 15:38
mit was sendet du die daten eigentlich vom robby zum server (funk...).
das programm "camera command vers 2..." funktioniert ganz gut. nur wie kann man die daten abfragen für ein anderes programm.
mfg pebisoft

tobimc
01.05.2005, 16:14
HI!

Naja, bei mir wird das On-Robot ausgewertet, denn meins ist ein AMR-Projekt.
Aber ist das nicht etwas kompliziert, mit dem server/client-System?
Mach doch einfach ein Großes All-Round Programm auf dem Server, dass das Bild auswertet!

@pebisoft: Hm. Layouts von dir?

Liebe Grüße,
Tobi

batti112
01.05.2005, 16:31
Hi!
@pebisoft
Momentan zieht er noch ein Kabel hinter sich her.
Bin mir noch nicht ganz sicher was ich machen soll.

Entweder ich packe auf meinen Robby so einen schönen mini ITX rechner drauf(server onboard, Verbindung zum client per WLAN), ich glaube der zieht nur ganzschön Saft.
Eine weitere Möglichkeit wäre ein Laptop einzubauen.

Oder die 2.Möglichkeit ich kaufe ein Funkübertragungsset.

Beide Lösungen sind recht teuer, und ich weiß noch nicht, ob sich das lohnt.
Ob der Roboter sein auf Dauer seinen Zweck erfüllt kann ich ja auch mit nem Kabel testen.

Ich weiß nicht so ganz was du mit deiner "camera command vers 2..." meinst, ist mir nicht bekannt.

@tobimc:
Die Idee ist, das der Client nur dafür da ist um den Roboter manuell zu steuern, und die Kamerabilder darzustellen. Der Server soll später einmal die "Intelligenz" des Roboters zur Verfügung stellen. Falls ich irgendwann einmal zu viel Geld habe, und den Roboter mit einem eigenen Rechner bestücken möchte, dann brauch ich auf diesen nurnoch die Serversoftware draufspielen, und der Client könnte per WLAN zugriff bekommen.

Ebenso freue ich mich darauf den Roboter aus der Uni heraus, bei mir zu Hause durch die Wohnung zu schicken ;-)

mfG

Batti

tobimc
01.05.2005, 16:35
Hi

Achso!
ich hatte da ein Uart to WLAN Modul gesehen, hier im Forum, musst mal suchen.
Allerdings kostet der Spaß 100€/Modul... :(

Grüße,
Tobi

batti112
01.05.2005, 16:54
Dafür kann ich mir ja schon fast nen billiges Notebook bei Ebay kaufen, welches dann auch gleich den Server aufnehmen kann....

mfG
Batti

tobimc
01.05.2005, 16:57
...eben :D

Ich find diese blöden Stiftleisten nicht!

pebisoft
11.05.2005, 23:06
hallo, wer hat neue ergebnisse mit der gameboy-cam.
mfg pebisoft

tobimc
12.05.2005, 15:43
Hi!

Ich!:
Diese Schrauben sind eine Krankteit!
Bitte vor dem fachgerechten entsorgen den Schraubenkopf zerstören, und eine Wiederverwendung auszuschließen!

:D Im Ernst:

Heute ist meine GB-Cam gekommen! Habe sie umgehend auseinendergeschraubt. (Wobei ich sehr froh war, dass wir mal einen Spezial-Bit-Satz gekauft haben...)
Habe dabei viele viele Fotos gemacht, könnte ein schönes tutorial werden.

Das Cameramodul ist ja echt schnuckelig! Ist da eigentlich nur der CCD drauf? Dann könnte man sowas bei Gelegenheit auch mal bauen...
(Wenn die GB-Cams ausgestorben sind oder alle vorne auf den Robotern sitzen...)

Stimt die Pinbelegung des Steckers auf www.juliprograms.de ?
(Nur zur Sicherheit!)

Liebe Grüße,
Tobi

pebisoft
12.05.2005, 16:17
hallo, hier hast du eine gute beschreibung:
http://www.destroy-yourself.de/julian/juliprograms/amr/gbcam.htm
mfg pebisoft

tobimc
12.05.2005, 16:24
Hi pebisoft!

Und die stimmt?!! (Wie gesagt, nur zur Sicherheit... :D)

Wie ist das mit dem RN-CCD-Modul?

Liebe Grüße,
Tobi

pebisoft
12.05.2005, 16:35
http://www.destroy-yourself.de/julian/juliprograms/amr/gbcam.htm.
die pinbelegung stimmt 100%zentig.
wenn du die kabel abtrennen tust, musst du das einzeln machen, damit du nachher nicht mit der reihenfolge durcheinander kommst. bei mir liefert er so die daten, kann sie nur noch nicht auswerten.
wenn du den kompletten kugelball abnimmst kommt teilweise falsches licht auf die oberfläche, wie du erkennst, ist vor der optik nochmal ein 5mm tunnel für das störlicht (der helle teil der kugel). der ist nötig.
mfg pebisoft

pebisoft
12.05.2005, 16:39
hallo tobi, wenn du mal zeit hast, können wir mal über die anfertigung einer platine mit einem 64kbyte sram und avr 8-16 plaudern auch ohne max.
mfg pebisoft

tobimc
12.05.2005, 18:00
HI pebisoft!

Habe gerade Zeit.. ausnahmsweise, bis auf dass ich noch nen Bug in meinem Adminsystem ausmerzen muss...

Wie / Wo ist der Kanal für Störlicht?! Wozu braucht ihn die Cam?!

Liebe Grüße,
Tobi

pebisoft
12.05.2005, 21:27
hallo tobi wenn du von vorn auf die linse schaust, ist ja noch vor der linse das gehäuse mit einer 7mm öffnung und 5mm tief, diese sorgt dafür, das kein streulicht auf die linse fällt und das damit für eine überbelichtung führen würde. wenn du das ganze gehäuse entfernst, musst du wieder so ein röhrchen mit 7mm durchmesser und 5mm tiefe draufsetzen. das kugelgehäuse hat schon einen sinn. schutzt gegen äussere mechanische einwirkungen und streulicht abhalten.
könntest du mir 1 oder 2 platinen anfertigen mit dem avr 8-16 um die daten der gameboycam auf dem sram zu speichern.
mfg pebisoft

roboter
13.05.2005, 09:54
Ich bastle auch gerade an sowas. Mit nem Mega8 und 128kb externem parallel-RAM.


Wie schließt du denn den RAM an den Mega8? Ich dachte dafür braucht man immer Controller die das unterstützen, wie zum Beispiel der Mega162?

Pascal
13.05.2005, 13:58
wenn du keinen eingebauten Controller für externen RAM hast, musst du die Address-, Daten- und Kontroll-Leitungen an irgendwelche Pins des µC anschließen und den µC entsprechend programmieren(wie steht im Datenblatt des RAMs oder im Internet, ist aber nicht sonderlich schwer)

der Nachteil ist allerdings, dass diese Methode nicht so schnell ist wie die mit einem dafür ausgelegten µC

michaelb
13.05.2005, 14:58
Hi Tobimc,
wo hast du deine GB-Cam gekauft bzw. wo gibt es sie billig?
Gruß Michi

pebisoft
13.05.2005, 15:01
hallo, die gameboycam gibt es bei ebay.
sie kosten ungefähr 8-10 euro ohne postgebühr.
mfg pebisoft

tobimc
13.05.2005, 15:06
Hi!

Ach so ist das mit dem Loch! Guter Tipp, danke!


wenn du keinen eingebauten Controller für externen RAM hast, musst du die Address-, Daten- und Kontroll-Leitungen an irgendwelche Pins des µC anschließen und den µC entsprechend programmieren(wie steht im Datenblatt des RAMs oder im Internet, ist aber nicht sonderlich schwer)
Richtig.


Nachteil ist allerdings, dass diese Methode nicht so schnell ist wie die mit einem dafür ausgelegten µC
Ohne große Multiplexereien aber nicht viel langsamer! (Wenn amn es in ASM programmiert)
Der Hauptvorteil dieser Onchip-RAM-Interfaces ict, dass man noch bequemer auf das RAM zugreifen kann!

Ich habe meine bei EBay ersteigert.

roboter
15.05.2005, 12:09
@tobimc:
Kannst du deinen ASM-Code hier posten? Oder mir zuschicken?
Das würde mich nämlich interessieren.
Und alleine kriege ich das glaub ich noch nicht hin. :oops:

tobimc
15.05.2005, 12:18
Hi!


@tobimc:
Kannst du deinen ASM-Code hier posten? Oder mir zuschicken?
Das würde mich nämlich interessieren.
Und alleine kriege ich das glaub ich noch nicht hin.
Mal sehen, wenn's fertig ist! Im Moment ist das ein tolles Target-layout...

Liebe Grüße,
Tobi

roboter
29.05.2005, 19:31
Hi!


@tobimc:
Kannst du deinen ASM-Code hier posten? Oder mir zuschicken?
Das würde mich nämlich interessieren.
Und alleine kriege ich das glaub ich noch nicht hin.
Mal sehen, wenn's fertig ist! Im Moment ist das ein tolles Target-layout...

Liebe Grüße,
Tobi

Wollt mal fragen ob du schon weiter gekommen bist.

Ich würde das auch selber probieren, aber ich komme mit dem Datenblatt des 62256 nicht ganz klar.
Wofür gibt es zum Beispiel einen Read/Write Cycle 1 und einen Cycle 2?
Und wie bekomme ich aus den Diagrammen nun ein Programm?

tobimc
30.05.2005, 17:59
Hi!

Naja, diese oder nächste Woche wird geätzt...
Ich weis nicht, was du fürn RAM hast, aber meins hat nur einen Eingang für Read und einen für Write... :D

Ein RAM zu benutzen ist eigentlich recht einfach: Adresse anlegen, Daten anlegen (am Datenbus, Adresse am Adressbus) und writebit triggern. wenn man's andersherum haben will, Datenport auf Eingang schalten, Adresse anlegen und readbit triggern... :D

Hast du vllt. ein serielles RAM? Du brauchst (Wenn du schnell was machen willst) ein paralleles SRAM. Meins hat glaub 20ns Reaktionszeit, k.A.!!

Ich habe das EliteMT LP621024CM-70LL. (256kb, wenn ich's richtig weis...)
DS ist recht schwer zu beschaffen!

Liebe Grüße,
Tobi

roboter
30.05.2005, 19:57
Nee, das ist glaub ich auch n paralleles Ram

Ich habe das von reichelt. Auf dem Ram steht genau:

BS62LV256PC-70

Ich habe die Diagramme die ich meine mal angefügt. Die kommen aus dem Datenblatt.

tobimc
30.05.2005, 21:21
HI!

Hast du dir mal die chip enable Eingänge angesehen? Die sind speziell für mehrere RAMs an einem Bus, nur, wenn da HIGH (od. LOW, je nach RAM) anliegt, hört dir der Chip überhaupt zu. Ist diese Bedingung nicht gegeben, bleiben alle Mühen erfolglos.

Liebe Grüße,
Tobi

roboter
30.05.2005, 21:25
Ja das ist klar.

Ich habe auch noch nicht probiert, den RAM anzusteuern, weil ich wie gesagt nicht weiß was ich mit den Diagrammen machen muß.

tobimc
31.05.2005, 19:23
Hi!

Die Diagramme schau ich mir äußerst selten an, ich guck' immer, dass ich irgendwo in den Weiten des Internets (DANKE avatar!) beschrieben bekomme, wie das funzt. Bin mal gespannt, ob meine Platine funktioniert!
Irgendwann die nächste Zeit hau ich ätztechnisch rein... :D

Grüße,
Tobi

tobimc
12.06.2005, 11:58
HI!

Ich bin mir nicht sicher, aber meine GB-Camgibt irgendwie Quatsch aus...
Ich habe die Registereinstellungen von ACU genommen.
Alle adc-Werte liegen im Bereich von 4, 5 oder 6, ganz selten 7.

Ist das schon ein gutes Zeichen, oder ist da immernoch der Wurm drinne?

Ich musste sie erstmal dazu bringen, Read auf high zu setzen...

Da müssen aber irgendwo noch Bugs sein.

Liebe Grüße,
Tobi

Rubi
12.06.2005, 13:01
Meine funzt leider auch nicht.
Ich habe das Layout von Kijon verwendet.

Ich glaube das bei meiner das Problem beim ansprechen, speichern der Daten ins SRAm ist.
Auch bei mir gibt die Kamera meißtens 5V an den ADC.
Habe mir das mit dem Oszi angesehen und mich auch gewundert,...

LG
Rubi

tobimc
12.06.2005, 13:06
Hi!

Ich habe ein eigenes entwickelt.

Hm. Meine gibt jetzt wenigstens ein READ-Signal aus... :D

Was machst du mit deiner CAM (Robotertechnisch)?

Grüße,
Tobi

Rubi
12.06.2005, 13:22
Ich möchte sie verwenden um Bewegungen zu registrieren.
Außerdem dachte ich mir die Kamera ist ein interessanter Einstieg in das Feld der Muster Erkennenung.

Im Moment wäre ich jedoch schon froh, wenn ich einmal das Board hinbekommen würde,...

LG
Rubi

tobimc
12.06.2005, 13:27
Hi!

*lol* Ich bin auch froh, wenn das Bild auf meinem Bildschirm ist... :D


Du überträgst das Bild erst auf den PC, oder?
Hm.
Bewegungen...
Kommt drauf an, wie viele Bilder du pro Sekunde hinbekommst!
So wie ich die Busgeschwindigkeit im Moment bei mir einschätze, gibts höchstens BPS...

Liebe Grüße,
Tobi

Rubi
12.06.2005, 13:45
Hallo

Na ja, es sollten sich 2 bis 4 schon ausgehen, wenn man nicht erst extra die Bilder zum PC übertragen muß.
Ich möchte eigentlich, wenn es dann einmal funzen sollte, die Kantenerkennung aktivieren, und dann halt möglichst "intelligent", zwei Bilder vergleichen.Das alles sollte on Board vor sich gehen.

LG
Rubi

tobimc
12.06.2005, 13:58
Hi!

Also; ich habe mein Timing etwas verbessert. Statt 4, 5, 6 und 7 bekomme ich jetzt lauter Zahlen um 215.
5V Vref.

So langsam komme ich der Sache glaub ich nahe!

Liebe Grüße,
Tobi

tobimc
12.06.2005, 22:14
Hi!

Ich habe mein kleines Programm zur Darstellung der COM-Daten fertig.

SO sieht es aus:
http://www.tobias-schlegel.de/PublicData/gbcv_gr.jpg

Es zeigt bereits ein Bild:
http://www.tobias-schlegel.de/PublicData/GBC_pic1.jpg
Die Frage ist: Ist das ein 'normales' GB-Cam Bild? Sind nur die Register falsch eingestellt, oder liegen noch ansteuerungsfehler vor?
Das programm braucht auch recht lange, bis alles da ist...

Das sind die ADC-Werte; jeweils mit semikolon getrennt, die TXT-Datei enthält die geloggten Zeichen meines Programms.
(Ihr müsst die Datei herunterladen ("Ziel speichern unter"), so lässt sie sich leider nicht darstellen.)

Könnt ihr damit was anfangen?

Ganz liebe Grüße,
Tobi

michaelb
13.06.2005, 13:13
Hi Tobimc,
was hast du für ein Programm verwendet? Visual Basic oder Visual C++?
hast du den Programmcode von http://www.juliprograms.de/ verwendet?
Gruß Michi

pebisoft
13.06.2005, 13:30
hallo tobi , mail mir mal deine registereinstellungen, die du hast. meine werte kommen von ca 234 - 263.
diese wertdiffrenz muss man jetzt so aufteilen, das 4 grauwerte entstehen und dann als 3 rgb-farben-werte reinsetzen. ist nicht einfach. vielleicht kann ein anderer von diesem thema mal seine umwandlungsroutine darlegen als beispiel. die bilddatenrate wird sich bei 1 bild pro ca 8 sekunden halten. wird auch mit dem sram nicht schneller, weil ja auch noch die anderen daten am robby ausgewertet und umgesetzt werden müssen. er hat ja auch noch andere sensoren. ich übertrage zur zeit mein cmoscambild über funk zum pc. kann es auch schon als bmp-bild darstellen und auswerten!!!! wenn das programm zur auswertung fertig ist. einmal habe ich auf der einen seite das original-capturebild im visualbasic-fenster und daneben stelle ich ein bild zur auswertung dar, was ich gerade sozusagen geschnappt habe aus der capture-originaldarstellung. ist schon lustig, wie einfach das geht. habe garnicht gewusst, das man die "avicap32.dll" von der wintv-karte mit dem sendbefehl komplett auswerten
und steuern kann. alle wintv-befehle kann man mit visualbasic
beeinflussen. ich glaube das ist eine 2. lösung um den robby über eine bildauswertung zu steuern. der pc sendet dann über die easy-funkmodule die steuerdaten für den robby. das heisst auch , mein küchenbrettroboter wertet seine eigenen sensoren weiterhin sofort aus. ich habe auf dem pc mein steuerpult zum eingreifen und der pc übernimmt die bildauswertung ohne mein eingreifen. mein robby ist wie ein marsmobil, wenn irgendetwas versagt greife ich von hand ein, damit das raumschiff nicht im weltall verloren geht. der mensch wirkt immer etwas mit, ist egal wo die weltraumsonden und forschungsroboter zum einsatz kommen.
sogar zum erforschen der pyramiden hat man robbys sogar an der nabelschnur.
ich verwende visual-basic 5.0 pro deutsch. ab version5.0 wird echter exe-code erzeugt. nebenbei benutze ich auch noch die freewaresprache "bcx to c" ist schneller in der auswertung als visual-c++. habe jetzt bei bcx to c nach mehreren tagen endlich auch das capturebild im fenster darstellen können. vielleicht benutze ich jetzt erstmal bcx-to-c, weil ich hier dann auch noch drehbare sprite habe (ohne ein bild mit 360 drehungen anzufertigen), rotationskörper in 3ds und mesh (lassen sich sehr einfach herstellen). die x-bilder für 3directx lassen sich schwer herstellen. ich habe in visualbasic noch nicht geschafft, ein x-körper im fenster darzustellen und um allen 3 achsen drehen zu lassen. ich möchte mal meinen robby auf dem pc im virtuellen raum fahren lassen, den ich vorher mit der camera fotografiert habe. in bcx to c kein problem. tobi hatte ich schon einmal eine demorotazion geschickt. der basic-code, der dann in c umgewandelt wird ist zwar in der textdarstellung sehr gross, aber als exe ist es nur noch ca 7kbyte plus ein mathemodul von 140kbyte. es reicht im ordner aber nur dieses eine modul für alle exedateien. die dll-dateien brauchen bei bcx-to-c nicht mehr mitgeschleppt werden, diese sind im exeprogramm mit verarbeitet und es ist reiner c-code der zu einer exe verarbeitet wird.
mfg pebisoft

tobimc
13.06.2005, 14:06
Hi!

Die Software ist in C geschrieben! Und Nur mit VC++ compiliert, das ist aber wurscht, geht mit jedem Win32-Fähigen Compiler.

@pebisoft:
Ich möchte das ja ETWAS anders machen... :D (*psssttt!!!*)
Du kannst aus einem S/W Bild kein Farbbild mehr machen. Allerhöchstens Falschfarben. Ein S/W-Bild enthält keinerlei Farbinformationen.

Meine Registereinstellungen:

Regadr = 0
Regvalue = 128

Regadr = 1
Regvalue = 12

Regadr = 2
Regvalue = 4

Regadr = 3
Regvalue = 0

Regadr = 4
Regvalue = 1

Regadr = 5
Regvalue = 0

Regadr = 6
Regvalue = 1

Regadr = 7
Regvalue = 7

Original-Quellcode (BASCOM).
Regadr ist die Adresse, Regvalue ist der Wert. Jeweils ein block gehört zusammen, dazwischen kommen noch die Load-Funktionen, die habe ich aber der Übersichtlichkeit wegen weggelassen.

Trozdem dass VB exes kreiert, ist die exe immerncoh von der rundingsbums.dll abhängig, und nicht so schnell!

I LOVE C... :D

Achso und @michaelb:
Nein, ich habe mein eigenes geschrieben. Ist aber glaube noch n Bug drinne! Wie gesagt, in C programmiert.

Liee Grüße,
Tobi

tobimc
13.06.2005, 14:29
Hi!

Noch was:
Ich habe genau dieses Problem hier:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=86746

Weis jemand, woran das liegen kann?
Könnte es sein, dass die Register falsch/ungenügend geladen werden?

Liebe Grüße,
Tobi

DerInder
13.06.2005, 14:31
@tobimc:
probier mal folgende Werte:

Regadr = 0
Regvalue = 0

Regadr = 1
Regvalue = 7

Regadr = 2
Regvalue = 54

den Rest so lassen, hat bei mir (bei entsprechender Beleuchtung) die ersten Bilder geliefert :)

tobimc
13.06.2005, 14:37
Hi!

OK, mach ich, aber erst nach dem Klavier... :D

Jemand ne idee zu dem HIGH-Problem?

Liebe Grüße,
Tobi

Rubi
13.06.2005, 14:40
Hi!

Noch was:
Ich habe genau dieses Problem hier:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=86746

Weis jemand, woran das liegen kann?
Könnte es sein, dass die Register falsch/ungenügend geladen werden?

Liebe Grüße,
Tobi

Hallo Tobi

Wärend Du darauf wartest das read low geht, taktest du die clock weiter ?
etwa so in Pseudo code:
while read(high)
{
set_GbCamClock(high);
wait_1ms;
set_GbCamClock(low);
}


Ich hatte (habe) relativ viele Problem mit meinem Board, aber das hat bei mir immer gefunzt.

tobimc
13.06.2005, 14:56
Hi!

klar! Es kann nur sein, dass die Taktabstände zu groß sind, denn ich gebe während einer HIGH-Phase des Taktes meine Daten an den PC durch...

So; jetzt aber ab zum Klavierspeieln!!

Liebe Grüße,
Tobi

michaelb
13.06.2005, 15:35
Hi Tobi,
hab noch ne Frage wie kannst du mit reinem Quelltext ne Benutzeroberfläche erzeugen? Braucht man da nicht Visual C++ um die Oberfläche zu erstellen?
Gruß Michi

tobimc
13.06.2005, 17:48
Hi Michi!

Nö!

Das wichtigste macht man mit CreateWindow(); aber das ist ja ein anderes Thema... :D
(Ein gutes Buch zum Thema ist "Windows Programmierung" aus der Microsoft Press.)

Nun will ich mal die Register schwingen, habe gerade noch die Franz-HA gemacht... :D

Liebe Grüße,
Tobi

tobimc
13.06.2005, 18:03
Hi!

Also: Mit den Registereinstellungen von DerInder kommt nur null null null null usw. raus. Aber es ist schonmal beruhigend, dass die CAM auf die Register reagiert... :D

Liebe Grüße,
Tobi

tobimc
13.06.2005, 18:13
Hi!

Ich habe jetzt mal das Register 1 und 2 auf 255 gesetzt. UND: Alles bleibt schwarz.

Also stimmt irgendwo noch was nicht.

Ich geh mal auf die Suche...

Grüße!

roboter
13.06.2005, 23:17
Wieviel Strom ziehen eure kameras eigentlich?

Wenn ich Kamera + Mega8515 + PCF8591 + 32K zusammen betreiben will, messe ich 2A!
Ohne Kamera ne ganze Menge weniger.


Ist da vielleicht meine Kamera kaputt? :-s

Rubi
14.06.2005, 07:05
Wieviel Strom ziehen eure kameras eigentlich?

Wenn ich Kamera + Mega8515 + PCF8591 + 32K zusammen betreiben will, messe ich 2A!
Ohne Kamera ne ganze Menge weniger.


Ist da vielleicht meine Kamera kaputt? :-s

Das schaut nicht gut aus.
Du mußt irgendwie einen kurzen in die Schaltung gebracht haben.
Mehr als 100mA darf das ganze einfach nicht ziehen, wenn überhaupt.

LG
Michael

roboter
14.06.2005, 12:06
Fehler gefunden: Ich habe meinen MAX232 zerstört... ](*,)

Was würdet ihr eigentlich zu diesem Code Sagen?

'Gameboy Kamera

$regfile = "m8515.dat" 'ATmega8515-Deklarationen
$crystal = 4000000 'Quarz: 4 MHz
$baud = 9600

Declare Sub Register_laden(addr As Byte , Wert As Byte)

Dim Regaddr(8) As Byte
Dim Regwert(8) As Byte
Dim I As Byte

Dim Bild(16384) As Xram Byte
Dim Z As Word

'Register festlegen:
Regaddr(1) = 1
Regaddr(2) = 2
Regaddr(3) = 3
Regaddr(4) = 4
Regaddr(5) = 5
Regaddr(6) = 6
Regaddr(7) = 7
Regaddr(8) = 0

Regwert(1) = 128
Regwert(2) = 14
Regwert(3) = 6
Regwert(4) = 0
Regwert(5) = 1
Regwert(6) = 0
Regwert(7) = 1
Regwert(8) = 7

Config Scl = Portb.2
Config Sda = Portb.3
Config I2cdelay = 10

'A/D-Wandler einstellen:
I2cinit
I2cstart
I2cwbyte &B10010000
I2cwbyte &B00000000
I2cstop


Config Portb.0 = Output 'XCK
Config Portb.1 = Output 'Reset
Config Portb.4 = Output 'Sin
Config Portd.3 = Input 'read
Config Portd.4 = Output 'Load
Config Portd.5 = Output 'Start

Xckpin Alias Portb.0
Resetpin Alias Portb.1
Sinpin Alias Portb.4
Loadpin Alias Portd.4
Startpin Alias Portd.5
Voutpin Alias Portd.2
Readpin Alias Portd.3

Resetpin = 1 'Reset High
Xckpin = 1 'XCK High
Loadpin = 0 'Load Low
Startpin = 0 'Start Low

'Reset:
Waitus 5
Xckpin = 0 'XCK Low
Waitus 2
Resetpin = 0 'Reset Low
Waitus 2
Xckpin = 1 'XCK High
Waitus 2
Resetpin = 1 'Reset High
Waitus 2
Xckpin = 0 'XCK Low

'Register Laden
Call Register_laden(regaddr(1) , Regwert(1))
Call Register_laden(regaddr(2) , Regwert(2))
Call Register_laden(regaddr(3) , Regwert(3))
Call Register_laden(regaddr(4) , Regwert(4))
Call Register_laden(regaddr(5) , Regwert(5))
Call Register_laden(regaddr(6) , Regwert(6))
Call Register_laden(regaddr(7) , Regwert(7))
Call Register_laden(regaddr(8) , Regwert(8))

'Start:
Waitus 2
Startpin = 1
Waitus 2
Xckpin = 1
Waitus 2
Startpin = 0

Do
'Warten bis Bild fertig:
Do
Waitus 3
Xckpin = 0
Waitus 5
Xckpin = 1
Waitus 2
Loop Until Readpin = 1

'Bild lesen;
I2cstart
I2cwbyte &B10010001
For Z = 1 To 16383
I2crbyte Bild(z) , 8
Xckpin = 0
Waitus 4
Xckpin = 1
Next

I2crbyte = Bild(16384) , 9
I2cstop

Xckpin = 0
Waitus 1
For Z = 1 To 16384
Printbin Bild(z)
Next
Loop

End 'end program

Sub Register_laden(addr As Byte , Wert As Byte)
'Registeraddr übertragen:
For I = 3 To 1 Step -1
Waitus 4
Sinpin = Addr.i
Xckpin = 1
Waitus 4
Xckpin = 0
Next

'Registerwert übertragen:
For I = 8 To 2 Step -1
Waitus 4
Sinpin = Wert.i
Xckpin = 1
Waitus 4
Xckpin = 0
Next
Waitus 4
Sinpin = Wert.1
Xckpin = 0
Waitus 2
Loadpin = 1
Waitus 2
Xckpin = 0
End Sub

Habe im Moment noch keine Möglichkeit das zu testen.

tobimc
14.06.2005, 13:23
Hi!

Ich werde deinen Code mit meinem Programm mal abgleichen.

Vllt. finde ich einen Fehler, sonst glaube ich eher, dass ich einen bei mir finde... :D

Liebe Grüße,
Tobi

roboter
14.06.2005, 13:41
Naja, ich denke eher das bei mir noch die Fehler sind 8-[

Hier ist zwar eigentlich das C-Forum und mein Code ist Bascom, aber ich denke das stört hier niemanden, oder?`Das Thema ist ja das selbe.

Kjion
14.06.2005, 16:03
Moin,

nachdem ich mich auf Anregung von Rubi hin mal wieder etwas mit der GBCam beschäftigt hab, kann auch noch ein bißchen Code zum ansteuern der Kamera bieten ;-)
Funktioniert bei mir auf dem Board aus dem Wettbewerb ( allerdings nicht das hier aus dem Downloadbereich, auf meiner Homepage gibts ein aktuelleres => Version 1.3 ).

Wenn jemand ein kleines Programm hat das die Bilder anzeigen lassen kann und zudem noch mit USB<>Seriell Wandlern zurechtkommt ( entweder WinXP oder Linux ), würde ich mich auch anbieten noch einen automatischen Belichtungsabgleich dafür zu schreiben.
Mein Programm das ich damals benutzt funktioniert nicht zusammen mit dem USB Wandler...

MfG Kjion

pebisoft
14.06.2005, 16:06
hallo, ihr müsst die gemessenen adc-werte vergleichen und einmal die grösste differenz heraussuchen. davon bastelt ihr dann den 3-byte langen rgb-wert für die jeweiligen programme zum darstellen. wenn ihr einen kleinsten wert von 229 habe und einen grössten wert von 258 dann nehmt ihr z.b. als basiswert der zwischen 220 und 260 und bastelt daraus den darstellungscode.
mfg pebisoft

roboter
14.06.2005, 16:29
Also mein Code funktioniert schonmal nicht.
Mein Readpin geht nicht auf High :-s

tobimc
14.06.2005, 18:19
Hi!

@pebisoft:
Hm. Die Differenzen sind wirklich sehr gering.
Mit wievielen Bit liest du die Camera aus? Denn 260 kann man mit 8Bit nicht darstellen... :D (Und über die COM nicht übertragen.)

@roboter:
Kenn ich... :D

Hm. Irgendwo hab ich nen BUG.

Liebe Grüße,
Tobi

roboter
14.06.2005, 19:25
Weiß denn einer wo mein Fehler liegt? Vielleicht Register falsch? Timing falsch?

Ich habe das jetzt zum überprüfen mit dem Readpin so gemacht, das ich an Portd.2 eine LED habe. Die schalte ich am Anfang aus.
Nach dem >Loop Until Readpin = 1< Schalte ich die LED dann an. Nur leider geht sie nicht an...

tobimc
14.06.2005, 19:47
Hi!

Readpin kann auch nicht gelesen werden, weil er auf einen PORT-Register verweist.
Du musst aber, um daraus zu lesen, mit einem PIN-Register aliasen... :D

Hab ich auch schon gemacht.!

@Kijon:
Ich habe gerade einen massiven Bug in meiner (Anzeige-)Software gefunden. Bin gerade dabei, den Fehler zu suchen.

Viele liebe Grüße,
Tobi

DerInder
14.06.2005, 19:55
Moin,
als Anzeigeprogramm hab ich "damals" das von Dafydd Walters benutzt. http://www.seattlerobotics.org/encoder/200205/gbcam.html
Ist zwar in Java aber es lief auf anhieb :)

DerInder
14.06.2005, 20:27
Nachtrag:
ein C-Programm für die Belichtungseinstellung gibt es hier: http://www.motorobots.org/ hier unter downloads die win oder linux Version laden. Die Source für die Belichtung ist unter exposure.c zu finden. Falls jemand eine AVR-Asm Variante davon haben möchte, einfach ne PM an mich.

tobimc
14.06.2005, 20:29
Hi!

Meins läuft jetzt auch!
Kleiner Bug... was vergessen... *ARGH*

Baue gerade noch ein bisschen das GUI um...

Liebe Grüße,
Tobi

roboter
14.06.2005, 20:42
@tobimc: Besten Dank! An solchen blöden Fehlern such ich manchmal stundenlang... ](*,) ](*,) ](*,)


Jetzt brauch ich zum testen noch ein Anzeigeprogramm.
Das von http://www.seattlerobotics.org/encoder/200205/gbcam.html krieg ich irgendwie nicht zum laufen :-s
Weiß jemand noch ein andres?

Richtig funktionieren tuts sowieso noch nicht. Ich bekomme im Terminal immer nur diese Werte:



000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001

001 001 001 001 001 001 001 001 001 001 001 001 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002

002 002 002 002 002 002 002 002 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003 003

003 003 003 003 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005

005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 006 006 006 006

006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006

006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006

006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006 006


Das geht dann so weiter bis 64.
Naja, ich werde dann nochmal weiter Fehler suchen O:)

pebisoft
14.06.2005, 21:45
hallo, das anzeigeprogramm ist für eine cmoscam. sowas habe ich auch mit visualbasic 5.0 erstellt für meine cmoscam auf dem robby um die bilder auf dem pc auszuwerten für die hinderniserkennung des robby. das läuft bei mir.
aber ein auswerteprogramm für die 16000 adc-werte fehlt mir noch. bin noch am tüfteln.
hallo tobi, kannst du deine 16000 daten schon in pixel umwandeln.
hallo roboter, welches c-programm hast du genommen für die gameboycam, oder andersherum, welche adc-werte hast du bekommen.
mfg pebisoft

pebisoft
14.06.2005, 21:53
hallo tobi, die zahlen über 255 kann man an vref des avr noch runterregeln, das sie unter 255 liegen. wichtig ist, das eine helligkeitsschwankung auf dem bild auch als adc-wert-schwankung erkennbar ist.
mfg pebisoft

roboter
14.06.2005, 21:56
Hi pebisoft

Warum C-Programm?
Ich will versuchen das mit Bascom hinzukriegen.

Mein Code habe ich ober schonmal gepostet, der ist aber nicht mehr aktuell:

'Gameboy Kamera

$regfile = "m8515.dat" 'ATmega8515-Deklarationen
$crystal = 4000000 'Quarz: 4 MHz
$baud = 9600

Declare Sub Register_laden(addr As Byte , Wert As Byte)

Dim Regaddr(8) As Byte
Dim Regwert(8) As Byte
Dim I As Byte

Dim Bild(16384) As Xram Byte
Dim Z As Word

'Register festlegen:
Regaddr(1) = 1
Regaddr(2) = 2
Regaddr(3) = 3
Regaddr(4) = 4
Regaddr(5) = 5
Regaddr(6) = 6
Regaddr(7) = 7
Regaddr(8) = 0

Regwert(1) = 128
Regwert(2) = 14
Regwert(3) = 6
Regwert(4) = 0
Regwert(5) = 1
Regwert(6) = 0
Regwert(7) = 1
Regwert(8) = 7

Config Scl = Portb.2
Config Sda = Portb.3
Config I2cdelay = 10

'A/D-Wandler einstellen:
I2cinit
I2cstart
I2cwbyte &B10010000
I2cwbyte &B00000000
I2cstop


Config Portb.0 = Output 'XCK
Config Portb.1 = Output 'Reset
Config Portb.4 = Output 'Sin
Config Portd.3 = Input 'read
Config Portd.4 = Output 'Load
Config Portd.5 = Output 'Start

Config Portd.2 = Output
Portd.2 = 1
Waitms 1000
Portd.2 = 0
Waitms 1000
Portd.2 = 1

Xckpin Alias Portb.0
Resetpin Alias Portb.1
Sinpin Alias Portb.4
Loadpin Alias Portd.4
Startpin Alias Portd.5
Readpin Alias Pind.3

Resetpin = 1 'Reset High
Xckpin = 1 'XCK High
Loadpin = 0 'Load Low
Startpin = 0 'Start Low

'Reset:
Waitus 5
Xckpin = 0 'XCK Low
Waitus 2
Resetpin = 0 'Reset Low
Waitus 2
Xckpin = 1 'XCK High
Waitus 2
Resetpin = 1 'Reset High
Waitus 2

'Register Laden
Call Register_laden(regaddr(1) , Regwert(1))
Call Register_laden(regaddr(2) , Regwert(2))
Call Register_laden(regaddr(3) , Regwert(3))
Call Register_laden(regaddr(4) , Regwert(4))
Call Register_laden(regaddr(5) , Regwert(5))
Call Register_laden(regaddr(6) , Regwert(6))
Call Register_laden(regaddr(7) , Regwert(7))
Call Register_laden(regaddr(8) , Regwert(8))

'Start:
Waitus 2
Startpin = 1
Waitus 2
Xckpin = 1
Waitus 2
Startpin = 0

'Do
'Warten bis Bild fertig:
Do
Waitus 3
Xckpin = 0
Waitus 5
Xckpin = 1
Waitus 2
Loop Until Readpin = 1

' 'Bild lesen;

For Z = 1 To 16383
I2cstart
I2cwbyte &B10010001
I2crbyte Bild(z) , 9
I2cstop
Xckpin = 0
Waitus 4
Xckpin = 1
Next
Xckpin = 0
Waitus 1
For Z = 1 To 16384
Printbin Bild(z)
Next

Do
Loop

End 'end program

Sub Register_laden(addr As Byte , Wert As Byte)
'Registeraddr übertragen:
For I = 1 To 3
Xckpin = 0
Sinpin = Addr.i
Waitus 3
Xckpin = 1
Waitus 3
Next

'Registerwert übertragen:
For I = 1 To 8
Xckpin = 0
Sinpin = Wert.i
Waitus = 3
Xckpin = 1
Waitus = 3
Next

Loadpin = 1
Waitus 2
Xckpin = 0
Waitus 4
Loadpin = 0
Sinpin = 0
End Sub

Diesen Code habe ich jetzt auf dem Controller.
Die Schleife mit dem Printbin liefert mir im Terminalprogramm die Werte von oben.

tobimc
14.06.2005, 22:01
Hi!

Also! Mein Anzeigeprogramm ist jetzt 'entbuggt'.
Funktioniert recht gut, denk ich.

Hier eine kleine Beschreibung:

Das Programm erstellt 2 Logfiles:
C:\log1.txt (Enthält alle gezeichneten Bytes)
und
C:\log2.txt (Enthält ALLE EMPFANGENEN Bytes.)

Die Bytes des Bildes (ADC-Werte) müssen ohne Vorankündigung gesendet werden. Hierbei gilt: 9600 Baud, 8Bits, Keine Parity, 1Stopbit (8N1).
Die Bytes müssen alle exakt 8Bit haben (ADC-Werte mit 8Bit!),
Sie müssen alle beim Senden durch einen Semikolon (ASCII 59) getrennt werden, also so:
<ADC-Wert-1>;<ADC-Wert-2>; usw.
z.B:
213;214;13;

Eine Aufnahme macht man so:
(Reset des sendenden AVRs gedrückt halten)
- Connect anklicken (Connecten zum COM-Port)
- GO! anklicken (Lese-Sequenz wird gestertet)
In dieser Phase ist das Programm nichtmehr ansprechbar, und wenn der Bildschirmschoner oder sonstwas kommt, ist das Bild WEG!!
- RESET loslassen, sodass der AVR die Werte ausgibt.
- Ausgabe abwarten
- wenn Ausgabe fertig, Disconnect anklicken (disconnecten vom COM-Port)

Sollte sich trotzdem noch ein Bug eingeschlichen haben (meine Kammera sendet z.Zt. nur Weis... :D) bitte hier posten, PN oder EMAIL!

Uff, das war viel... :D

:!:_Wäre nett, wenn ihr eure Meinung über das Tool sagen würdet!_:!:

Viele liebe Grüße,
Tobi

- Für Rechtschreibung keine Haftung

pebisoft
14.06.2005, 22:12
hallo tobi, wie wäre es , wenn man die ganzen 16000 bytes zum pc überträgt in eine textdatei und dann von deinem programm in aller ruhe aufrufen lässt.
das wäre für die testphase einfacher. weil man evtl bytes von hand einmal ändern kann um auch zu prüfen, wie dein programm die einzelnen unterschiedlichen werte darstellt.
mfg pebisoft

Kjion
14.06.2005, 23:56
Wäre nett, wenn ihr eure Meinung über das Tool sagen würdet!

Das erste was mir aufgefallen ist, das man keinen COM Port einstellen kann ( mein USB<>Seriell Wandler liegt auf COM Port 7 zum Beispiel ). Von daher ists schwierig mit dem testen :-(

MfG Kjion

tobimc
15.06.2005, 12:25
Hi!

@pebisoft:
Tut das Programm doch! C:\log2.txt . Dahinein werden die ankommenden Werte geschrieben.

@Kjion: Hm. Das ist halt mit den Textfeldern so ne Sache von wegen malloc und so. Ich schau mal, was sich machen lässt...

Schon jemand was brauchbares herausbekommen? pebisoft?

Viele liebe Grüße,
Tobi

roboter
15.06.2005, 13:34
Ich habe meinen Fehler nun etwas eingekreist.
Der Readpin geht ja normalerweise von LOW auf HIGH wenn ein Bild fertig ist.
Nach 16384 Takten ist das Bild ja normalerweise fertig an dem Voutpin ausgegeben worden und der Readpin sollte wieder auf LOW gehen.

Tut er bei mir aber nicht.

Habe, nachdem der Readpin von LOW auf HIGH geht, mal folgenden Code probiert:

Do
Waitus 4
Xckpin = 0
Waitus 4
Xckpin = 1
Loop Until Readpin = 0
Print "Readpin wieder auf LOW";
Ich kann jetzt warten solange ich will, mein Readpin geht nicht mehr auf LOW. Weiß einer woran das liegen könnte?

tobimc
15.06.2005, 14:58
Hi!

Hahm. GENAU dieses Problem habe ich auch!
Diese Gameboy-Cams sind auch nicht mehr das, was sie mal waren... :D

Ich habe in meiner Software einen weiteren bug entdeckt, desweiteren programmiere ich gerade eine Routine, die das Bild immer neu zeichnet.
Aber es funktioniert noch nicht! Access Violation...

Die von Kjion gefoerderte COM-Verstellung ist auch schon vorgesehen.

Liebe Grüße,
Tobi

roboter
15.06.2005, 16:11
Schau mal hier https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=9816&highlight=
Da hat jemand das gleiche Problem. Hab ihm schon ne PM geschickt, ob er ne Lösung gefunden hat. Wenn ich ne Antwort kriege, schreib ich sie hier rein.

pebisoft
15.06.2005, 20:39
hallo tobi, meine werte aus dem adc liegen jetzt zwischen 224 bis 251.
im terminalprogramm erscheinen sie bei mir auch wie oben angegeben mit semicolon. also am pc kommen die werte richtig (erscheinen auch auf meiner avr-platine im lcd-display) mit semicolon an.
in deiner datei stehen abr nur werte zwischen 10 und 64, wobei ca 85% über 45 liegen. es erscheint in deiner datei kein wert über einhundert, das wundert mich. mich würde einmal interessieren, von welcher basic aus du die pixel berechnen tust (4 grauwerte).
1. welchen umrechnungsfehler macht dein programm beim speichern der daten
2. wo liegt deine berechnungsbasis für die werte der 4 graustufen.

kannst du dein programm nicht so schreiben, das man den mindestwert und den höchstwert reingibt, den jeder für sich ermittelt beim probelauf.
sonst wird man nicht in der lage sein mit deinem programm das bild zu sehen. jede kleien änderung am spannungspotiential des avr verändert die adc-werte. auch die bautoleranz der avr mit adc oder andere i2c adc verzerren das bild.
ca bei 16300byte schaltet meiner auf 1, ca 86 byte lang und dann fängt er wieder an zu arbeiten, bild für bild.
mfg pebisoft

Kjion
15.06.2005, 21:58
meine werte aus dem adc liegen jetzt zwischen 224 bis 251.

Dann hast du deine Kamera nicht richtig kalibiert. Vielleicht ist der Verstärkungsfaktor zu groß ??

Hier mal ein Auszug aus einem Testprogramm von mir:

Min : 12
Max : 240
Mittelwert: 71
Standartabweichung : 57

Unter dem Link den DerInder gepostet hatte ( http://www.seattlerobotics.org/encoder/200205/gbcam.html ) gibts ein ganz nettes Programm dafür. Ich hab das eben für avr-gcc umgeschrieben und auf mein Board angepasst und es funktioniert sehr gut ;-).
Code gibts demnächst wenn ich noch ein bißchen daran rumgebastelt habe bzw. wer nicht warten will kann mir auch gerne ne Mail schreiben...

MfG Kjion

tobimc
15.06.2005, 22:50
Hi!

Danke! @ roboter!!

Pebisoft, ich weis nicht, was du machst. ;)
Wie gesagt, ich kann euch jetzt eine vorab earlyest alpha 0.5
geben, in der aber die COM-Einstellungen noch nicht drin sind.

Ich lade die Version gleich hoch, in der müssten jetzt endlich die schlimmsten Bugs behoben sein!
{Ihr habts warschinlich nicht gemerkt, aber der Einlese und Ausgabe-Algorithmus hat nur halb so viele Daten eingelesen... :D }
Ist mir ziemlich peinlich, so nen Schrott zu veröffentlichen! SORRY!
Die nächste Version sollte soweit funktionieren...
Die, die ihr in 5 Minuten bekommt hat soweit eigentlich alles, bis auf die COM-Einstellungen, die ich morgen programmieren muss.
(Habe morgen Schulfrei!)

Also... ich bin gleich soweit.

Liebe Grüße,
Tobi

tobimc
15.06.2005, 23:06
HI!

Also; hier ist sie, die 0.5 earliest alpha.
Soweit sollten (!) alle Bugs ausgemerzt sein, die bisher gestört haben.

Logfiles, Baud usw. ist alles gleich, nur verschwindet das Bild jetzt nicht, wenn der Bildschirmschoner gelaufen ist.

Morgen komt Kijon auf seine Kosten, dann gibts auch die BAUD- und COM- Verstellung.

Die müsstet ihr mir dann halt testen, weil ich keine Möglichkeit dazu habe (habe nur einen COM...)
Am Besten die Abudraten gleich mit, die kann ich nämlich auch nciht ohne weiteres testen... :(

Also; hier sit die earlyest alpha.

Viele liebe Grüße (und nochmals sorry für die anderen buggy Versionen !!!),
Tobi

tobimc
15.06.2005, 23:10
Hi!

Und:
Das Programm setzt das, was aus dem COM-Port kommt 1:1 in Grauwerte um, keine Teiler, keine Grenzwerte. Das kommt, und wird als Graustufe angezeigt.
Fertig.

Die Kammera müsste schon genügend große Unterschiede bringen, oder?

Viele Liebe Grüße,
Tobi

pebisoft
16.06.2005, 10:59
hallo tobi, man kann grauwerte darstellen mit werten die von 223 - 254 liegen. man kann auch grauwerte darstellen, die von 1-16 liegen. das programm muss dieses basis aber kennen, sonst bekommst du keine grauwerte raus weil beim niedrigen wert der unterschied gar nicht rausgefilter wird sondern der wert 16 z.b. noch garnicht erfasst wird.
ich kann rgb-grauwerte darstellen mit der zahl 1-4 z.b. muss dieses aber dementsprechend in r-g-b umrechnen. warum nimmt dein programm falsche zahlen. es kommen bei mir werte über 200 an aber in der logdatei sind ganz andere werte (unter 100).
mfg pebisoft

tobimc
16.06.2005, 11:03
Hi pebisoft!

Mit welcher Baudrate sendest du?
Beschreibe mal.

Bei mir sind die Werte komplett identisch zu meinem Terminalprogramm.

Poste mal bitte beide Logfiles.

Liebe Grüße,
Tobi

roboter
16.06.2005, 13:29
onkelarne konnte das Problem mit dem Readpin auch nicht lösen, bei ihm blieb der Readpin auch immer auf High.
Ich habe jetzt mal versucht die Frequenz zu ändern, aber das hat auch nichts gebracht. :(

tobimc
16.06.2005, 16:15
HI Jungs!

Also:

GameBoy Cam Viewer 0.5b

Verstellbare COM-Einstellungen: Com-Port, Baudrate, Parität und die Stopbits! (Kijon, jetzt kann's los gehen!!)

Ihr müsst nur darauf achten, dass ihr die Einstellungen dann macht, wenn ihr vom COM abgemeldet seid. Dann mit den neuen einstellungen 'Connecten'.

Inzwischen ist auch eine Sperre implementiert, die nach 4Mio Abfragezyklen die Einlesesequenz automatisch abbricht.
Dies geschieht dann, wenn die CAM kein, oder zu wenige Bytes sendet.

Das Programm hat mir einen neuen Zeilen-Rekord bescheert:
1407 C-Zeilen. Das sind etwa 400 mehr, als beim besherigen Rekord.

(Falls jetzt manche denken; Das ist das Release b, das hat eine Funktion mehr und vorher habe ich ohne die Ausgabe der COM-Configuration gezählt)

Also: Viel Spaß, und sagt mir eure Meinung!!

Viele liebe Grüße,
Tobi

pebisoft
16.06.2005, 17:27
habe dein neuestes programm getestet.
das bild wird über deine begrenzung hinausgezeichnet und das programm stürtzt dann ab. wenn du unter der fehlermeldung schaust, siehst du, wie es über die begrenzung geht. die ersten grauen reihen kommen ohne den avr daten zustande, erst bei den schwarzen pixel fangen die avr-daten an.
einstelldaten com1 19200 usw.
einpaar log-daten:


162;162;82;106;146;146;138;82;106;146;154;162;106; 162;194;106;146;154;202;82;
106;146;154;154;82;106;146;154;178;82;106;146;146; 194;82;106;146;162;146;82;
106;146;146;194;82;106;146;146;178;82;106;146;146; 202;82;106;146;162;154;82;
106;146;154;178;82;106;146;154;138;82;106;146;146; 178;82;106;146;146;178;82;
106;146;146;146;82;106;146;154;138;82;106;146;154; 130;82;106;146;146;194;82;
106;146;154;194;82;106;146;154;202;82;106;146;154; 178;82;106;146;154;154;82;
106;146;154;154;82;106;146;154;138;82;106;146;154; 154;82;106;146;154;138;82;
106;146;154;130;82;106;146;146;202;82;106;146;154; 186;82;106;146;154;138;82;
106;146;154;194;82;106;146;154;162;82;106;146;154; 138;82;106;146;146;202;82;
106;146;154;202;82;106;146;146;162;82;106;146;146; 170;82;106;146;154;170;82;
106;146;154;194;82;106;146;146;186;82;106;146;154; 138;82;106;146;146;194;82;
106;146;154;178;82;106;146;154;154;82;106;146;154; 130;82;106;146;146;178;82;
106;146;154;138;82;106;146;146;130;82;106;146;154; 154;82;106;146;146;146;82;
106;146;162;138;82;106;146;146;202;82;106;146;154; 194;82;106;146;146;154;82;
106;146;154;138;82;106;146;146;138;82;106;146;154; 138;82;106;146;146;154;82;
106;146;154;154;82;106;146;146;162;82;106;146;162; 138;82;106;146;146;130;82;
106;146;146;186;82;106;146;154;138;82;106;146;162; 138;82;106;146;146;154;82;
106;146;138;202;82;106;146;146;170;82;106;146;146; 202;82;106;146;146;154;82;
106;146;146;170;82;106;146;138;178;82;106;146;146; 138;82;106;146;138;178;82;
106;146;154;138;82;106;146;138;178;82;106;146;154; 202;82;106;146;154;138;82;
diese zahlen kommen bei mir auf dem terminalprogramm nicht vor. bei mir sind diese alle über 200. die pixel sind auch alle schwarz.
im "album, persönliche galerie,pebisoft" habe ich ein schnapp reingestellt.
mfg pebisoft

tobimc
16.06.2005, 17:38
Hi pebisoft!

Hm! Kannst du das Fehler-Popup etwas verschieben, dass ich die Einstellungen sehen kann?
Hast du etas an den Stopbits oder an der Parität verdreht?
Als ich das nämlich gemacht habe, ist's bei mir auch abgestürzt.

Stell mal nichts an de COM-Einstellung um.
Müsste schon tun!

Viele liebe Grüße,
Tobi

pebisoft
16.06.2005, 17:42
hallo tobi, ich habe nur die baud auf 19200 eingestellt. auch wo ich deine einstellung gelassen habe zeichnet es über deine bildschirmvorgabe und stürzt ab. auch im log sind alle zahlen unter 200 obwohl ich wieder auf dem terminal nur zahlen habe von jetzt 219 - 253.
habe neuen schnapp reingestellt (album,persönliche galerie,pebisoft)
mfg pebisoft

tobimc
16.06.2005, 17:48
Hi!

Mit welcher Einstellung sendet dein AVR?
Stell ihn mal auf: 9600 8 Datenbits, ein Stopbit, keine Parity. (9600:8N1)

Kommt beim Programmstart eine Fehlermeldung?

Welches OS benutzt du?

Achte darauf, dass du den RESET des AVRs bereits VOR dem Connecten auslöst, und das Programm erst dann laufen lässt, wenn du auf GO geklickt hast...

Liebe Grüße,
Tobi

pebisoft
16.06.2005, 17:56
stürtzt auch ab. zeichnet auch über dein fenster. jetzt zeichnet er aber die daten bis hinten über dein fenster in grau. wenn er über dei zeichenfenster zeichnet stürtzt er erst ab, ist ja auch klar, er landet da im porgrammspeicher. mich interessieren deine umrechnungsfaktoren für die zahlenwerte.
ich glaube du machst einen denkfehler bei der graustufenumrechnung.
auch deine reingeschriebenen zahlen in der logdatei sind immer wieder anders als im terminalfenster, wahrscheinlich auch ein umsetzungsfehler im programm.
alles ausprobiert, alle dateneinstellungen. wie gesagt, er stürtzt erst ab, wenn deine daten in den programmspeicher geschrieben werden.

ich vermute, das dein programm bei der umsetzung der daten in die logdatei zu langsam ist und dadurch die zahlen verhudelt werden.
mfg pebisoft

tobimc
16.06.2005, 18:09
Hi pebisoft!

Es werden keine Graustufen umgerechnet!!
Die Bytes werden so angezeigt, wie sie über die rs232 kommen!

Die GB-CAM sollte einen so großen Graustufenunterschied ausgeben, dass sich das Bild auf dem Bildschirm klar abzeichnen müsste.

Bei mir sind die Differenzen genau so klein. Dass muss an den Registern liegen!

Viele liebe Grüße,
Tobi

pebisoft
16.06.2005, 18:23
hallo tobi, das kann so garnicht gehen. jedes byte stellt ein bildpixel dar. dem programm muss doch gesagt werden, welche zahl welchen rgb-wert entspricht, ohne dem läuft nichts, rein garnichts. ich glaube du hast hier etwas falsch gemacht. überleg noch einmal.

"Die GB-CAM sollte einen so großen Graustufenunterschied ausgeben, dass sich das Bild auf dem Bildschirm klar abzeichnen müsste. "

die gb-cam gibt keine graustufenwerte aus , nur zahlen vom bildchip.
diese zahlen müssen wir uns erst für unsere bildschirmabbildung zurechtschneiden.

mfg pebisoft

tobimc
16.06.2005, 18:32
HI pebisoft!

nein nein nein!
Eine S/W-Camera kann KEIN FARBSIGNAL ERZEUGEN!!
Die Farben werden in Graustufen ausgegeben.

Das wird so gemacht, in dem jedes Byte für R, G und B eingesetzt.
So werden die Graustufen generiert.

Irgendwas muss mit deiner Übertragung nicht stimmen.

Viele liebe Grüße,
Tobi

pebisoft
16.06.2005, 18:46
aus den zahlenwerten der gameboy-cam kann man 4-16 graustufen herstellen auf dem pc. durch den 3 farbwerten rbg wir dann der punkt erzeugt. die farbwerte auf dem bildschirm werden duch bitplane erzeugt. für jede hoch2-farbzahl wir eine bitplane benutzt. ohne zb. "farbwert(r,g,b)" kommt nicht zu stande. und die werte für rgb müssen wir erst durch versuche erzeugen.
erklär mir einmal, warum die ankommenden zahlenwerte auf dem terminal am pc den gleichen wert haben wie auf dem lcd-display am avr, aber mit deinen abgespeicherten zahlenwert nicht übereinstimmen.
also die zahlen kommen richtig auf dem pc an, so wie sie vom adc erzeugt werden.
mfg pebisoft

tobimc
16.06.2005, 18:52
Hi pebisoft!

Wie viele Zahlenwerte man aus den Werten der GB-CAM generieren kann hängt duch rein von der Auflösung des ADCs ab!
Der Gameboy kann nur 4 auslesen.

Die eigentliche CAM kann aber viel mehr!

Die Erzeugung und ausgabe der Pixel auf dem Bildschirm sieht GENAU so aus:


SetPixel(hdc, x + directx, y + directy, RGB(szLine, szLine, szLine)); //Malen
fprintf(log1, "%i;", szLine); //Logginganweisung
iAllpixels[x][y] = szLine;

:)

Viele liebe Grüße,
Tobi

tobimc
16.06.2005, 19:16
Hi!

MEINE
CAM
HAT
GERADE
READ
AUF
LOW
GELEGT!!

Y E S!!


Allerdings liefert sie nicht exakt die Anzahl Pixel, die ich brauche...
ABER DAS BEKOMME ICH SCHON HIN!!!

Ganz liebe Grüße,
Tobi

tobimc
16.06.2005, 20:29
Hi!

Frage: Was machen die Register 4, 5 und 6?

Viele liebe Grüße,
Tobi

tobimc
16.06.2005, 21:26
Hi!

Ich weis, das ist schon der 3.Post hintereinander...

Ich habe hier ein paar Snapshots für euch:

http://www.tobias-schlegel.de/PublicData/gbcv/1/1.jpg
Das Bild

http://www.tobias-schlegel.de/PublicData/gbcv/1/1red.jpg
Nach einer Wellneskur im Paintshop... (Helligkeit und Kontrast)

http://www.tobias-schlegel.de/PublicData/gbcv/1/1red2.jpg
Und das sind mögliche Deutungsversuche.

Leute ist das irgendwas brauchbares, oder...?
Ich benutze Gerade die Register von DerInder.

Immerhin sendet sie ein # (ASCII 35), ein Stopsignal, dass ich noch nachträglich schnell in den GBCV Programmiert habe.
D.h.: READ geht auf low, nach genau 16127 Lesezyklen.
Das hört sich ja recht gut an, nicht?

Was meint ihr dazu?

Viele liebe Grüße,
Tobi

pebisoft
16.06.2005, 23:19
wenn das deine form ist, die du der cam vorgehalten hast, ist das ein fortschritt. es fehlt, wie ich immer gesagt habe die anpassung des bereiches der zahlenwerte. jeder hat durch nichtanpassung immer ein anderes bild. da können wir uns drehn und wenden wie wir wollen. das was du durch dein paint programm erreicht hast, muss im programm anpassbar sein.
"READ geht auf low, nach genau 16127 Lesezyklen" damit habe ich kein problem. bei mir sind es die adc-werte.
"RGB(szLine, szLine, szLine)" diese 3 werte dort drinnen, das müssen die angepassten adc bytes von der gameboy sein. ohne anpassung kein bild.
mfg pebisoft

Kjion
17.06.2005, 00:04
Hi,

hier auch noch mal ein kleiner Screenshot von mir ;-)

http://www.kreatives-chaos.com/extern/gbcam_viewer.jpg
Allerdings ist das Bild noch verdreht. Hier nochmal das gleiche mit einem kleinem Java Programm:
http://www.kreatives-chaos.com/extern/gbcam_java.jpg

Und die Registereinstellungen dazu:

gbcam_load_register( 0, 0x80 );
gbcam_load_register( 1, 0x0c );
// Belichtungszeit
gbcam_load_register( 2, 0x04 );
gbcam_load_register( 3, 0x00 );

gbcam_load_register( 4, 0x01 );
gbcam_load_register( 5, 0x00 );
gbcam_load_register( 6, 0x01 );
gbcam_load_register( 7, 0x07 );
Wobei sich die Register für die Belichtungszeit je nach Helligkeit automatisch angepasst werden.


jeder hat durch nichtanpassung immer ein anderes bild.
Genau, allerdings sollte man die Kamera Registereinstellungen anpassen und nicht das PC Programm! Dann bekommt man auch Werte im Bereich von 0 bis 255 von der Kamera!

MfG Kjion

pebisoft
17.06.2005, 00:25
das bild oben ist aber nicht von einer gameboy-cam mit 128 x 128 pixel in 4 graustufen. oder?
mfg pebisoft

Kjion
17.06.2005, 09:39
das bild oben ist aber nicht von einer gameboy-cam mit 128 x 128 pixel in 4 graustufen. oder?

Die beiden Bilder sind von einer ganz normalen Gameboy Kamera aufgenommen, allerdings mit 256 Graustufen!

MfG Kjion

pebisoft
17.06.2005, 10:20
mich würde mal deine gesamtschaltung interessieren und deine programme, die du für deine bildauswertung benutzt.
ein gutes projekt hast du da. stell mal ein foto rein.
wie liegen deine zahlenwerte bei den ausgabebytes der gameboy-cam.
welche aref-volt hats du am avr.
mfg pebisoft

tobimc
17.06.2005, 12:41
HI pebisoft!

*ARGH!*
ES HÄNGT NICHT VON DER KAMERA AB; WIE VIELE GRAUSTUFEN DU BEKOMMST!!!
ICH HABE AUCH 256 GRAUSTUFEN!
Das hängt allein von deinem ADC ab.
Du kannst von der GB-Cam auch 512 oder 1024 oder 2048 oder 4096 oder eben nur 4 Graustufen bekommen.
Das hängt einzig und allein mit dem ADC zusammen!!

Die CAM gibt die Pixelwerte analog aus.
Die Spannungsdifferenz beträgt 5V, von 0 bis 5V. 0V ist schwaz, und 5V ist weiß. In wie vielen Schritten du das mit deinem ADC misst, ist sekundär.
Der GameBoy ist halt zu Blöd, um mehr als 3Bit Pixelwerte zu haben.

Und deshalb kann man auch direkt die ADC-Werte als Pixelgraustufe ins Programm setzen.
Und deshalb muss ich auch die Graustufen nicht umrechnen.

Hätte die Cam nur 4 Graustufen, wäre sie für mein Projekt völlig ungeeignet.

Viele liebe Grüße,
Tobi

Kjion
17.06.2005, 12:45
Die Schaltung ist wie ich schon geschrieben hatte, die aus dem Weihnachtswettbewerb:
http://www.kreatives-chaos.com/index.php?seite=gbcam.

Die Referenzspannung des ADC liegt bei 5 Volt. Damit bekomme ich nach einer Kalibierung 8-Bit Werte im Bereich von 4 bis ca. 240, also über den vollen Bereich!

Den Quellcode zu den Grundfunktionen des Boards gibts ein paar Posts weiter vorne. Da fehlt nur noch die automatische Belichtungsanpassung.

Die Programm mit denen ich am PC die beiden Bilder aufgenommen wurden sind zum einem das von tobimc und das Java Programm aus dem Link den derInder gepostet hatte. Allerdings hab ich da noch ein bißchen die Baudrate usw. im Quellcode umgestellt.


READ geht auf low, nach genau 16127 Lesezyklen
Es sollten eigentlich genau 16384 Werte sein. Kann es sein, das bei der seriellen Übertragung Werte vorloren gehen ??

MfG Kjion

tobimc
17.06.2005, 12:49
HI Kjion!

Hab ich mit meinem Beitrag über deinem recht?

>>Es sollten eigentlich genau 16384 Werte sein. Kann es sein, das bei
>>der seriellen Übertragung Werte vorloren gehen ??
Hm. Das ist schon möglich. Es kann auch sein, wen ien Pixel den ADC-Wert 35 hat, dass dann ein STOP-Signal ausgelöst wird.
Ist aber meistens nicht so.

Kann das mit dem Register 4 zusammenhängen?

Viele liebe Grüße,
Tobi

Kjion
17.06.2005, 12:52
Du kannst von der GB-Cam auch 512 oder 1024 oder 2048 oder 4096 oder eben nur 4 Graustufen bekommen. Das hängt einzig und allein mit dem ADC zusammen!!

Du kannst nur das Analoge Signal mit der Genauigkeit auswerten. In dem Fall bringt viel allerdings nicht viel. Man sollte von der GBCam nicht zu viel erwarten. Selbst bei 8-Bit sieht man schon das das Bild verrauscht ist. :-(

Viel kann man mit der Kamera wirklich nicht machen. Ich habe gestern mal versucht den Kontrast automatisch anzupassen. Da hat man dann das Rauschen schon sehr schön gesehen ;-)

Was allerdings gehen sollte sind so einfache Sachen wie Linien erkennen und auswerten. Ich werde in dieser Richtung mal ein bißchen herumspielen.

MfG Kjion

tobimc
17.06.2005, 12:55
Hi Kijon!

Was tun eigentlich die Register 4, 5 und 6?
Ich habe nämlich das dumme Gefühl, dass es bei mir an denen liegt...
Kontrast... Wär nicht schlecht!

Viele liebe Grüße,
Tobi

Kjion
17.06.2005, 12:56
Es kann auch sein, wen ien Pixel den ADC-Wert 35 hat, dass dann ein STOP-Signal ausgelöst wird.

Du hast doch nicht etwas das STOP Signal auf den Wert 35 gelegt, oder ?? Sowas macht nur bei 0 oder 255 Sinn ( die kann man ja ganz einfach dann auf dem AVR begrenzen ). Dazwischen würde ich aber auf keinen Fall Steuersignal legen !

MfG Kjion

PS: sehr lustig wenn zwei Leute gleichzeitig Beiträge schreiben und jeweils der eine noch auf den davor antwortet ;-)

tobimc
17.06.2005, 12:58
Hi Kjion!

Ja, ich weis, dass ist dumm. Aber ich war bisher zu faul das zu ändern... :D

Notiz: Im Release b, den ihr da alle habt hat keine STOP-überprüfung.

Was ist mir den Registern?

Viele liebe Grüße,
Tobi

Kjion
17.06.2005, 13:17
Im Datenblatt (http://geocities.com/vjkemp/M64282FP.PDF) heißt es dazu : "1-D filtering kernel".
Damit kann man theoretisch schon ein bißchen Bildverarbeitung direkt auf der CAM Betreiben, zum Beispiel Kantenerkennung usw. Wie gut das funktioniert weiß ich allerding noch nicht.

Ich hab mich bei dem Einstellen dieser Register an die Empfehlungen des Datenblattes für ein normales Bild gehalten ( Seite 14 ).

MfG Kjion

pebisoft
17.06.2005, 13:22
hallo kjion, ich habe jetzt einmal komplett java installiert. die demoprogramme laufen alle, auch mit dem appletviewer usw.
kannst du einmal deine ganzen programme für java, womit du die gameboycam zum laufen gebracht hast hier reinstellen oder mailen.
ich bin gespannt es meine cam damit läuft. würde mich und andere sehr freuen.
auch dieses videocaptureprogramm in java. oder mail sie mir mal: pebisoft@arcor.de
vielen dank.
mfg pebisoft

tobimc
17.06.2005, 13:55
HI!

kjion; bei deinen Registereinstellungen stoppt miene Kamera nicht mal...
(READ geht nicht auf LOW...)

Ist meine Cam defekt, oder woran liegt das?

Viele liebe Grüße,
Tobi

roboter
17.06.2005, 14:13
Immerhin geht dein READ abundzu auf LOW.
Meiner geht nie auf LOW, egal ob ich jetzt Kjions Register oder die von DerInder benutze. 8-[ 8-[ :-s :-s

tobimc
17.06.2005, 14:28
Hm.
Da muss irgendein Bug in unserer Register oder Startsoftware sein.
Weil bei mir gehts auch nus sporadisch.
Aber ich sehe mit freude, dass wenn ich das Register null von 0x0C auf 0x00 setze, dass dann das Bild dunkler wird... :D

Muss man zwischen den Rigistern eine gewisse Zeit warten, oder zwischen den einzelnen Phasen?

Viele liebe Grüße,
Tobi

Viele liebe Grüße,
Tobi

tobimc
17.06.2005, 14:48
Hi!

Ich habe bei mir folgendes herausgefunden:
Register 3 darf bei mir NICHT (auf gar keinen Fall) 0 sein, weil sonst kein STOP kommt.
Mit den Registereinstellungen fon Kjion und Reg 3 auf 0x03 kommt folgendes heraus (reproduzierbar)

http://www.tobias-schlegel.de/PublicData/gbcv/2/3.jpg
So kam's heraus. WAS IST DAS?

http://www.tobias-schlegel.de/PublicData/gbcv/2/3a.jpg
Der schwarze Strich ist nur ein Redaw-Phänomen

http://www.tobias-schlegel.de/PublicData/gbcv/2/3c.jpg
Gedreht

http://www.tobias-schlegel.de/PublicData/gbcv/2/3b.jpg
Mit Kontraständerung

Was ist das? Würde gut passen, ich habe die CAM einfach ins Zimmer gerichtet.

Viele liebe Grüße,
Tobi

tobimc
17.06.2005, 15:15
Hi!

Noch welche!

http://www.tobias-schlegel.de/PublicData/gbcv/2/4.jpghttp://www.tobias-schlegel.de/PublicData/gbcv/2/4a.jpg

Objekte:
http://www.tobias-schlegel.de/PublicData/gbcv/2/4b.jpg

Hm. Ich muss sagen, dass das linke ich und das rechte ein aufgehängtes Hemd sein könnte.

Allerdings kommt nur die Hälfte des Bildes.

Viele liebe Grüße,
Tobi

tobimc
17.06.2005, 20:05
Hi!

Was'n dat??

http://www.tobias-schlegel.de/PublicData/gbcv/2/5.jpg

Wieso kommt nur die Hälfte des Bildes?

Registereinstelllungen:


Regadr = 0 'Register NUMMER 0:
Regvalue = &H80
Call Loadreg()

Regadr = 1 'Register NUMMER 1:
Regvalue = &H0C
Call Loadreg()

Regadr = 2 'Register NUMMER 2:
Regvalue = &H04
Call Loadreg()

Regadr = 3 'Register NUMMER 3:
Regvalue = &H05
Call Loadreg()

Regadr = 4 'Register NUMMER 4:
Regvalue = &H01
Call Loadreg()

Regadr = 5 'Register NUMMER 5:
Regvalue = &H01
Call Loadreg()

Regadr = 6 'Register NUMMER 6:
Regvalue = &H01
Call Loadreg()

Regadr = 7 'Register NUMMER 7:
Regvalue = &B00000111
Call Loadreg()

Viele liebe Grüße,
Tobi

tobimc
18.06.2005, 22:14
Hi!

Nach längerer Forschung:
Mein Problem ist:
Ich schätzen, dass meine CAM überbelichtet ist.
Also habe ich Register2 auf 0x00 gesetzt, und versuche nun, mit Register 3 die Belichtung zu regeln.
NUR: Je größer der Wert in Register 3 wird, desto kleiner wird mein Bild...!
Üder könnte ich die 'Verstärkung' noch etwas herunterfahren?

Viele liebe Grüße,
Tobi

pebisoft
20.06.2005, 20:20
hallo, hat einer von euch schon einmal über die speicherung der cam-daten in einem i2c-eeprom 24c256 nachgedacht. oder ist es zu langsam.
mfg pebisoft

tobimc
20.06.2005, 20:30
hi pebisoft!

I²C... ist zu langsam, meiner Ansicht nach!
naja, Page write...

Wie gesagt, ich verwende da eine Busstruktur.

Viele liebe Grüße,
Tobi

Pascal
20.06.2005, 21:10
hallo, hat einer von euch schon einmal über die speicherung der cam-daten in einem i2c-eeprom 24c256 nachgedacht. oder ist es zu langsam.

für was sollen die Daten gespeichert werden? Nur um sie dann wieder weiterzusenden, also als Zwischenspeicher, oder sollen die Daten dann da länger gespeichert werden?

pebisoft
20.06.2005, 21:13
hallo tobi, hast du schon irgendwie ein sichtbares bild bekommen.
ich habe zur zeit eine graue fläche. klappt irgendwie nicht.
werde wohl weiter am capturevideo bzw grabber-bmp-bild mit visualbasic arbeiten. klappt zur zeit sehr gut. es fehlt nur noch eine auswertung des bildes. das visual-fenster (commandopult und videoüberwachung des robby mit bildgrabber)sieht richtig gut aus.
mfg pebisoft

tobimc
20.06.2005, 21:36
Hi pebisoft!

Naja, ich habe noch ein Paar Probleme. z.B. ist die Cam total überbelichtet. Ich habe schon bilder bekommen, auf denen man erkennen konnte, was fotografiert wurde.

Ich musste die Verstärkung voll herunterfahren usw.

Graue fläche hatte ich auch lange.
Dreh' und spiel mal mit den Registern rum.

Viele liebe Grüße
Tobi

pebisoft
20.06.2005, 21:56
wo speicherst du deine daten zwischen.
wie stehen deine registerwerte.
mfg pebisoft

roboter
21.06.2005, 00:02
@pebisoft:
Zum zwischenspeichern würde ich einfach ein Ram nehmen. Zum Beispiel das 62256. Sind 32K und reicht für 2 Bilder. Oder habe ich dich jetzt irgendwie falsch verstanden?

@tobimc:
Was hast du eigentlich für einen A/D-Wandler?
Hast du das Problem mit dem Readpin schon hingekriegt? Ich noch nicht...

pebisoft
21.06.2005, 08:28
hallo, ich habe den ad-wandler vom avr-16, also keinen externen.
ich habe ein programm von winavr-c. zur zeit ändere ich dauernd die belichtungsregister, habe aber immer nur ein graues bild. ich übertrage die daten 1:1 über die serielle schnittstelle zum pc zu tobis programm.
wie schliesst du überhaupt deinen speicher am avr an. mit welchen programm bedienst du deine gameboy-cam und mit welchen avr arbeitest du.
mfg pebisoft

pebisoft
21.06.2005, 08:34
hallo pascal, die daten müssen zwischengespeichert werden, weil diese im speicher flüchtig sind, das heisst, wenn ich sie nicht schnell genug raushole löschen die sich nach einer sehr kurzen zeit. ich vermute das der datentransfer zum pc schon zu lange ist.
mfg pebisoft
ps: oder kann einer genau sagen, wie lange diese daten im speicher von der gameboy-cam bleiben, würde mich interessieren.

pebisoft
21.06.2005, 08:37
hallo tobi, kannst du mal ein bild reinstellen von deiner quasiaufnahme und einmal dafür die register darlegen. ich hatte vergessen, mit welchen programm fragst du deine gameboycam ab. diene platine dafür würde ich einmal gerne sehen.
mfg pebisoft

tobimc
21.06.2005, 13:27
Hi

Also die Daten der Camera könnten tatsächlich flüchtig sein, den Kjion speichert sie auch zuerst in einem RAM.
Ich werde das nacher auf jeden Fall auch testen.

Meinen Prozessor und die Platine sind noch etwas geheim. Ich sage nur soviel: Es handelt sich um einen der ATMEGA Serie, und er ist in SMD.

Bild und Register poste ich nacher (habe gleich Mittagschule.)
Tip: Dreh mal zur Belichtung auch die Verstärkung (stark?) herunter.
Habe ich fast gute Ergebnisse bekommen.

Ich benutze einen internen 8-Bit ADC des AVRs. (Na, welchen AVR benutze ich jetzt? Wie gesagt, EINEN _8-BIT_ ADC...)
Da spare ich mir viel rechnerei.

Bis gleich!

Viele liebe Grüße,
Tobi

roboter
21.06.2005, 13:41
Also: Ich habe jetzt mal ne Schaltung angefertigt.
Im Moment habe ich noch alles so ähnlich auf so einem Steckbrett, aber ich wollte das ganze demnächst vernünftig ätzen O:)
Vielleicht werden sich noch Kleinigkeiten bei der Platine ändern, mal schauen...

Was würdet ihr zu der Schaltung sagen? Ist sie geeignet um eine GB-Cam anzusteuern und so weiter? Ich bin für Kritik immer offen O:)

tobimc
21.06.2005, 13:44
HI!

Das sieht sehr gut aus!
Aber hast du noch IOs für die restlichen Pins der Cam?

Das Readpin-Problem bleibt zwar mystheriös, aber ich habe es soweit. Nur bei manchen Registereinstellungen tritt es wieder auf.

-> Dann habe ich auch einen grauen Bildschirm!

Viele liebe Grüße,
Tobi

roboter
21.06.2005, 13:49
Aber hast du noch IOs für die restlichen Pins der Cam?
Welche restlichen Pins? Es sind doch alle Pins der Kamera am AVR angeschloßen...

DerInder
21.06.2005, 13:52
@roboter
warum drehst du die Verbindungen zwischen dem '573 und dem RAM?
Ist doch egal in welcher Reihenfolge die Speicherzellen angesprochen werden, Haupsache sie ist immer gleich. ;)
Ansonsten siehts nett aus.

Kjion
21.06.2005, 15:36
Hi,

Ich würde wenn schon mit externem RAM dann auch einen ordentlich schnellen ADC verwenden, damit man das Bild auch sehr schnell auslesen kann und dann mehr Zeit für das Verarbeiten zur Verfügung hat.

Schaut euch doch mal mein Board für die GBCam an. Da ist das doch schon alles genau so drauf :-)

http://www.kreatives-chaos.com/index.php?seite=gbcam
( mit Eagle Files, Quellcode fürs Board gibts auch schon ... )

MfG Kjion

Pascal
21.06.2005, 15:50
die daten müssen zwischengespeichert werden, weil diese im speicher flüchtig sind, das heisst, wenn ich sie nicht schnell genug raushole löschen die sich nach einer sehr kurzen zeit. ich vermute das der datentransfer zum pc schon zu lange ist.

um die Daten zwischenzuspeichern, würde ich eher RAM empfehlen, denn dauerhaftes Speichern, wie es bei EEPROM der Fall ist, ist doch nicht nötig

tobimc
21.06.2005, 15:53
Hi Kjion!

Schon. Ich habe ja funktionierendes RAM auf meiner Platine.
Die Frage ist, wie lange man maximal das Bild auslesen darf, bevor es 'verrottet'...

Du machst das ja auch so.

Viele liebe Grüße,
Tobi

roboter
21.06.2005, 17:43
@Kjion:
Der Grund warum ich ein 8591 nehme, ist ganz einfach.
Den hatte ich grade noch zu Hause rumliegen und wollte es deshalb erstmal damit ausprobieren :mrgreen:

tobimc
24.06.2005, 21:52
HI1

Also ein Verrotten der Cameradaten ist nicht zu bemerken, ich schreibe sie jetzt in mein RAM.

Sie werden direkt aus dem RAM am mein Programm gesendet.

Meine Camera zickt aber immernoch.

Viele liebe Grüße,
Tobi

pebisoft
24.06.2005, 21:56
"Also ein Verrotten der Cameradaten ist nicht zu bemerken, ich schreibe sie jetzt in mein RAM."
hallo tobi, wie lange hält eine aufnahme bei deinem test im gameboyspeicher.
mfg pebisoft

tobimc
24.06.2005, 22:07
Hi pebisoft!

Habe ich nicht getestet. Ist ehrlichgesagt auch wurscht, selbst eine Übertragung mit 4800Baud kann locker durchgeführt werden!

Auf jeden Fall geht das Auslesen ins RAM viel schneler!
Aber meine CAM zickt ganz gewaltig.

Weis nicht, sieht irgendwie nach edge extraction aus, was die da macht...

Viele liebe Grüße,
Tobi

PS/EDIT:
So sieht das dann aus:
Kann jemand damit was anfangen?
http://www.tobias-schlegel.de/PublicData/gbcv/2/13.jpg

michaelb
24.06.2005, 22:09
Hallo Zusammen,
ich verfolge den Thread schon lange und hab ne Frage wie wird so ein RAM eigentlich angesteuert? Gibt es da Tutorials?
Gruß Michi

tobimc
24.06.2005, 22:11
Hi Michi,

Wenn du willst ich erklärs dir per PN, passt jetzt hier nicht rein.. :D
(Blätter mal ein paar Seiten vor!)

--> Nachtrag zum Bild:
Das Bild scheint verschoben zu sein, irgendwo hat die Cam mal ein oder zwei Pixel vergessen!

VLG Tobi

michaelb
24.06.2005, 22:13
kannst du es mir per PN erklären?
Wäre gut! Danke!
Gruß Michi

pebisoft
24.06.2005, 22:51
hallo, tobi, wie sehen jetzt deine registereinstellungen aus.
wie sieht für die cam dein programm aus. winavr-c oder bascom.
mfg pebisoft

tobimc
25.06.2005, 09:49
Hi!

Also meine Registereinstellungen (habe ich nur mal zum Test genommen, gab ein wunderbares Ergebniss, das Bild ist jetzt besser und gestern abend (> 10 Uhr) sogar etwas unterbelichtet!)

Die Register sehen so aus:


Regadr = 1 'Register NUMMER 1:
Regvalue = 7

Regadr = 2 'Register NUMMER 2:
Regvalue = 54

Regadr = 3 'Register NUMMER 3:
Regvalue = 1

Regadr = 4 'Register NUMMER 4:
Regvalue = 1

Regadr = 5 'Register NUMMER 5:
Regvalue = 00

Regadr = 6 'Register NUMMER 6:
Regvalue = 1

Regadr = 7 'Register NUMMER 7:
Regvalue = 7

Regadr = 0 'Register NUMMER 0:
Regvalue = 0

Das ergibt dann bei ziemlicher Dunkelheit dashier:
http://www.tobias-schlegel.de/PublicData/gbcv/2/15.jpg

Was sollen diese komischen 'Schlieren' also diese Großen Kontraständerungen? die kann ich absolut NICHT brauchen!!

Das Programm ist in BASCOM geschrieben, und meine PC-Software ist der GB Cam Viewer 0.5d beta.

Ich gehe jetzt auf die HAM RADIO.
Antennen für Sunys Funk kaufen und ein Bisschen rumstöbern... :D

Viele liebe Grüße,
Tobi

DerInder
25.06.2005, 10:19
Hallo Tobi
setz mal Register 3 auf 0 vielleicht hilft es

pebisoft
25.06.2005, 11:18
hallo tobi, kannst du dein bascomprogramm mal hier reinstellen, vielleicht machen wir einen fehler bei irgend einem timing. das programm zum auslesen der gameboy-cam wird wohl kein geheimnis sein.
danke für dein verständnis.
mfg pebisoft

Michael
25.06.2005, 14:17
Hallo tobimc,

Was sollen diese komischen 'Schlieren' also diese Großen Kontraständerungen?
das sieht mir nach einem Überlauf von 255 auf 0 aus, da es nur in den hellen Bereichen auftritt. Ich tippe auf einen Fehler im Auswerteprogramm.
Gruß, Michael

pebisoft
25.06.2005, 19:46
habe hier mal ein programm zusammengestellt aus auszügen für die gameboy-cam in winavr-c. die daten werden bei mir seriell mit 9600baud zum pc übertragen zum programm von tobi. ich habe ein avr16 mit 8mhz intern und den adc-port-a0 benutzt.

adc.h :



#define ADCchannel_init DDRA=0x00 // ADC Port als Eingang deklarieren
#define ADCinit ADCSRA|=_BV(ADEN) // Teilt dem Board mit das der jeweilige Port für ADC verwendet wird
#define ADCdisable ADCSRA &=~_BV(ADEN) // machs das vorherige wieder rückgänig
#define ADCstart ADCSRA|=_BV(ADSC) // startet eine konvertierung auf dem gewünschten Kannal/Pin
#define ADCfree ADCSRA|=_BV(ADATE) // schaltet den freilaufenden Modus ein
#define ADCvintern ADMUX|=_BV(REFS0) // interne Spannungsversorgung
#define ADCinterrupt_on ADCSRA|=_BV(ADIE) // ADC interrupt wird freigeschalten
#define ADCprescaler_2 ADCSRA |=_BV(ADPS0) // gewünschter Teilungsfaktor/Prescaler
#define ADCprescaler_4 ADCSRA|=_BV(ADPS1)
#define ADCprescaler_8 ADCSRA=_BV(ADPS1) | _BV(ADPS0)
#define ADCprescaler_16 ADCSRA|=_BV(ADPS2)
#define ADCprescaler_32 ADCSRA=_BV(ADPS2) | _BV(ADPS0)
#define ADCprescaler_64 ADCSRA=_BV(ADPS2) | _BV(ADPS1)
#define ADCprescaler_128 ADCSRA=_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0)
#define ADCprescaler_reset ADCSRA = ~_BV(ADPS2) & ~_BV(ADPS1) & ~_BV(ADPS0)
#define ADCchannel_1 //gewünschter Kannal z.B bei ATmega32 PINA0 - PINA7
#define ADCchannel_2 ADMUX|=_BV(MUX0) // bei nicht freilaufen muss ADCchannel_x vor
#define ADCchannel_3 ADMUX|=_BV(MUX1) // ADCstart kommen dann kann man mit getadc() der
#define ADCchannel_4 ADMUX= _BV(MUX1) | _BV(MUX0) // Adcwert des gewählten Kannals auslesen
#define ADCchannel_5 ADMUX|=_BV(MUX2)
#define ADCchannel_6 ADMUX= _BV(MUX2) | _BV(MUX0)
#define ADCchannel_7 ADMUX= _BV(MUX2) | _BV(MUX1)
#define ADCchannel_8 ADMUX= _BV(MUX2) | _BV(MUX1) | _BV(MUX0)
#define ADCchannel_reset ADMUX= ~_BV(MUX2) & ~_BV(MUX1) & ~_BV(MUX0)

uint16_t getadc(void)
{
while (ADCSRA & _BV(ADSC)) {}
return ADC;
}


gameboy-cam:



#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <string.h>
#include <stdint.h>
#include <avr/delay.h>
#include "adc.h"

#define READ 1
#define WRITE 2

#define USART_BAUD_RATE 9600
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16l)-1)

#define GBPORT PORTB
#define GBDDR DDRB
#define GBPIN PINB
#define CCLK 7
#define CLOAD 6
#define CSIN 5
#define CREAD 4
#define CSTART 1
#define CRESET 0


void delay_us(uint16_t us)
{
uint16_t zaehler;

while (us)
{
zaehler = F_CPU / 5000000;
while (zaehler)
{
asm volatile ("nop");
zaehler--;
}
us--;
}
}

void usart_init(int Enable, int Interupts)
{
if (Enable & READ) UCSRB = (1<<RXEN);
if (Enable & WRITE) UCSRB |= (1<<TXEN);

if (Interupts & READ) UCSRB |= (1<<RXCIE);
if (Interupts & WRITE) UCSRB |= (1<<TXCIE);
UBRRL = (unsigned char) USART_BAUD_SELECT;
}

void usart_writeChar(unsigned char c)
{
while (!(UCSRA & (1<<UDRE))) {}
UDR = c;
while(!(UCSRA & (1<<TXC))) {}
}

void usart_writeString(unsigned char *string) {
while (!(UCSRA & (1<<UDRE))) {}
while ( *string)
usart_writeChar(*string++);
}

// Laden der Register der gbcam
void gbcam_load_register(uint8_t adresse, uint8_t daten)
{
/* 3-Bit Adresse und 8-Bit Daten
Die Übertragung erfolgt über ein syncrones Protkoll mit CCLK, CSIN und CLOAD */

uint8_t i;

adresse &= 0x07;

// Übertragen der Adresse ( 3-Bit )
for (i=0;i<3;i++)
{
if ( ( adresse & 0x04 ) > 0 ) {
GBPORT |= (1<<CSIN);
}
adresse <<= 1;

GBPORT |= (1<<CCLK);
delay_us(10);
GBPORT &= ~(1<<CCLK);
delay_us(1);
GBPORT &= ~(1<<CSIN);
delay_us(1);
}

// Übertragen der Daten ( 8-Bit )
for (i=0;i<8;i++)
{
if ( ( daten & 0x80 ) > 0 )
GBPORT |= (1<<CSIN);
daten <<= 1;

GBPORT |= (1<<CCLK);
/* Beim letzen Bit muß zusätzlich die CLOAD Leitung gesetzt werden,
Nachdem CCLK gesetzt wurde */
delay_us(5);
if (i == 7) {
PORTB |= (1<<CLOAD);
}
delay_us(5);
GBPORT &= ~(1<<CCLK);
delay_us(1);
GBPORT &= ~((1<<CSIN)|(1<<CLOAD));
delay_us(1);
}
}

// Starten der Aufnahme
void gbcam_start(void)
{
// Startsignal erzeugen
GBPORT |= (1<<CSTART);
delay_us(1);
GBPORT |= (1<<CCLK);
delay_us(10);
GBPORT &= ~(1<<CSTART);
delay_us(1);
GBPORT &= ~(1<<CCLK);
delay_us(1);
}

// Kamera zurücksetzen
void gbcam_reset(void)
{
// Resetleitung auf Low ziehen
GBPORT &= ~(1<<CRESET);
delay_us(1);
GBPORT |= (1<<CCLK);
delay_us(10);
GBPORT |= (1<<CRESET);
delay_us(1);
GBPORT &= ~(1<<CCLK);
delay_us(1);
}

// Intitialisieren der Gameboy Kamera
void gbcam_init(void)
{
GBDDR = (1<<CCLK)|(1<<CLOAD)|(1<<CSIN)|(1<<CSTART)|(1<<CRESET);
GBPORT = (1<<CRESET)|(1<<CREAD);

gbcam_reset();

/* Laden der Register der Gameboy Kamera,
Einstellungen für ein normales Bild */
gbcam_load_register( 0x00,0);
// 000 GAIN
gbcam_load_register( 0x01, 7);
// Belichtungszeit
gbcam_load_register( 0x02, 54);
gbcam_load_register( 0x03, 1 );

gbcam_load_register( 0x04, 1 );
gbcam_load_register( 0x05, 0 );
gbcam_load_register( 0x06, 1 );
gbcam_load_register( 0x07, 7 );
}

int main (void)
{

char wert_str[10];
uint16_t adc_wert;

usart_init( (READ + WRITE) , READ);

ADCchannel_init;
ADCinit;
ADCprescaler_16;
ADCchannel_1;

gbcam_reset();
gbcam_init();
gbcam_start();

/* Warten bis die gbcam bereit ist */
while ( ( GBPIN & (1<<CREAD) ) == 0 )
{
GBPORT |= (1<<CCLK);
delay_us(1);
GBPORT &= ~(1<<CCLK);
delay_us(1);
}

// 16384 Pixel auslesen
while( ( GBPIN & (1<<CREAD ) ) != 0 )
{
GBPORT |= (1<<CCLK);
delay_us(1);

// AD Wandler starten
ADCstart;
adc_wert=getadc();
// Daten einlesen
itoa( adc_wert,wert_str, 10);
usart_writeString(wert_str);

GBPORT &= ~(1<<CCLK);
delay_us(1);
}


}



mfg pebisoft

tobimc
25.06.2005, 21:51
Hi Jungs!


setz mal Register 3 auf 0 vielleicht hilft es
Das habe ich bereits versucht, aber dann geht READ nicht auf LOW!!


vielleicht machen wir einen fehler bei irgend einem timing.
Das kann gut sein. Bei mir aber nichtmehr, sonst würde ja kein Bild kommen... Schätz' ich zumendest mal!


das programm zum auslesen der gameboy-cam wird wohl kein geheimnis sein.
Das Programm nicht, nein. das ist aber dermaßen in Subroutinen und Funktionen verstrickt, dass ich immer selber gucken muss, welche Funktion gerade was macht...
Aber wenns ihr's unbedingt wollt...


danke für dein verständnis.
Für welches denn?


das sieht mir nach einem Überlauf von 255 auf 0 aus, da es nur in den hellen Bereichen auftritt. Ich tippe auf einen Fehler im Auswerteprogramm.
Das habe ich mir auch schon gedacht!!
Ich werde in den Logfiles mal nachsehen, wenn da 0 steht, dann liegts beim Auslesen des COMs, bzw. an der AVR-Software.

Wer wille eigentlich den GB Cam Viewer 0.5d (beta)?
Mit Bilddreh-Funktion!

Habe jetzt übrigens 2 wunderschöne Antennen für Suny!

Viele liebe Grüße;
Tobi

pebisoft
26.06.2005, 21:33
habe mir nach vielen stunden der gameboy-cam-darstellung heute die cmucam 2 bei roboter-teile.de bestellt. in einpaar tagen geht es los.
diese cam kann einmal video über mein videofunk auf dem robby zum pc senden, zum anderen ein bild als byte-werte über seriell-funk zum pc zum auswerten senden, die bilddaten werden auf der cmucamplatine im ram festgehalten, also nicht flüchtig und kann den robby daten übergeben zum steuern, je nach auswertung des bildausschnittes. wird eine interessante spielerei für eine lange lange zeit.
mfg pebisoft

tobimc
26.06.2005, 21:38
HI!

So kannst du's natürlich auch machen... :D

Verkaufst du mir deine Gameboy Cam?

Viele liebe Grüße,
Tobi

pebisoft
26.06.2005, 21:47
hallo tobi, die cmucam 2 ist zum auswerten der daten und für die steuerung des robby gedacht im zusammenspiel mit dem pc. das auswerten der daten für die gameboy-cam bleib weiterhin im forschungsbereich. du wolltest mir ja noch einmal ein platinenvorschlag mit ram unterbreiten für die speicherung der gameboy-daten. das angebot bleibt weiterhin bestehen. du wolltest doch noch einmal dein code für die auswertung reinstellen. macht nichts, wenn er verschachtelt ist. ich nehme keine bewertung vor. kannst ihn ja mal gleich reinstellen.
mfg pebisoft.

tobimc
26.06.2005, 21:54
Hi pebisoft!

OK.
Aber wenn du nur noch auf MCUCam-Trip bist, dann kannst du mir ja deine GBC verkaufen... :D
Die Platinen.......................................... ... .

Der jetzige Code ist folgender:

$regfile = "m8def.dat" 'ATmega8-Deklarationen
$crystal = 16000000 'Quarz: 16 MHz
$baud = 9600 'Baudrate der UART: 9600 Baud, 8N1

Dim A As Byte
Dim I As Byte

Dim Adcv As Byte

Dim Msb As Byte
Dim Lsb As Byte

Dim Regadr As Byte
Dim Regvalue As Byte

Dim C0 As Byte
Dim C1 As Byte
Dim G As Byte
Dim O As Byte


Dim Rda As Word


Config Adc = Single , Prescaler = Auto


Declare Function Laybus(byval Value As Byte) As Byte
Declare Function Readbus() As Byte
Declare Sub Writeram()
Declare Sub Readramstart()
Declare Sub Readramstop()
Declare Sub Flashadrlsb()
Declare Sub Flashadrmsb()
Declare Sub Formatram()

Declare Sub Resetcam()
Declare Sub Loadreg()
Declare Sub Camimp()
Declare Sub Capture()
Declare Sub Camdelay()


Ddrb = &B00111111 'Alles Ausgaenge :D (Ausser QUARZ!)
Ddrc = &B11111111 'Die auch
Ddrd = &B11101111 'und da bin ich noch nciht ganz sicher.

A = Laybus(0) 'Bus auf 00000000 (=0x00) setzen

Portd.7 = 1 'Outputenable Active: LOW
Portd.6 = 1 'WriteEnable Active: LOW

Portc.2 = 0 'LATCH ENABLE des LSB vom Adressbus/RAM ACTIVE HIGH
Portc.3 = 0 'LATCH ENABLE des MSB vom Adressbus/RAM ACTIVE HIGH


Portc.4 = 0 'Start, -et Aufnahmeprozess (HIGH)
Portc.5 = 0 'Sin, daten f. Register (HIGH)
Portd.2 = 0 'Load, Speichern Register (HIGH) 'Reset, System + Speicherreset
Portd.3 = 1 'Reset, Speicher + Systemreset (LOW)
Portd.5 = 0 'XCK, Taktleitung

'Portd.4 'READ, Zeigt, Ob Bild vorliegt



Call Formatram()

Print ""
Print "================================================== ====="
Print " CAMTEST.bas "
Print " Testet die Camera für LOG "
Print " Testphase3: Kamera auslesen. "
Print "================================================== ====="
Print ""

Print "Protocol:"
Print ""

I = 0
A = 0


'1.: Auslösen eines Resets
Call Resetcam()

'Print "CAM resetted"


A = Laybus(0)

'2.: Laden der Register.

Startproc:

Print "Bitte geben sie C1 (Reg 2 MSB) ein:"


Do
If Ucsra.rxc = 1 Then
C1 = Udr
A = 255
End If
Loop Until A <> 0

A = 0

Print "C1 beträgt: " ; C1




Print "Bitte geben sie C0 (Reg 3 LSB) ein:"

Do
If Ucsra.rxc = 1 Then
C0 = Udr
A = 255
End If
Loop Until A <> 0

A = 0

Print "C0 beträgt: " ; C0




Print "Bitte geben sie G (Reg 1) ein:"

Do
If Ucsra.rxc = 1 Then
G = Udr
A = 255
End If
Loop Until A <> 0

A = 0

Print "Gain beträgt: " ; G




Print "Bitte geben sie O (Reg 0) ein:"

Do
If Ucsra.rxc = 1 Then
O = Udr
A = 255
End If
Loop Until A <> 0

A = 0

Print "Offest beträgt: " ; O




Print ""
Print "Beginne in 5 Sekunden!"

Wait 8



Regadr = 1 'Register NUMMER 1:
Regvalue = G
Call Loadreg()

Regadr = 2 'Register NUMMER 2:
Regvalue = C1
Call Loadreg()

Regadr = 3 'Register NUMMER 3:
Regvalue = C0
Call Loadreg()


Regadr = 4 'Register NUMMER 4:
Regvalue = 1
Call Loadreg()

Regadr = 5 'Register NUMMER 5:
Regvalue = 0
Call Loadreg()

Regadr = 6 'Register NUMMER 6:
Regvalue = 1
Call Loadreg()

Regadr = 7 'Register NUMMER 7:
Regvalue = 7
Call Loadreg()


Regadr = 0 'Register NUMMER 0:
Regvalue = O
Call Loadreg()

'Print "Registers loaded."




'3. : Bild machen :D
Call Capture()

'Print "Startsignal done."



'4. : auf de voll krass Bild warten ey!

'Print "creating wait-clock"

I = 0

Do
Call Camimp()
I = I + 1

Loop Until Pind.4 = 1

'Print "Camera ready. Clocks created: " ; I


Call Camdelay()



'5. : voll krass de bild abhole, ey! ;D www.stophiphop.de Evolution. Mit uns. gegen HipHop.

'Print "ADC-Werte:"
'Print ""

Rda = 0

Do

Portd.5 = 0
Portd.5 = 1

Call Camdelay()

Portd.5 = 0

Start Adc
Adcv = Getadc(7)
Stop Adc

'RAM-Prozedur
Rda = Rda + 1

Msb = High(rda)
A = Laybus(msb)
Call Flashadrmsb()

Lsb = Low(rda)
A = Laybus(lsb)
Call Flashadrlsb()

A = Laybus(adcv)
Call Writeram()
'ENDE RAM


Waitus 2

Loop Until Pind.4 = 0




Rda = 0

For Rda = 0 To 16384

Msb = High(rda)
A = Laybus(msb)
Call Flashadrmsb()

Lsb = Low(rda)
A = Laybus(lsb)
Call Flashadrlsb()

Call Readramstart()

Adcv = Readbus()

Call Readramstop

Printbin Adcv
Printbin 59

Waitms 3

Next


A = Laybus(0)


Printbin 255

Call Formatram()
Wait 2
Goto Startproc


End
'================================================= ==============================================




Function Laybus(byval Value As Byte)

Ddrb = &B00111111 'Alles Ausgaenge :D (Ausser QUARZ!)
Ddrc = &B11111111 'Die auch,

Portc.1 = Value.0
Portc.0 = Value.1
Portb.5 = Value.2
Portb.4 = Value.3
Portb.3 = Value.4
Portb.2 = Value.5
Portb.1 = Value.6
Portb.0 = Value.7

End Function


Function Readbus()
Dim Value As Byte

Ddrb = &B00000000 'Alles Ausgaenge :D (Ausser QUARZ!)
Ddrc = &B11111100 'Die auch

Value.0 = Pinc.1
Value.1 = Pinc.0
Value.2 = Pinb.5
Value.3 = Pinb.4
Value.4 = Pinb.3
Value.5 = Pinb.2
Value.6 = Pinb.1
Value.7 = Pinb.0

Readbus = Value

End Function


Sub Writeram()

Portd.6 = 1
Portd.6 = 0 'ACTIVE LOW
Portd.6 = 1

End Sub



Sub Readramstart()

Portd.7 = 1
Portd.7 = 0 'ACTIVE LOW

End Sub


Sub Readramstop()

Portd.7 = 1

End Sub


Sub Flashadrlsb()

Portc.2 = 0
Portc.2 = 1 'Active HIGH
Portc.2 = 0

End Sub


Sub Flashadrmsb()

Portc.3 = 0
Portc.3 = 1 'ACTIVE HIGH
Portc.3 = 0

End Sub


Sub Formatram()

Msb = 0
Lsb = 0

Do

Lsb = Lsb + 1

If Lsb = 255 Then
Msb = Msb + 1
Lsb = 0
End If


A = Laybus(msb)
Call Flashadrmsb()

A = Laybus(lsb)
Call Flashadrlsb()

A = Laybus(0)
Call Writeram()


If Msb = 255 Then
Exit Do
End If

Loop


End Sub







Sub Resetcam()

Ddrc = &B11111111 'Die auch
Ddrd = &B11101111 'und da bin ich noch nciht ganz sicher.

Portd.3 = 1
Portd.5 = 0
Call Camdelay()
Portd.3 = 0
Call Camdelay()
Portd.5 = 1
Call Camdelay()
Portd.3 = 1
Call Camdelay()
Portd.5 = 0

End Sub


Sub Camimp()

Portd.5 = 0
Portd.5 = 1
Call Camdelay()
Portd.5 = 0
Call Camdelay()

End Sub


Sub Loadreg()
Dim Iii As Byte

'Print Regadr ; ": " ; Regvalue

'Erst: Adresse:

Portd.5 = 0
Portc.5 = Regadr.0
Call Camdelay()
Portd.5 = 1
Call Camdelay()
Portc.5 = 0
Call Camdelay()
Portd.5 = 0


Call Camdelay()

Portc.5 = Regadr.1
Call Camdelay()
Portd.5 = 1
Call Camdelay()
Portc.5 = 0
Call Camdelay()
Portd.5 = 0

Call Camdelay()


Portc.5 = Regadr.2
Call Camdelay()
Portd.5 = 1
Call Camdelay()
Portc.5 = 0
Call Camdelay()
Portd.5 = 0

'Call Camdelay()

'=====================0

For Iii = 7 To 0 Step -1

If Iii = 0 Then
Portd.5 = 0
Portc.5 = Regvalue.iii
Waitus 5
Portd.5 = 1
Call Camdelay()

Portd.2 = 0
Portd.2 = 1

Call Camdelay()
Portd.5 = 0
Portc.5 = 0

Call Camdelay()
Portd.2 = 0

Exit For
End If

Portd.5 = 0
Portc.5 = Regvalue.iii
Waitus 5
Portd.5 = 1
Call Camdelay()
Portc.5 = 0
Call Camdelay()
Portd.5 = 0

Call Camdelay()




Next



'Call Camimp()

End Sub


Sub Capture()

' Call Camdelay()

Portc.4 = 0
Portd.5 = 0

Portc.4 = 1
Call Camdelay()
Portd.5 = 1
Call Camdelay()
Portc.4 = 0
Call Camdelay()
Portd.5 = 0


End Sub


Sub Camdelay()

Waitus 5

End Sub

Bitte schaut auch nach Fehlern!! Ich bin nicht sicher, ob da nicht der ein oder andere Fehler dabei ist!

Da können/müssen welche drin sein, sonst müsste ich ja Bilder kriegen wie Kjion!

Viele liebe Grüße,
Tobi

pebisoft
26.06.2005, 23:18
hallo tobi, compelier dein programm mit bascom für eine avr-objekt-datei und lass es mal im avr-studio 4 laufen. deine waitus-zeiten stimmen nicht mehr, durch den sprung usw. bascom verschlabbert zuviel zeit. ein bascomprogramm lässt sich für solche sachen sehr schlecht schreiben.
bascom ist ein bummelprogramm.
mfg pebisoft

tobimc
27.06.2005, 13:20
Hi pebisoft!

An den Zeiten kanns nicht liegen, die sind nur dazu da um sicherzustellen, dass die Höchstfrequenz (>= 500KHz) nicht überschritten wird.

Aber man könnte sie kürzer machen, da hast du recht!

Viele liebe Grüße,
Tobi

roboter
28.06.2005, 12:56
Mein Readpin geht jetzt auch auf LOW. \:D/
Ich habe aber nicht allzuviel an meinem Programm verändert, scheint wirklich irgendwie mit den Registern zusammen zu hängen.

@tombic:
Ich habe deine Register übernommen, aber ich kann auch ruhig Register 3 auf 0 setzen:
Regwert(1) = 7
Regwert(2) = 64
Regwert(3) = 0
Regwert(4) = 1
Regwert(5) = 0
Regwert(6) = 1
Regwert(7) = 7
Regwert(8 ) = 0

tobimc
28.06.2005, 14:16
HI roboter!

Könntest du dein Programm mit meinem Vergleichen, oder es hier posten?
(Es ist ja irgendwas mit 8051, wen ich mich recht erinnere...?)
Weil mein READ geht partout nciht auf LOW, wenn 3 0 ist.

ERGO muss ich irgendwo einen BUG haben!

Das wäre sehr nett, wenn du das machen könntest!! *bidde*

Viele liebe Grüße;
Tobi

roboter
28.06.2005, 14:33
Zur Zeit habe ich dieses Programm:
'Gameboy Kamera

$regfile = "m8515.dat" 'ATmega8515-Deklarationen
$crystal = 4000000 'Quarz: 4 MHz
$baud = 9600

Declare Sub Register_laden(addr As Byte , Wert As Byte)

Dim Regwert(8) As Byte
Dim Regaddr(8) As Byte

Dim I As Byte

Dim Bild(16384) As Xram Byte
Dim Z As Word

'Register festlegen:
Regaddr(1) = 1
Regaddr(2) = 2
Regaddr(3) = 3
Regaddr(4) = 4
Regaddr(5) = 5
Regaddr(6) = 6
Regaddr(7) = 7
Regaddr(8) = 0

Regwert(1) = 7
Regwert(2) = 255
Regwert(3) = 255
Regwert(4) = 1
Regwert(5) = 0
Regwert(6) = 1
Regwert(7) = 7
Regwert(8) = 0

Config Scl = Portb.2
Config Sda = Portb.3

'A/D-Wandler einstellen:
I2cinit
I2cstart
I2cwbyte &B10010000
I2cwbyte &B00000000
I2cstop


Config Portb.0 = Output 'XCK
Config Portb.1 = Output 'Reset
Config Portb.4 = Output 'Sin
Config Pind.3 = Input 'read
Config Portd.4 = Output 'Load
Config Portd.5 = Output 'Start

Config Portd.2 = Output
Portd.2 = 1

Xckpin Alias Portb.0
Resetpin Alias Portb.1
Sinpin Alias Portb.4
Loadpin Alias Portd.4
Startpin Alias Portd.5
Readpin Alias Pind.3

Resetpin = 1 'Reset High
Xckpin = 1 'XCK High
Loadpin = 0 'Load Low
Startpin = 0 'Start Low

'Reset:
Waitus 5
Xckpin = 0
Waitus 5
Xckpin = 1
Waitus 5
Xckpin = 0
Waitus 5
Xckpin = 1
Waitus 5
Xckpin = 0
Waitus 2
Resetpin = 0
Waitus 3
Xckpin = 1
Waitus 2
Resetpin = 1
Waitus 3
Xckpin = 0
Waitus 2

'Register Laden
Call Register_laden(regaddr(1) , Regwert(1))
Call Register_laden(regaddr(2) , Regwert(2))
Call Register_laden(regaddr(3) , Regwert(3))
Call Register_laden(regaddr(4) , Regwert(4))
Call Register_laden(regaddr(5) , Regwert(5))
Call Register_laden(regaddr(6) , Regwert(6))
Call Register_laden(regaddr(7) , Regwert(7))
Call Register_laden(regaddr(8) , Regwert(8))

'Start:
Startpin = 1
Waitus 3
Xckpin = 1
Waitus 2
Startpin = 0
Waitus 3
Xckpin = 0
Waitus 4

'Warten Bis Bild Fertig:
While Readpin = 0
Xckpin = 1
Waitus 4
Xckpin = 0
Waitus 4
Wend

Z = 0
I2cstart
I2cwbyte &B10010001
I2crbyte I , 8
While Readpin = 1
Xckpin = 1
Waitus 2
Incr Z
I2crbyte I , 8
Bild(z) = I
Xckpin = 0
Waitus 4
Wend
I2crbyte I , 9
Incr Z
Bild(z) = I
I2cstop
Portd.2 = 0

For Z = 1 To 16384
Printbin Bild(z);
Next

Do
Loop

End 'end program

Sub Register_laden(addr As Byte , Wert As Byte)
'Registeraddr übertragen:
For I = 2 To 0 Step -1
Sinpin = Addr.i
Waitus 3
Xckpin = 1
Waitus 5
Xckpin = 0
Waitus 2
Next
'Registerwert übertragen:
For I = 7 To 0 Step -1
Sinpin = Wert.i
Waitus 3
Xckpin = 1
Waitus 2
If I = 0 Then
Loadpin = 1
End If
Waitus 3
Xckpin = 0
Waitus 2
Loadpin = 0
Next
Sinpin = 0
End Sub

Eine andere Frage habe ich aber jetzt auch noch:

Wie man im Code sehen kann, habe ich die Register 2 und 3 jetzt mal auf 255 gesetzt. Diese Register sind doch für die Belichtungszeit und wenn man sie auf 255 setzt, müßte man doch ein komplett weißes Bild bekommen.

Im Terminalprogramm bekomme ich immer nur Werte zwischen 178 und 179. Aber es müßten doch Werte um 255 sein, oder nicht?
Woran kann das liegen?

tobimc
28.06.2005, 14:45
Hi!

Danke!

Wie hoch ist dein Offset-Register?

Werde das gleich mal anschauen! HITZEFREI!!!

vlg tobi

roboter
28.06.2005, 15:03
Wie hoch ist dein Offset-Register?Wie Offset-Register?



HITZEFREI!!!Ich habe zum Glück keine Schule mehr und arbeiten muß ich auch erst in zwei Monaten... :mrgreen: 8) :mrgreen: 8) :mrgreen:

tobimc
28.06.2005, 15:09
Hi!

No, die Kamera stürzt bei mir bei Reg3 = 0 ab....

Setz bei dir mal Reg0 auf 0x00.
Da geben die ersten 6 Bits das Offsetlevel an, wobei O5 angbit, ob die Spannung abgezogen(LOW) oder dazugegeben(HIGH) wird.
Die Offsetspannung wird entweder zu der Pixelspannung dazugegeben, oder abgezogen.

Viele liebe Grüße,
Tobi

tobimc
28.06.2005, 15:13
Hi roboter!

SACHMAL...
HAT XCK RUHEMÄßIG HIGH-PEGEL?!

Viele liebe Grüße
Tobi

roboter
28.06.2005, 15:13
Achso!

Reg0 war schon auf 0 O:)

roboter
28.06.2005, 15:17
HAT XCK RUHEMÄßIG HIGH-PEGEL?!

Also vorm Reset ist XCK HIGH, und nachdem das Bild ausgelesen ist, ist XCK LOW.

Oder wie meinst du das jetzt? Bin heute etwas schwer von Begriff O:)

tobimc
28.06.2005, 15:26
Hi!

Ich kann bei mir jetzt das Reg 3 auch auf 0 setzen.
Und weist du warum?

WEIL ICH DEPP DAS ERSTE ADRESSBIT ALS ERSTES GESENDET HABE!!!

Regadr.0
Redadr.1
Regadr.2
statt
Regadr.2
Redadr.1
Regadr.0

BIN ICH DOOF!

Naja, jetzt kommt auf jeden Fall wieder ein weisses Bild raus... :D

Das mit dem XCK checke ich jetzt nciht.
Also, immer wenn man einen Takt ausgeben will, geht man doch auf HIGH, und dann wieder auf LOW usw. Die Camera bracuht soch als Takt eine ansteigense Flanke, wenn ich das richtig gelesen habe, oder?

Danke für deim Programm!! ES HAT MIR DIE AUGEN GEÖFFNET!!

Viele liebe Grüße,
Tobi

tobimc
28.06.2005, 15:31
hi!

UND: Warum gibst du vor dem RESET 2 Taktimpulse aus?
Muss das so sein? *dasistmirneu*

Viele liebe Grüße,
Tobi