Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
LK3.5-NOWY SOFT - KOLEJNE WERSJE
Przy okazji testów nakładki GSM wpadł mi w ręce multiplekser CD74HC4067. Za ok 5zł i trochę czekania na paczkę z chin możemy w prosty sposób z 4 wejść lub wyjść otrzymać ich aż 16!

Mała płytka z jednej strony posiada kanały C0->C15 a z drogiej interfejs I/0 i tak S0->S3 podpinamy do INP1D->INP4D VCC do +5V GND i EN do masy wielkiej filozofii tu nie ma... podając +5v na SIG zniemiamy kierunek transmisji i 4 portami OUT możemy steroważ aż 16 przekazników!

Ja skupię tu się na wejściach cyfrowych bo tych brakuje mi w w LK - podpinam bowiem alarm a w zasadzie jego czujki do LK i miałem problem wpięcia kilku HC-SR501 pod jeden port aż wpadłem na ta stronę http://bildr.org/2011/02/cd74hc4067-arduino/
[Obrazek: Hf19e08bb603a4ee5926606105d511764U.jpg]
Podając na wejście C0 stan wysoki w zasadzie nic się nie dzieje bo LK odczytuje nam stany wejść  jako 0000 lecz dalej zaczyna się zabawa Smile
poniżej rozpiska wszystkich kanałów.

{0,0,0,0}, //channel 0
{1,0,0,0}, //channel 1
{0,1,0,0}, //channel 2
{1,1,0,0}, //channel 3
{0,0,1,0}, //channel 4
{1,0,1,0}, //channel 5
{0,1,1,0}, //channel 6
{1,1,1,0}, //channel 7
{0,0,0,1}, //channel 8
{1,0,0,1}, //channel 9
{0,1,0,1}, //channel 10
{1,1,0,1}, //channel 11
{0,0,1,1}, //channel 12
{1,0,1,1}, //channel 13
{0,1,1,1}, //channel 14
{1,1,1,1} //channel 15

może by dodać jego obsługę do LK. wizualizacja 16 kanałów-> 4 kolejne kanały odpowiadają strefie, każdy kanał strefy ustawia stan wysoki strefy. strefa zachowuje się jak dotychczas INP1D w zadaniach i innych opcjach by zbytnio nie gmatwać kodu np 4 pierwsze kanały alarmu powodują zdarzenie inp1d kolejne 4 zdarzenie imp2d itd
Kod:
//http://bildr.org/2011/02/cd74hc4067-arduino
int s0 = 8;          //Mux control pins
int s1 = 9;
int s2 = 10;
int s3 = 11;
int SIG_pin = 0;     //Mux in “SIG” pin

void setup() {
  pinMode(s0, OUTPUT);
  pinMode(s1, OUTPUT);
  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);
  digitalWrite(s0, LOW);
  digitalWrite(s1, LOW);
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);
  Serial.begin(9600);
}

void loop() {
  //Loop through and read all 16 values Reports back Value at channel 6 is: 346
  for (int i = 0; i < 16; i++) {
    Serial.print("Value at channel ");
    Serial.print(i);
    Serial.print("is : ");
    Serial.println(readMux(i));
    delay(1000);
  }
}
int readMux(int channel) {
    int controlPin[] = {s0,s1,s2,s3};
    int muxChannel[16][4] = {
        {0,0,0,0}, //channel 0
        {1,0,0,0}, //channel 1
        {0,1,0,0}, //channel 2
        {1,1,0,0}, //channel 3
        {0,0,1,0}, //channel 4
        {1,0,1,0}, //channel 5
        {0,1,1,0}, //channel 6
        {1,1,1,0}, //channel 7
        {0,0,0,1}, //channel 8
        {1,0,0,1}, //channel 9
        {0,1,0,1}, //channel 10
        {1,1,0,1}, //channel 11
        {0,0,1,1}, //channel 12
        {1,0,1,1}, //channel 13
        {0,1,1,1}, //channel 14
        {1,1,1,1} //channel 15
    }; //loop through the 4 sig
    for(int i = 0; i < 4; i ++){ digitalWrite(controlPin[i], muxChannel[channel][i]); } //read the value at the SIG pin
    int val = analogRead(SIG_pin); //return the value
    return val;
}
e-chata.hyzne.com | LK1 - sterowniki akwarystyki | LK2 - sterowniki ihome | LK3 - niezliczone ilości wersji/nakładek na farmach PV i nie tylko | LK4 - testy bezprzewodowe
Odpowiedz


Wiadomości w tym wątku

Skocz do:


Użytkownicy przeglądający ten wątek: 6 gości