Liste der Anhänge anzeigen (Anzahl: 1)
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