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
Lesezeichen