Zur Zeit habe ich dieses Programm:
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) = 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?