Seltsam, der Balken lässt sich nicht mal erahnen. Irgendwas stimmt noch nicht. Ein paar Ausreisser sind normal, aber deine Werte scheinen mir fast zufällig zu sein. Versuche mal eine halb schwarze, halb weise Fläche, Kante waagrecht oder senkrecht. Oder versuche das 256-Bytes-am-Stück mit schwarzer und mit weiser Fläche:
Code:
// Liest ab der 100. Zeile 256 Werte am Stück ein
// und sendet die Daten als Tabellenvorlage zum PC.
#include "RP6RobotBaseLib.h"
int main(void)
{
uint8_t pixel[256],*pixelzeiger, *endezeiger;
uint8_t vsync, lines;
initRobotBase();
extIntOFF();
//powerON();
// interne Referenz 2,56V, linksbündig, Kanal ADC4
ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<ADLAR) | 4;
// free running triggern
SFIOR = (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
// kein interupt, einschalten, prescaller /2
ADCSRA = (0<<ADIE) | (1<<ADEN) | (0<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
// free running aktivieren, altes Flag löschen
ADCSRA |= (1<<ADATE) | (1<<ADIF);
// Initialisierung starten
ADCSRA |= (1<<ADSC);
while (!(ADCSRA & (1<<ADIF)));
ADCSRA |= (1<<ADIF);
pixelzeiger=&pixel[0];
endezeiger=&pixel[255];
lines=100;
cli();
do // vsync abwarten
{
vsync=0;
while (ADCH > 20);
while (ADCH < 30) vsync++;
}while (vsync < 40);
while (lines) // zeile abwarten
{
while (ADCH > 20);
while (ADCH < 30);
lines--;
}
// 256 Werte am Stück einlesen und als Basis für ein Diagramm senden
do *pixelzeiger=ADCH; while (pixelzeiger++ < endezeiger);
sei();
writeString("------------------------\n\r");
lines=0;
do
{
writeInteger(lines, DEC);
writeString_P("; ");
writeInteger(pixel[lines], DEC);
writeString_P("; ");
writeString("\n\r");
}while (++lines);
while (1); // ;)
return(0);
}
Lesezeichen