Hallo,
Mit folgendem Code versuche ich ein Bild aus der GameBoy Camera zu
holen, leider vergeblichst. Denn der READ Pin wird von der Kamera nich
hochgezogen.
1
while(!(PIND&(1<<CAM_READ)))
2
{
3
4
CLK_LOW();
5
camStepDelay();
6
CLK_HIGH();
7
camStepDelay();
8
}
Vielleicht hat jemand eine Idee woran es liegen könnte.
Peter II schrieb:> Magnus M. schrieb:>> Vorbildlich kommentierter Code...>> und ziemlich unvollständig. Viele Funktionen Fehler und auch die> globalen Variablen.
Was fehlt denn?
OK, das hier hätte noch reinmüssen
Peter II schrieb:> Nicole F. schrieb:>> Was fehlt denn?>> ADC_Read
Da liegt aber nicht das Problem. Mein Problem ist schon weit vorher. Die
Kamera signalisiert mir nicht, das ich was zum lesen habe.
Also ist das jetzt erstmal unwichtig.
Nicole F. schrieb:> void cam_reset(void)> {> RESET_LOW();> CLK_LOW();> camStepDelay();> CLK_HIGH();> camStepDelay();> CLK_LOW();> RESET_HIGH();> camStepDelay();> RESET_LOW();>> }
Dir ist aber schon klar, dass der RESET low-active ist?
Magnus M. schrieb:> Dir ist aber schon klar, dass der RESET low-active ist?
Stimmt, steht auf Seite 2 im Datenblatt. Das hatte ich ja total
übersehen.
DANKE!
1
voidcam_reset(void)
2
{
3
RESET_LOW();
4
CLK_LOW();
5
camStepDelay();
6
CLK_HIGH();
7
camStepDelay();
8
CLK_LOW();
9
RESET_HIGH();
10
11
12
}
Jetzt komme ich auch aus der While Schleife raus.
Aber irgendwie habe ich nur Müll als Ergbenis.
@ Peter. Jetzt sind wir beim ADC_READ angelangt
1
uint16_tADC_Read(uint8_tchannel)
2
{
3
4
ADMUX=(ADMUX&~(0x1F))|(channel&0x1F);
5
//ADMUX = channel;
6
7
ADCSRA|=(1<<ADSC);// eine Wandlung "single conversion"
8
while(ADCSRA&(1<<ADSC)){// auf Abschluss der Konvertierung warten
Peter II schrieb:> ich habe keine Ahnung von der Gameboy Camera, aber der code ist> merkwürdig. Hier werden vermutlich 8 bit gesendet. Warum prüft man da> auf>> if((data & 0x04 ) > 0)>> üblicherweise wird das erste oder letzte bit von data geprüft.
Das wollte ich auch gerade bemängeln. Sie(?) hat da wohl beim
Programmieren wohl ein Copy&Paste aus der Registerschreibschleife ein
paar zeilen darüber gemacht und vergessen die 0x04 nach 0x80 zu ändern.
Dies sollte Sie natürlich spätestens jetzt nachholen!
Noch ein Tipp:
1
if((reg&0x04)>0)
Schreib das doch einfach als
1
if(reg&0x04)
Selbiges trifft natürlich auf die (data & 0x80) zu.
Magnus M. schrieb:> Das wollte ich auch gerade bemängeln. Sie(?) hat da wohl beim> Programmieren wohl ein Copy&Paste aus der Registerschreibschleife ein> paar zeilen darüber gemacht und vergessen die 0x04 nach 0x80 zu ändern.> Dies sollte Sie natürlich spätestens jetzt nachholen!
Stimmt, das sollte aber 0x08 heißen, oder?
Peter II schrieb:> Nicole F. schrieb:>> Stimmt, das sollte aber 0x08 heißen, oder?>> warum? Du willst doch das höchste bit abfragen oder nicht?>> also (1<<7) = 128 = 0x80
:-) stimmt
Magnus M. schrieb:> Hast Du meinen anderen Beitrag auch gelesen und berücksichtigt?>> Magnus M. schrieb:>> Noch wat:> (...)
Ja, auch diesen Flüchtigkeitsfehler entfernt.
Nicole F. schrieb:> Ja, auch diesen Flüchtigkeitsfehler entfernt.
wie kann man nur so viel code schreiben ohne in stückchenweise zu testen
und in betrieb zu nehmen?
Ich schreibe doch auch keine Betriebssystem und wundere mich an ende
warum es nicht bootet.
Magnus M. schrieb:> Und wie steht es nach all Dem um die Funktion Deines Konstruktes?
Noch gefällt es mir nicht. Ich halte die Werte für zu nah beieinander.
Nicole F. schrieb:> Noch gefällt es mir nicht. Ich halte die Werte für zu nah beieinander.
das ist einfach rauschen vom ADC.
Hast du mal ein Oszi an den Anschluss gehalten, ob sich dort überhaupt
etwas tut?
Wenn nicht vorhanden, einfach mal eine Wechselspannung an den ADC
anlegen, dann sollte das ja an den werten erkennbar sein.
1. Woher hast du eigentlich den ursprünglichen Code...?
2. Warte noch auf eine Antwort auf
Magnus M. schrieb:> Nicole F. schrieb:>> Der ADC funktioniert. Die CAM gibt aber nichts raus.> cam_write(1,0x0E); <-- ergibt ein Gain von 45,5dB !>> Woher hast du die Registerwerte?
Magnus M. schrieb:> Von wem hast du den Code, den du uns im ersten Posting serviert hast?
Wie von wem habe ich den Code?
Das habe ich geschrieben. Ich hatte lediglich meine Register schreib
funktion mit dem von ulrich radig's grafikkarten projekt inspirieren
lassen.
Nachdem meins nicht richtig funktionierte.
Beitrag "Getaktete Übertragung"
Nicole F. schrieb:> Wie von wem habe ich den Code?> Das habe ich geschrieben.
Hmmm... Wenn ich mir den Code im folgenden Link ansehe, hat das Ganze
einen leicht plagiatartigen Beigeschmack.
http://www.triplay.de/zeigeprojekt.php?id=17#ansteuerungNicole F. schrieb:> Alles gut. Nachdem ich die CLK Frequenz und die Register angepasst> habe, klappt alles gut.
Ende gut, alles gut.
Herzlichen Glühstrumpf!
;)