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