boxtec Forum
Microcontroller => Microcontroller & Motors => : MathiasW October 22, 2013, 04:58:17 PM
-
Salut,
an einem LCD kontrolliere ich die Brightness über Pin D10. Wenn ich einen Servo an Pin D11 hänge, kann ich mit analogWrite(10,wert) die Helligkeit des LCD über wert steueren. Sobald ich den Servo mit myservo.attach(11) ansteuere, kann ich die Helligkeit nicht mehr regeln. ein Wert von 255 schaltet das LCD auf Hell, alles kleiner 255 auf dunkel.
In der Arduino Referenz wird beschrieben, dass man nach einem myservo.detach() wieder normal auf D10 mit analogWrite zugreifen kann.
Leider funktioniert das so nicht. Hat jemand damit Erfahrung oder einen Tipp?
Ciao, Mathias
-
Welcher Arduino ?
Ev. wird der Anschluss doppelt belegt z.B. vom Timer ?
-
In der Arduino Referenz wird beschrieben, dass man nach einem myservo.detach() wieder normal auf D10 mit analogWrite zugreifen kann.
Habs noch nicht probiert, aber vom Source Code her sieht es danach aus, als ob servo.detach zwar den Timer 1 freigibt, aber ihn nicht wieder in einen Zustand bringt, dass er dann wieder für PWM zu brauchen ist. Die Lösung ist grundsätzlich, den geeigneten Initialisierungscode aus init() in https://github.com/arduino/Arduino/blob/master/hardware/arduino/cores/arduino/wiring.c (https://github.com/arduino/Arduino/blob/master/hardware/arduino/cores/arduino/wiring.c) zu kopieren.
-
Salut,
Genial!
Ich habe folgenden code in den sketch eingefügt:
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
void reinit(){
TCCR1B = 0;
// set timer 1 prescale factor to 64
sbi(TCCR1B, CS11);
sbi(TCCR1B, CS10);
// put timer 1 in 8-bit phase correct pwm mode
sbi(TCCR1A, WGM10);
}
Nach dem myservo.detach() rufe ich reinit() auf und alles funktioniert
Herzlichen Dank für den Tipp!
Ich habe dabei noch eine schöne Seite zu den Arduino codedetails gefunden: http://garretlab.web.fc2.com/en/arduino/inside/index.html (http://garretlab.web.fc2.com/en/arduino/inside/index.html)
Ciao, Mathias