So, hier ist dann mein Plan und mein Programm.
Der Plan passt nicht ganz zu dem Programm. Das liegt daran, das ich meine Schaltung im Moment noch auf nem Steckbrett habe und noch nicht geätzt habe.
Wer aber das Programm mit dem Schaltplan nutzen will, muß nur die Pins des A/D-Wandlers und die Pins der Cam anpassen. Sonst passt alles.
Code:'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) = 0 Regwert(2) = 0 Regwert(3) = 15 Regwert(4) = 0 Regwert(5) = 0 Regwert(6) = 0 Regwert(7) = 7 Regwert(8) = 0 Main: 'C1 und C0 laden: I = 0 Do If Ucsra.rxc = 1 Then Regwert(2) = Udr I = 255 End If Loop Until I <> 0 I = 0 Do If Ucsra.rxc = 1 Then Regwert(3) = Udr I = 255 End If Loop Until I <> 0 Wait 5 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 Portd.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 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 1 Incr Z I2crbyte I , 8 Bild(z) = I Xckpin = 0 Waitus 1 Wend I2crbyte I , 9 Incr Z Bild(z) = I I2cstop Portd.2 = 0 For Z = 1 To 16384 Printbin Bild(z); Next I = 0 Portd.2 = 1 Do If Ucsra.rxc = 1 Then I = Udr End If Loop Until I = 1 Goto Main 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







Zitieren

Lesezeichen