Also ich habe jetzt das Script mal umgeschriben, hier ein kleines BSP für den PWm unter Bascom. Asuro stopt, fährt mit halbem und vollem speed.
Code:
Dim Temp1 As Word 'Die Geschwindigkeitsvariable
Config Portd = Output 'Der Einfachheit halber Port B und D alles Output
Config Portb = Output
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
'Timer1 hat 2 PWM-Ausgänge PinB.1 und B.2
'Prescale 256 läuft auch problemlos
Portd.5 = 1 'Linker Motor Vorwärte
Portd.4 = 0
Portb.4 = 0 'Rechter Motor Vorwärts
Portb.5 = 1
Do
Temp1 = 0 'Motoren stehen
Pwm1a = Temp1
Pwm1b = Temp1
Wait 1
Temp1 = 512 'Motoren fahhren mit halber kraft
Pwm1a = Temp1
Pwm1b = Temp1
Wait 1
Temp1 = 1023 'Motoren fahhren mit voller kraft
Pwm1a = Temp1
Pwm1b = Temp1
Wait 1
Loop
End
Unter C läuft, wie man hier sieht:
// for PWM (8-Bit PWM) on OC1A & OC1B
TCCR1A = (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1);
// tmr1 running on MCU clock/8
TCCR1B = (1 << CS11);
Asuro mit Timer1 unter 8-Bit und prescale 8.
Schön ist natürlich eigentlich, wenn man wie in Sonics BSP Timer0 dafür verwenden kann, denn Timer1 bietet ja mehr möglichkeiten. Da die Compareregister aber sowiso von den Motoren und Timer1 belegt sind spielt das wohl keine Rolle und ich will eigentlich noch versuchen das Basic-Pendant zu C möglichst nah zu halten.
MFG Moritz
EDIT: Nochmal zu den Bumpern (Pollswitch())
Ich würde mich sehr freuen, wenn mir ein C-Spezilist diesen Code etwas entschlüssen könnte und sagen könnte, wie die Berechnung unten von statten geht. Danke schon mal im Voraus.
Code:
unsigned char PollSwitch (void)
{
unsigned int i;
DDRD |= SWITCHES; // Switches as Output
SWITCH_ON; // Output HIGH for measurement
ADMUX = (1 << REFS0) | SWITCH; // AVCC reference with external capacitor
Sleep(10);
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF)));// wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
i = ADCL + (ADCH << 8);
SWITCH_OFF;
return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 63.0 + 0.5));
}
MFG Moritz
Lesezeichen