Go Down

Topic: Digital IO erweitern - mit PWM für Servoansteuerung (Read 1 time) previous topic - next topic

uwefed


also das bedeutet, entweder ich hole mir einen I2C Expander um mein GLCD darüber anzusteuern um wieder freie Digitale Ports zu bekommen
oder halt ein Schieberegister. Dieses Schieberegister besitze ich sogar, nur wie ich dieses mit dem GLCD zum laufen bekomme kann ich mir im Moment noch nicht vorstellen. Habe bis jetzt damit nur mit LEDs gearbeitet.


Du kannst die 8 Datenleitungen über das Schieberegister oder I2Cexpander ausgeben; dazu mußt Du aber die Bibiothek umschreiben.

Quote from: moe69

Könnte ich also mein Muxer CD4067 auch zum ansteuern von Servos verwenden? Praktisch seine Analogeingänge als Ausgänge umgestalten?
mfg moe


Nein; Du kannst die Steuereingänge des Servo nicht in der Luft ohne Steuersignal lassen. sie bleiben sicher nicht in der letzten Postion stehen.
Zum ansteuern des CD4067 brauchst Du 4 digital Ausgänge.

Grüße Uwe 

moe69

#6
Mar 06, 2012, 11:57 pm Last Edit: Mar 06, 2012, 11:59 pm by moe69 Reason: 1
Hallo Uwe, danke Dir für die Hilfe.

Also, ich glaube das mit dem Schieberegister oder dem I2C Expander wird etwas aufwändiger nehme ich an?

Was ich mir jetzt noch überlegt habe ist, dass ich die 5 Analogeingänge die mein GLCD verbraucht ja auf den Mux legen könnte.
So hätte ich 5 weitere Ausgänge ja frei, da die Analog-INs ja auch als Ausgang zu setzen sind.

Momentan ist meine Belegung wie Belegung1

Wenn ich die Analogpins des GLCD auf den Muxer lege, dann wäre es wie Belegung2


Kanal - Belegung1 - Belegung2
-----------------------------------------
A0 = MUX       MUX
A1 = GLCD     - frei -
A2 = GLCD     - frei -
A3 = GLCD     - frei -
A4 = GLCD     - frei -
A5 = GLCD     - frei -

0 = MUX         MUX
1 = MUX         MUX
2 = - frei -     -frei-
3 = - frei -     -frei-
4 = GLCD       GLCD
5 = GLCD       ...
6 = GLCD
7 = GLCD
8 = GLCD
10= GLCD
11= GLCD
12= MUX
13= MUX

MUX1 = - frei -      GLCD
MUX2 = - frei -      GLCD            
MUX3 = - frei -      GLCD      
MUX4 = - frei -      GLCD
MUX5 = - frei -      GLCD
MUX6 = - frei -      -frei-
MUX7 = - frei -      -frei-
MUX8 = - frei -      -frei-
.....

Die Frage ist jetzt nur, wie sag ich der GLCD Library, das ich die Analog-Pins auf den Muxer lege.
In der Config sieht das ja so aus:


/*********************************************************/
/*  Configuration for assigning LCD bits to Arduino Pins */
/*********************************************************/
/* Data pin definitions
*/
#define glcdData0Pin        8
#define glcdData1Pin        9
#define glcdData2Pin        10
#define glcdData3Pin        11
#define glcdData4Pin        4
#define glcdData5Pin        5
#define glcdData6Pin        6
#define glcdData7Pin        7

/* Arduino pins used for Commands
* default assignment uses the first five analog pins
*/

#define glcdCSEL1        14
#define glcdCSEL2        15

#if NBR_CHIP_SELECT_PINS > 2
#define glcdCSEL3         3   // third chip select if needed
#endif

#if NBR_CHIP_SELECT_PINS > 3
#define glcdCSEL4         2   // fourth chip select if needed
#endif

#define glcdRW           16
#define glcdDI           17
#define glcdEN           18
// Reset Bit  - uncomment the next line if reset is connected to an output pin
//#define glcdRES          19    // Reset Bit

#endif //GLCD_PIN_CONFIG_H



Die Pins wären somit 14, 15, 16, 17, 18... diese müsste ich mit dem Muxer verknüpfen.
Analoge Spannungen lese ich mit dem Muxer über folgendes Skript ein:


/* Ultra-Shield-BASIC2
*/

int s0 = 0; // MUX-Kontroll-Pin s0 RX
int s1 = 1; // MUX-Kontroll-Pin s1 TX
int s2 = 12; // MUX-Kontroll-Pin s2
int s3 = 13; // MUX-Kontroll-Pin s3
int SIG_pin = 5; //MUX-Eingangs-Pin


#include <glcd.h>
#include <fonts/allFonts.h>


//---------------------------------------------------------------------------------


void setup()
{
 
 pinMode(s0, OUTPUT); // Pin 2 digital als Ausgang
 pinMode(s1, OUTPUT); // Pin 3 digital als Ausgang
 pinMode(s2, OUTPUT); // Pin 12 digital als Ausgang
 pinMode(s3, OUTPUT); // Pin 13 digital als Ausgang

 // alle Kontroll-Pins auf 0 = Kanal 0
 digitalWrite(s0, LOW);  
 digitalWrite(s1, LOW);
 digitalWrite(s2, LOW);
 digitalWrite(s3, LOW);
   
 GLCD.Init();
 GLCD.SelectFont(System5x7);
   
}

//-----------------------------------------------------------------------------------

void loop()
{
 
int LeseMux(0) // lies Kanal Nr. 0 am Muxer
 
}

//-----------------------------------------------------------------------------------------

// Funktion LeseMux

int LeseMux(int kanal)
{
 int kontrollPin[] = {s0, s1, s2, s3}; // Array fuer Kontroll-Pins

 int muxKanal[16][4]= // Array fuer Kanaele
 {
   {0,0,0,0}, //Kanal 0
   {1,0,0,0}, //Kanal 1
   {0,1,0,0}, //Kanal 2
   {1,1,0,0}, //Kanal 3
   {0,0,1,0}, //Kanal 4
   {1,0,1,0}, //Kanal 5
   {0,1,1,0}, //Kanal 6
   {1,1,1,0}, //Kanal 7
   {0,0,0,1}, //Kanal 8
   {1,0,0,1}, //Kanal 9
   {0,1,0,1}, //Kanal 10
   {1,1,0,1}, //Kanal 11
   {0,0,1,1}, //Kanal 12
   {1,0,1,1}, //Kanal 13
   {0,1,1,1}, //Kanal 14
   {1,1,1,1}  //Kanal 15
 };

 // durchlaufe die 4 s
 for(int zaehler = 0; zaehler < 4; zaehler ++)
 {
   digitalWrite(kontrollPin[zaehler], muxKanal[kanal][zaehler]);
 }

 int wert = analogRead(SIG_pin); // lese Wert SIG-Pin
 //return the value
 return wert;
}



Wer kann mir nun dabei helfen?

mfg
moe


Go Up