Falls jemand darin Fehler findet, hier ist mein aktueller Quellcode:
Code:
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>
void delay_us(uint16_t us);
void gbcam_load_register(uint8_t address, uint8_t data);
void ports_init()
{
DDRB |= (1<<PB0);
DDRB |= (1<<PB1);
DDRB |= (1<<PB5);
DDRB |= (1<<PB6);
DDRB |= (1<<PB7);
DDRB &= ~(1<<DDB4);
PORTB |= (1<<PB4);
}
void cam_reset(void)
{
PORTB &= ~(1<<PB0);
delay_us(2);
PORTB |= (1<<PB6);
delay_us(11);
PORTB |= (1<<PB0);
delay_us(2);
PORTB &= ~(1<<PB6);
delay_us(2);
}
void delay_us(uint16_t us)
{
uint16_t zaehler;
while (us)
{
zaehler = F_CPU / 5000000;
while (zaehler)
{
asm volatile ("nop");
zaehler--;
}
us--;
}
}
static uint8_t gbcam_register[8];
void gbcam_load_register(uint8_t address, uint8_t data)
{
uint8_t i;
address &= 0x07;
gbcam_register[address] = data;
for (i=0;i<3;i++)
{
if ( ( address & 0x04 ) > 0 ) {
PORTB |= (1<<PB5);
}
address <<= 1;
PORTB |= (1<<PB6);
delay_us(11);
PORTB &= ~(1<<PB6);
delay_us(2);
PORTB &= ~(1<<PB5);
delay_us(2);
}
for (i=0;i<8;i++)
{
if ( ( data & 0x80 ) > 0 )
PORTB |= (1<<PB5);
data <<= 1;
PORTB |= (1<<PB6);
delay_us(6);
if (i == 7) {
PORTB |= (1<<PB7);
}
delay_us(6);
PORTB &= ~(1<<PB6);
delay_us(2);
PORTB &= ~((1<<PB5)|(1<<PB7));
delay_us(2);
}
}
void gbcam_init(void)
{
cam_reset();
gbcam_load_register( 0,0x80);
gbcam_load_register( 1,0x04);
gbcam_load_register( 2,0x06);
gbcam_load_register( 3,0x00);
gbcam_load_register( 4,0x01);
gbcam_load_register( 5,0x00);
gbcam_load_register( 6,0x01);
gbcam_load_register( 7,0x2A);
}
void gbcam_start(void)
{
PORTB |= (1<<PB1);
delay_us(2);
PORTB |= (1<<PB6);
delay_us(10);
PORTB &= ~(1<<PB1);
delay_us(2);
PORTB &= ~(1<<PB6);
delay_us(2);
}
int main()
{
ports_init();
gbcam_init();
gbcam_start();
while(1)
{
}
}
Wenn ich das gbcam_init und gbcam_start auch noch mit warten in die Schleife schreibe,
dann kommt zwar das im ersten Beitrag beschriebene Signal,
aber READ geht nie auf High,
auch nicht beim obigen Quelltext.
Ach ja, der Quelltext ist natürlich nicht von mir, ich hab nur angeglichen.
Lesezeichen