Hallo
Versuche es mal so:
Code:
/*
Solange Zeilen abwarten bis das Sync-Signal länger als 40 Lesezyklen ist
(CPU-Takt abhängig!) An dieser Stelle beginnt ein neues Halbbild.
*/
do { h_sync=0; while (ADCH > 20); while (ADCH < 30) h_sync++; } while (h_sync < 40);
/*
Ab jetzt zählen wir die Zeilensyncs um die gewünschte Zeile anzusteuern
(mindestens 35 um die ersten Schrottzeilen zu überspringen, 100-200 wäre
im Teststadium sinnvoll)
*/
zeile=35; while (zeile) { while (ADCH > 20); while (ADCH < 30); zeile--; }
Schwellwerte für Bild/Sync (der Strahlrücklauf IST das Syncsignal!) must du anpassen. while (h_sync < 40); macht das selbe wie bei dir, es zählt die Lesezyklen und misst damit die Zeit des Syncs. Bei meinem CPU-Takt bedeutet mehr als 40 den vertikalen Strahlrücklauf(=Bildanfang). Was bei dir jetzt noch fehlt ist das Ansteuern einer Zeile mit Bildinformationen. Ansonsten guter Testcode, das muss man auch mal loben.
Gruß
mic
[Edit]
Ursache für die verschiedenen BAS-Pegel könnte auch die interne Spannungsreferenz des ADC sein. Irgendwo habe ich mal was von "ein paar 0,1V" Ungenauigkeit gelesen. Mein Kalibrierungstest mit einer 1,5V-Batterie ergab allerdings den selben Wert wie die Messung mit einem Multimeter. Mit dieser "Festspannungsquelle" habe ich übrigends auch im Vorfeld die Messfehler bei unterschiedlichen Prescallerwerten getestet. Hierbei gab es auch beim Faktor /2 im HighByte keinen Messfehler, im LowByte waren die Bits 0-3 verfälscht. Möglicherweise steigt der Fehler bei höherem CPU-Takt. Wenn ich das M32-Board habe, werde ich das mal testen...
Lesezeichen