Go Down

Topic: Frage zum PCA 9685 12-bit PWMshield (Read 2121 times) previous topic - next topic

1to8modelmaker

Mit einem Kanal geht es auch mit der Umschaltung aber nicht mit 11 Kanal.

postmaster-ino

Ok - Salami-Taktik - immer nur eine Frage pro Post, vll. gibt's dann sogar eine Antwort dazu zurück :smiley-confuse:
...
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

1to8modelmaker

Moin Postmaster,mir kommt es so vor das Du nicht richtig mitliest bei den Post oder im Sketch.

combie

Moin Postmaster,mir kommt es so vor das Du nicht richtig mitliest bei den Post oder im Sketch.
Liest du deinen eigenen Sketch auch selber?


Denn:
Im Sketch sehe ich, dass du nur 2 Servos ansprichst, warum sollten dann 22 Servos zucken?
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

1to8modelmaker

Ich brauche diese 22 Servos auf 11 Kanal für 2 Modelle die mit der selben Fernsteuerung angesprochen werden.Bisher geht aber nur 1 Kanal der zusammen mit der Umschaltung läuft.Diese Umschaltung wird über einen Multiplexer angesteuert der auf dem 12. Kanal sitzt.Daher ist diese Umschaltung für die Modellwahl zuständig.
Mit freundlichen Gruß
1to8modelmaker

postmaster-ino

Hi

Ich lese, daß Du immer wieder genau das Gleiche schreibst - bei Dir herrscht also Stillstand.
Auch bist Du, meiner Ansicht nach, NICHT Willens, auch nur einen Handschlag von Dir aus zu machen.

WO ist z.B. der Versuch, das Servo Nummer 2 in den Sketch einzubinden?
Von dort ist Es kein größeres Problem, Servo 3 bis 11 nachzuziehen.

Sorry, von Dir kommt nur 'Mimimi' und, daß Es wohl nicht klappt.
Ich denke, ich werde meine Zeit lieber mit Sinnvollerem verplemmpern, an ausgebrannten Brennstäben rumlutschen oder so Zeug, als Dir jede noch so kleine Einzelinformation aus der Nase zu ziehen.

Du darfst aber gerne ein weiteres Mal Deinen Text wiederholen.
Tip: als Zitat könntest Du Dir eine Menge Tipp-Arbeit sparen
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

combie

#21
Dec 02, 2018, 09:54 am Last Edit: Dec 02, 2018, 09:39 pm by combie
Quote
Ich brauche diese 22 Servos auf 11 Kanal für 2 Modelle die mit der selben Fernsteuerung angesprochen werden.
Das habe ich nicht bezweifelt.
Es macht auch keinen Sinn das dauernd zu wiederholen.




Hier:
Quote
mir kommt es so vor das Du nicht richtig mitliest bei den Post oder im Sketch.
Wenn du mein Posting gelesen und verstanden hättest, dann würde dir klar werden, dass du nur 2 Servos in den Sketch ansprichst.

Die anderen können nichts machen.
Der Sketch macht also nichts anderes, als das, was ich erwarte.
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

1to8modelmaker

Postmaster ich habe schon einiges versucht um weitere Servos in Sketch einzubinden aber leider hat das nicht den gewünschten erfolg gehabt.
Code: [Select]

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <Servo.h>

Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);

int ch1;
int ch2;

int umschalterPin = 2; // umschalten zwischen a und b an Pin 2 angeschlossen
int umschalten = 0;

Servo myservo;
Servo myservob;
Servo myservo1;
Servo myservo1b;

#define MIN_PULSE_WIDTH       650
#define MAX_PULSE_WIDTH       2250 //ueber diese Variable den Weg anpassen
#define DEFAULT_PULSE_WIDTH   1500
#define FREQUENCY             50
#define MIN_PULSE_WIDTH1       650
#define MAX_PULSE_WIDTH1       2250
#define DEFAULT_PULSE_WIDTH1   1500
#define FREQUENCY1             50

uint8_t servonum = 0;

const int LED1 = 13; //LEDkennung zwischen a und b

void setup()
{
  pinMode(LED1, OUTPUT);
  pinMode(5, INPUT);
  pinMode(12,INPUT);
  pinMode(11,INPUT);
  
  Serial.begin(9600);
  Serial.println("16 channel Servo test!");
  pwm1.begin();
  pwm1.setPWMFreq(FREQUENCY);
  pwm2.begin();
  pwm2.setPWMFreq(FREQUENCY);


}
int pulseWidth(int angle);
int pulseWidth1(int angle1)

{
  int pulse_wide, analog_value;
  pulse_wide   = map(ch1, 10, 130, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); // die 10 und die 130 sind fuer die Weganpassung
  analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 3950); // ueber die 3.Variable den Weg anpassen
  int pulse_wide1, analog_value1;
  pulse_wide   = map(ch2, 10, 130, MIN_PULSE_WIDTH1, MAX_PULSE_WIDTH1);
  analog_value1 = int(float(pulse_wide1) / 1000000 * FREQUENCY1 * 3950);
  
  Serial.println(analog_value);
  return analog_value;
}

void loop() {

  ch1 = pulseIn(12, HIGH, 25000);
 
  umschalten = digitalRead(umschalterPin);
  if (umschalten == LOW) {
    digitalWrite(LED1, LOW);

    ch1 = map(ch1, 1023, 2003, 0, 120);
    pwm1.setPWM(0, 1, pulseWidth(ch1));
    ch2 = map(ch2, 1023, 2003, 0, 120);
    pwm1.setPWM(1, 1, pulseWidth(ch2));
  
    delay(50);
  }

    if (umschalten == HIGH){
     digitalWrite(LED1,HIGH);

   ch1 = map(ch1,1023,2003,0,120);
   pwm2.setPWM(0,2,pulseWidth(ch1));
   ch2 = map(ch2,1023,2003,0,120);
   pwm2.setPWM(1,2,pulseWidth(ch2));
  
  
   delay(50);
    }}

Bei diesem Sketch laufen 2 x 2 Servos auf dem selben Kanal

Mit freundlichem Gruß

combie

Jetzt musst du nur noch lernen, wie du deine 12 Kanäle aus dem PPM Signal ausliest.

Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

1to8modelmaker

Na dann schau hier mal

Serial.begin(9600);
 Serial.println("16 channel Servo test!");

Serial.println(analog_value);

So steht es im Sketch

postmaster-ino

Hi

Da schau ich doch glatt noch Mal vorbei und sehe:
Wenn Das SO im Sketch steht, ist ja Alles paletti ... ich bin hier raus, viel Spaß noch!

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

agmue

Code: [Select]
#include <Servo.h>
...
Servo myservo;
Servo myservob;
Servo myservo1;
Servo myservo1b;

Diese Bibliothek ist für Servos, die direkt am Arduino hängen. Hast Du nicht, brauchst Du nicht, kannst Du löschen.

Deine Servos hängen an der einen Hardware, repräsentiert durch pwm1, und der anderen pwm2. Deine Servos und die PWM-Werte in Variablen kannst Du benennen, wie Du magst, beispielsweise so (ungetestet):

Code: [Select]
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);

uint16_t ch1;
uint16_t ch2;
...
uint16_t ch11;
uint16_t ch12;
...
uint16_t ch22;

const byte numch1=0;
const byte numch2=1;
...
const byte numch11=10;
const byte numch12=0;
...
const byte numch22=10;

...

void loop() {
    pwm1.setPWM(numch1, 1, pulseWidth(ch1));
    pwm1.setPWM(numch2, 1, pulseWidth(ch2));
...
    pwm1.setPWM(numch11, 1, pulseWidth(ch11));
    pwm2.setPWM(numch12, 1, pulseWidth(ch12));
...
    pwm2.setPWM(numch22, 1, pulseWidth(ch22));
...
}

Ein Wert in ch22 sollte nun den 11. Servo an der zweiten Hardware bewegen.

Ich habe Deine Hardware nicht, daher bitte erproben und rückmelden.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

1to8modelmaker

Ich habe das jetzt nach Deiner Vorgabe geändert,aber irgendwie kommt da ein Fehler.Die Stelle werde ich mit //* Kennzeichnen.
Code: [Select]

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);

int ch1;
int ch2;
int ch3;
int ch4;
int ch5;
int ch6;
int ch7;
int ch8;
int ch9;
int ch10;
int ch12;

int umschalterPin = 2; // umschalten zwischen a und b an Pin 2 angeschlossen
int umschalten = 0;

#define MIN_PULSE_WIDTH       650
#define MAX_PULSE_WIDTH       2250 //ueber diese Variable den Weg anpassen
#define DEFAULT_PULSE_WIDTH   1500
#define FREQUENCY             50

uint16_t ch1; //* ab hier ist der Fehler
uint16_t ch2;
uint16_t ch3;
uint16_t ch4;
uint16_t ch5;
uint16_t ch6;
uint16_t ch7;
uint16_t ch8;
uint16_t ch9;
uint16_t ch10;
uint16_t ch11;  // Modell 1
uint16_t ch12;
uint16_t ch13;
uint16_t ch14;
uint16_t ch15;
uint16_t ch16;
uint16_t ch17;
uint16_t ch18;
uint16_t ch19;
uint16_t ch20;
uint16_t ch21;
uint16_t ch22;  // Modell 2

const int LED1 = 13; //LEDkennung zwischen a und b

const byte numch1=0;
const byte numch2=1;
const byte numch3=2;
const byte numch4=3;
const byte numch5=4;
const byte numch6=5;
const byte numch7=6;
const byte numch8=7;
const byte numch9=8;
const byte numch10=9;
const byte numch11=10;
const byte numch12=0;
const byte numch13=1;
const byte numch14=2;
const byte numch15=3;
const byte numch16=4;
const byte numch17=5;
const byte numch18=6;
const byte numch19=7;
const byte numch20=8;
const byte numch21=9;
const byte numch22=10;

void setup()
{
  pinMode(LED1, OUTPUT);
  pinMode(12,INPUT);
  pinMode(11,INPUT);
  pinMode(10,INPUT);
  pinMode(9,INPUT);
  pinMode(8,INPUT);
  pinMode(7,INPUT);
  pinMode(6,INPUT);
  pinMode(5,INPUT);
  pinMode(4,INPUT);
  pinMode(3,INPUT);
  pinMode(22,INPUT);
  
void loop() {
    pwm1.setPWM(numch1, 1, pulseWidth(ch1));
    pwm1.setPWM(numch2, 1, pulseWidth(ch2));
    pwm1.setPWM(numch3, 1, pulseWidth(ch3));
    pwm1.setPWM(numch4, 1, pulseWidth(ch4));
    pwm1.setPWM(numch5, 1, pulseWidth(ch5));
    pwm1.setPWM(numch6, 1, pulseWidth(ch6));
    pwm1.setPWM(numch7, 1, pulseWidth(ch7));
    pwm1.setPWM(numch8, 1, pulseWidth(ch8));
    pwm1.setPWM(numch9, 1, pulseWidth(ch9));
    pwm1.setPWM(numch10, 1, pulseWidth(ch10));
    pwm1.setPWM(numch11, 1, pulseWidth(ch11));
    pwm2.setPWM(numch12, 1, pulseWidth(ch12));
    pwm2.setPWM(numch13, 1, pulseWidth(ch13));
    pwm2.setPWM(numch14, 1, pulseWidth(ch14));
    pwm2.setPWM(numch15, 1, pulseWidth(ch15));
    pwm2.setPWM(numch16, 1, pulseWidth(ch16));
    pwm2.setPWM(numch17, 1, pulseWidth(ch17));
    pwm2.setPWM(numch18, 1, pulseWidth(ch18));
    pwm2.setPWM(numch19, 1, pulseWidth(ch19));
    pwm2.setPWM(numch20, 1, pulseWidth(ch20));
    pwm2.setPWM(numch21, 1, pulseWidth(ch21));
    pwm2.setPWM(numch22, 1, pulseWidth(ch22));

}



Mit freundlichem Gruß

Tommy56

Welcher Fehler kommt sollen wir jetzt auswürfeln oder verrätst Du uns den noch?

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

agmue

Code: [Select]
int ch1;
...
uint16_t ch1;

Zwei Variablen mit dem selben Namen mag der Compiler nicht.

Die Zeilen mit "int" können weg.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Go Up