Hallo

Da ich sehr selten in Bascom programmiere (zuletzt beim Nunchuk) fehlen mir natürlich ein paar Grundlagen. Immerhin hat es trotzdem auf Anhieb funktioniert (die Bascom-Profis dürfen natürlich lachen):
Code:
'Analoge Kamera an ATMega32 (RP6)                                    30.3.09 mic


$regfile = "M32def.dat"                                     ' RP6 mit Mega32
$crystal = 8000000                                          ' taktet mit 8MHz
$baud = 38400                                               ' Loader-Baud

Dim X As Byte
Dim S As String * 30                                        'max 30 Positionen

Config Adc = Free , Prescaler = Auto , Reference = Avcc     ' Dummy-Setup!!!

' ADC interne Referenz 2,56V, Ergebniss linksbündig, Kanal ADC4 (E_INT1)
' Admux =(1 << Refs1) |(1 << Refs0) |(1 << Adlar) | 4

Admux = 0
Set Admux.refs1
Set Admux.refs0
Set Admux.adlar
Set Admux.2                                                 'Kanal 4
'Set Admux.1
'Set Admux.0

' setze free running triggern
'  Sfior =(0 << Adts2) |(0 << Adts1) |(0 << Adts0)
Sfior = 0

' kein Interupt, Wandler einschalten, prescaller /2
'  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)

Adcsr = 0
Set Adcsr.aden
Set Adcsr.adps0

Set Adcsr.5                                                 'adate
Set Adcsr.adif

Set Adcsr.adsc

Start Adc

Do
'Cli();
   Disable Interrupts
' / / Auf Bildanfang Warten
'Do
   Do
' {
'  i=0;
   X = 0
'  while (ADCH > 30);
      While Adch > 30
      Wend
'  while (ADCH < 50) i++;
      While Adch < 50
         Incr X
      Wend
' } while (i < 40);
   Loop Until X > 40
'   // die ersten 50 Zeilen überlesen
'  i=50;
   X = 50
' while (i--)
   While X > 0
' {
'  while (ADCH > 30);
      While Adch > 30
      Wend
'  while (ADCH < 50);
      While Adch < 50
      Wend
      Decr X
   Wend
' }
'   // warten auf hell-dunkel-Übergang
'   i=0;
   X = 0
' while (ADCH > 70) i++;
   While Adch > 65                                          'Hell/Dunkel-Schwelle
     Incr X
   Wend
'   sei();
   Enable Interrupts

   Print X ;
   S = Space(x)
   Print S;
   Print "***"
   Waitms 200
Loop

End
So kann ich im Moment ca. 23 Positionen des Striches unterscheiden:
Bild hier  
http://www.youtube.com/watch?v=H-p-W9r-_Vk

Nett, oder?

Gruß

mic