Hallo

Die Experimentierplatine nur mit Stiftleiste und Cinch-Buchse bestückt mache ich erste Tests mit der neuen Kamera:
Code:
// Kleines Testprogramm zur Funktionsprüfung                            1.4.10 mic

#include "RP6RobotBaseLib.h"

void ADC_Init(void)
{
	extIntOFF(); // schaltet den E_INT1-Port auf Eingang für den ADC

// ADC interne Referenz 2,56V, Ergebniss linksbündig, Kanal ADC4 (E_INT1)
	ADMUX = (1<<REFS1) | (1<<REFS0)  | (1<<ADLAR) | 4;
// setze free running triggern
	SFIOR = (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
// kein Interupt, Wandler einschalten, prescaler /2, ADC läuft nun mit 4MHz!
	ADCSRA = (0<<ADIE) | (1<<ADEN) | (0<<ADPS2) | (0<<ADPS1)  | (1<<ADPS0);
// Autotriggern bedeutet jetzt free running aktivieren, altes Flag löschen
	ADCSRA |= (1<<ADATE) | (1<<ADIF);
// Initialisierung starten
	ADCSRA |= (1<<ADSC);
// und noch die empfohlene Initiallesung
	while (!(ADCSRA & (1<<ADIF)));
	ADCSRA |= (1<<ADIF);
}

int main(void)
{
	uint8_t bildspeicher[1024], *bildzeiger; // 1KB * 8Bit Bildspeicher bereitstellen
	uint8_t spalte, zeile, sync, c;

	initRobotBase();
	ADC_Init();
	
	while(1)
	{
		writeString_P("---------------------------\n");
		for(c=0; c<255; c++) // Bildspeicher löschen (mit Byte-Variable)
		{
	   	bildspeicher[c]=bildspeicher[256+c]=\
			bildspeicher[2*256+c]=bildspeicher[3*256+c]=0;
		}

		for(c=0; c<4; c++) // viermal den selben Bereich einlesen
		{
		   bildzeiger=&bildspeicher[256*c]; // Zeiger auf Start des Bildspeicherbereich
		   cli();
			do // Warten auf langen Syncbereich = Bildstart
			{
				sync=0;
				while (ADCH > 20); // warten solange Bilddaten erkannt werden
				while (ADCH < 30) sync++; // Länge des Sync-Signal zählen
			}while (sync < 40); // größer 40 bedeutet Bildstart
		
			zeile=150; // durchhangeln bis Zeile 150
			while(zeile--)
			{
				while (ADCH > 20); // Bilddaten
				while (ADCH < 30); // Sync
			}
		
			spalte=255; // oje
			do *bildzeiger++=ADCH; while(spalte--); // 254 Werte einlesen
			//while(spalte--) *bildzeiger++=ADCH; // dito
			//do *bildzeiger=ADCH; while(*bildzeiger++ > 20); // schneller ;)
			sei();
		}
		
		for(spalte=0; spalte != 255; spalte++) // Alle Durchgänge gemeinsam ausgeben
		{
		   writeInteger(spalte, 10);
		   writeString_P(": ");
		   writeInteger(bildspeicher[spalte], 10);
			writeString_P(" ");
		   writeInteger(bildspeicher[256+spalte], 10);
		   writeString_P(" ");
		   writeInteger(bildspeicher[2*256+spalte], 10);
		   writeString_P(" ");
		   writeInteger(bildspeicher[3*256+spalte], 10);
		   writeString_P("\n");
		}
		while(!(getBumperLeft() || getBumperRight())); // Nochmal? Terminal löschen!
	}
	return(0);
}
Die Ausgabe dazu beim Blick auf ein Blatt Papier mit eingesteckem Kontrollmonitor als 75Ohm-Last:
Code:
Terminal cleared!
---------------------------
0: 56 56 54 56
1: 56 56 54 56
2: 56 56 54 56
3: 56 57 56 57
4: 56 57 56 57
5: 56 57 56 57
6: 60 57 60 60
7: 60 57 60 60
8: 60 57 60 60
9: 62 60 62 60
10: 62 60 62 60
11: 62 60 62 60
12: 62 62 62 60
13: 62 62 62 62
14: 62 62 62 62
15: 62 62 62 62
16: 63 62 62 62
17: 63 62 62 62
18: 63 62 62 62
19: 62 62 62 62
20: 62 62 62 62
21: 62 62 62 62
22: 60 60 62 62
23: 60 60 62 62
24: 60 60 62 62
25: 60 56 62 62
26: 56 56 60 60
27: 56 56 60 60
28: 56 56 60 60
29: 57 56 57 57
30: 57 56 57 57
31: 57 56 57 57
32: 56 56 56 56
33: 56 56 56 56
34: 56 56 56 56
35: 56 56 56 56
36: 56 56 56 56
37: 56 56 56 56
38: 56 54 56 56
39: 56 54 56 56
40: 56 54 56 56
41: 56 54 56 56
42: 56 56 56 56
43: 56 56 56 56
44: 56 56 56 56
45: 56 56 56 51
46: 56 56 56 51
47: 56 56 56 51
48: 54 51 51 54
49: 54 51 51 54
50: 54 51 51 54
51: 54 30 51 54
52: 15 30 31 35
53: 15 30 31 35
54: 15 30 31 35
55: 4 6 6 6
56: 4 6 6 6
57: 4 6 6 6
58: 28 28 28 28
59: 28 28 28 28
60: 28 28 28 28
61: 28 28 28 28
62: 28 28 28 28
63: 28 28 28 28
64: 28 56 28 28
65: 56 56 56 56
66: 56 56 56 56
67: 56 56 56 56
68: 56 57 56 56
69: 56 57 56 56
70: 56 57 56 56
71: 57 60 60 60
72: 57 60 60 60
73: 57 60 60 60
74: 60 62 62 60
75: 60 62 62 60
76: 60 62 62 60
77: 60 62 62 60
78: 62 62 60 62
79: 62 62 60 62
80: 62 62 60 62
81: 62 62 62 62
82: 62 62 62 62
83: 62 62 62 62
84: 60 60 62 63
85: 60 60 62 63
86: 60 60 62 63
87: 57 60 60 62
88: 57 60 60 62
89: 57 60 60 62
90: 57 56 60 62
91: 56 56 57 56
92: 56 56 57 56
93: 56 56 57 56
94: 56 56 57 57
95: 56 56 57 57
96: 56 56 57 57
97: 56 56 56 56
98: 56 56 56 56
99: 56 56 56 56
100: 56 56 56 56
101: 56 56 56 56
102: 56 56 56 56
103: 56 56 56 56
104: 56 56 56 56
105: 56 56 56 56
106: 56 56 56 56
107: 54 54 56 56
108: 54 54 56 56
109: 54 54 56 56
110: 51 54 56 51
111: 51 54 56 51
112: 51 54 56 51
113: 49 51 51 56
114: 49 51 51 56
115: 49 51 51 56
116: 49 7 51 56
117: 7 7 30 30
118: 7 7 30 30
119: 7 7 30 30
120: 3 3 6 6
121: 3 3 6 6
122: 3 3 6 6
123: 28 28 28 28
124: 28 28 28 28
125: 28 28 28 28
126: 49 31 28 28
127: 49 31 28 28
128: 49 31 28 28
129: 49 56 28 28
130: 57 56 56 56
131: 57 56 56 56
132: 57 56 56 56
133: 60 60 57 56
134: 60 60 57 56
135: 60 60 57 56
136: 60 60 60 60
137: 60 60 60 60
138: 60 60 60 60
139: 62 62 63 60
140: 62 62 63 60
141: 62 62 63 60
142: 62 62 63 60
143: 62 62 63 62
144: 62 62 63 62
145: 62 62 63 62
146: 62 62 63 62
147: 62 62 63 62
148: 62 62 63 62
149: 60 62 62 62
150: 60 62 62 62
151: 60 62 62 62
152: 60 56 60 60
153: 60 56 60 60
154: 60 56 60 60
155: 60 56 60 60
156: 56 56 56 56
157: 56 56 56 56
158: 56 56 56 56
159: 56 56 57 56
160: 56 56 57 56
161: 56 56 57 56
162: 56 56 56 56
163: 56 56 56 56
164: 56 56 56 56
165: 56 56 56 56
166: 56 56 56 56
167: 56 56 56 56
168: 56 56 56 56
169: 56 56 56 55
170: 56 56 56 55
171: 56 56 56 55
172: 56 51 56 54
173: 56 51 56 54
174: 56 51 56 54
175: 51 54 56 56
176: 51 54 56 56
177: 51 54 56 56
178: 44 49 54 51
179: 44 49 54 51
180: 44 49 54 51
181: 44 7 54 51
182: 7 7 7 7
183: 7 7 7 7
184: 7 7 7 7
185: 28 17 3 3
186: 28 17 3 3
187: 28 17 3 3
188: 28 28 28 28
189: 28 28 28 28
190: 28 28 28 28
191: 56 54 28 28
192: 56 54 28 28
193: 56 54 28 28
194: 56 60 28 28
195: 56 60 56 56
196: 56 60 56 56
197: 56 60 56 56
198: 60 60 60 56
199: 60 60 60 56
200: 60 60 60 56
201: 62 62 60 60
202: 62 62 60 60
203: 62 62 60 60
204: 62 62 62 60
205: 62 62 62 60
206: 62 62 62 60
207: 62 62 62 60
208: 60 62 62 60
209: 60 62 62 60
210: 60 62 62 60
211: 62 63 62 62
212: 62 63 62 62
213: 62 63 62 62
214: 56 60 60 60
215: 56 60 60 60
216: 56 60 60 60
217: 57 60 60 56
218: 57 60 60 56
219: 57 60 60 56
220: 57 56 60 56
221: 56 56 56 56
222: 56 56 56 56
223: 56 56 56 56
224: 56 56 56 56
225: 56 56 56 56
226: 56 56 56 56
227: 56 56 56 56
228: 56 56 56 56
229: 56 56 56 56
230: 56 56 54 56
231: 56 56 54 56
232: 56 56 54 56
233: 56 56 54 56
234: 56 56 56 54
235: 56 56 56 54
236: 56 56 56 54
237: 56 54 56 49
238: 56 54 56 49
239: 56 54 56 49
240: 51 54 51 51
241: 51 54 51 51
242: 51 54 51 51
243: 30 30 49 49
244: 30 30 49 49
245: 30 30 49 49
246: 30 6 49 49
247: 6 6 7 7
248: 6 6 7 7
249: 6 6 7 7
250: 28 28 6 3
251: 28 28 6 3
252: 28 28 6 3
253: 28 28 28 28
254: 28 28 28 28
Ausgabe mit alternativer Einlesezeile
do *bildzeiger=ADCH; while(*bildzeiger++ > 20);

Code:
Terminal cleared!
---------------------------
0: 51 51 55 51
1: 51 51 55 51
2: 51 51 55 51
3: 51 51 55 51
4: 56 56 56 56
5: 56 56 56 56
6: 56 56 56 56
7: 56 56 56 56
8: 56 56 57 56
9: 56 56 57 56
10: 56 56 57 56
11: 56 56 57 56
12: 56 60 60 56
13: 60 60 60 56
14: 60 60 60 56
15: 60 60 60 56
16: 60 60 60 56
17: 60 60 60 60
18: 60 60 60 60
19: 60 60 60 60
20: 60 60 60 60
21: 62 62 62 60
22: 62 62 62 60
23: 62 62 62 60
24: 62 62 62 60
25: 62 62 62 62
26: 62 62 62 62
27: 62 62 62 62
28: 62 62 62 62
29: 62 62 62 62
30: 60 60 60 60
31: 60 60 60 60
32: 60 60 60 60
33: 60 60 60 60
34: 60 56 56 57
35: 60 56 56 57
36: 60 56 56 57
37: 60 56 56 57
38: 60 56 56 56
39: 56 56 56 56
40: 56 56 56 56
41: 56 56 56 56
42: 56 56 56 56
43: 56 56 56 56
44: 56 56 56 56
45: 56 56 56 56
46: 56 56 56 56
47: 56 56 56 56
48: 56 56 56 56
49: 56 56 56 56
50: 56 56 56 56
51: 56 54 56 54
52: 56 54 56 54
53: 56 54 56 54
54: 56 54 56 54
55: 56 54 56 54
56: 52 52 51 51
57: 52 52 51 51
58: 52 52 51 51
59: 52 52 51 51
60: 54 51 51 49
61: 54 51 51 49
62: 54 51 51 49
63: 54 51 51 49
64: 54 49 49 49
65: 49 49 49 49
66: 49 49 49 49
67: 49 49 49 49
68: 49 49 49 49
69: 33 17 7 30
70: 33 0 0 30
71: 33 0 0 30
72: 33 0 0 30
73: 6 0 0 6
74: 0 0 0 0
75: 0 0 0 0
76: 0 0 0 0
Neue Erkenntniss durch diese Versuche: Die Variablen dürfen nicht global definiert sein. So wird alles total langsam:
Code:
uint8_t bildspeicher[1024], *bildzeiger; // 1KB * 8Bit Bildspeicher bereitstellen
uint8_t spalte, zeile, sync, c;

int main(void)
{
	initRobotBase();
	ADC_Init();
Compileroptimierung steht bei mir übrigends auf "Size".

Gruß

mic