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?
Lesezeichen