Hi pebisoft
Warum C-Programm?
Ich will versuchen das mit Bascom hinzukriegen.
Mein Code habe ich ober schonmal gepostet, der ist aber nicht mehr aktuell:
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 Regaddr(8) As Byte
Dim Regwert(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) = 128
Regwert(2) = 14
Regwert(3) = 6
Regwert(4) = 0
Regwert(5) = 1
Regwert(6) = 0
Regwert(7) = 1
Regwert(8) = 7
Config Scl = Portb.2
Config Sda = Portb.3
Config I2cdelay = 10
'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
Waitms 1000
Portd.2 = 0
Waitms 1000
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 'XCK Low
Waitus 2
Resetpin = 0 'Reset Low
Waitus 2
Xckpin = 1 'XCK High
Waitus 2
Resetpin = 1 'Reset High
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:
Waitus 2
Startpin = 1
Waitus 2
Xckpin = 1
Waitus 2
Startpin = 0
'Do
'Warten bis Bild fertig:
Do
Waitus 3
Xckpin = 0
Waitus 5
Xckpin = 1
Waitus 2
Loop Until Readpin = 1
' 'Bild lesen;
For Z = 1 To 16383
I2cstart
I2cwbyte &B10010001
I2crbyte Bild(z) , 9
I2cstop
Xckpin = 0
Waitus 4
Xckpin = 1
Next
Xckpin = 0
Waitus 1
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 = 1 To 3
Xckpin = 0
Sinpin = Addr.i
Waitus 3
Xckpin = 1
Waitus 3
Next
'Registerwert übertragen:
For I = 1 To 8
Xckpin = 0
Sinpin = Wert.i
Waitus = 3
Xckpin = 1
Waitus = 3
Next
Loadpin = 1
Waitus 2
Xckpin = 0
Waitus 4
Loadpin = 0
Sinpin = 0
End Sub
Diesen Code habe ich jetzt auf dem Controller.
Die Schleife mit dem Printbin liefert mir im Terminalprogramm die Werte von oben.
Lesezeichen