Hallo,
schaue Dir bitte die Initialisierung von einem ADC an. Damit kannst Du dann den eingelesen Wert (momentaner Widerstand vom Poti) für das Servo im Programm weiter verwenden.
Viele Erfolg weiterhin und Gruß
Hallo,
ich habe ein folgendes Problem. Ich kann mein Servo jetzt über Bascom ansteuern, kriege es aber nicht hin, den Servo über Poti anzusteuern.
Könnt ihr einen kurzen Programmcode schreiben?
So sieht mein Programm ohne Poti Ansteuerung aus.
Vielen Dank
'******** Compailereinstellung Anfang ***
$crystal = 12000000
$regfile = "m48def.dat"
$baud = 9600
'******* Compailereinstellung ende ******
'******** Config Ports Anfang ***********
Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
Config Pinb.1 = Output
Config Portc = Input
Config Portd = Output
Enable Interrupts
'******** Config Ports Ende *************
'******** Deklaration Anfang ************
Dim Position As Byte
Dim Zaehler As Byte
'******** Dekleration Ende **************
'******** Initialisierung Anfang ********
Zaehler = 10
Position = 105
'******** Initialisierung Ende **********
'******** Hauptprogramm Anfang **********
Servo(1) = Position
Do
If Pinc.1 = 0 Then
Waitms 100
Position = Position + Zaehler
If Position = 165 Then
Position = 105
End If
Servo(1) = Position
Portd.0 = 1
Waitms 200
Portd.0 = 0
Elseif Pinc.2 = 0 Then
Waitms 100
Position = Position - Zaehler
If Position = 45 Then
Position = 105
End If
Servo(1) = Position
Portd.0 = 1
Waitms 200
Portd.0 = 0
End If
Loop
End
Hallo,
schaue Dir bitte die Initialisierung von einem ADC an. Damit kannst Du dann den eingelesen Wert (momentaner Widerstand vom Poti) für das Servo im Programm weiter verwenden.
Viele Erfolg weiterhin und Gruß
Weil ich mit dem Servo Befehl von Bascom Schwierigkeiten habe, biete ich Dir hier eine Alternative (Ohne Gewähr)
Vor Einschalten das Poti ungefähr in Mittelstellung bringen.
GrußCode:'Modellbauservo einstellen mit Poti 'BASCOM-Demo Version 2.0.5.0 sollte auch auf höheren Versionen laufen. 'Servopulsfrequenz = 50Hz 'Servopulslänge von 821 µs bis 2181 µs in 256 Stufen einstellbar (Auflösung 5,333 µs) 'ADC Meßwertschwankungen werden abgefangen 'Servosignalausgabe an PB1(OC1A) 'Potischleifer an PC0(ADC0), die anderen beiden Anschlüsse an GND und VCC (Referenz für ADC ist intern VCC) $regfile = "m48def.dat" $crystal = 12000000 $hwstack = 32 $swstack = 32 $framesize = 32 $baud = 9600 Dim Adc_result As Word Dim Alt_wert As Word Dim Differenz As Integer Config Portb.1 = Output 'Servo MUSS an PB1 !!! '*** Timer1 Konfiguration auf "Fast PWM", prescale = 64, top = ICR1, clear OC1A on compare match *** Icr1 = 3749 Tccr1a = Bits(com1a1 , Wgm11) Tccr1b = Bits(wgm13 , Wgm12 , Cs11 , Cs10) '*************************** Timer1 Konfiguration ENDE *********************** Config Adc = Single , Prescaler = Auto , Reference = Avcc Do Adc_result = Getadc(0) 'Potiabgriffanschluß an PC0(ADC0),die anderen je an GND und VCC Differenz = Adc_result - Alt_wert Differenz = Abs(differenz) If Differenz > 3 Then Alt_wert = Adc_result Shift Adc_Result , Right , 2 Ocr1a = 154 + Adc_Result End If Loop End 'end program
Searcher
Geändert von Searcher (05.11.2012 um 18:49 Uhr) Grund: Variable eingespart
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Lesezeichen