logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Tm1637 wyświetlacze segmentowe ekspander multipleks

sznickers 10 Lut 2025 23:42 1221 69
Najlepsze odpowiedzi

Jak podłączyć kilka modułów TM1637 do jednej płytki ESP i czy da się to zrobić przez ekspander I2C?

Tak — kilka modułów TM1637 można obsłużyć przez ekspander MCP23017 na I2C, ale nie przez TCA9548A jako proste rozwiązanie „plug and play”, bo TM1637 nie używa standardowego I2C i gotowa biblioteka TM1637 wymaga przeróbki. [#21434615][#21434728][#21434973] Do MCP23017 podłączasz linie CLK i DIO jako zwykłe wyjścia GPIO, np. PA0 i PA1 albo dowolne inne piny portu A/B; piny klawiatury oraz RST można zostawić wolne. [#21456150][#21456170][#21456180] Jeden MCP23017 ma 16 linii, więc przy TM1637 liczonym po 2 piny na moduł wychodzi do 8 wyświetlaczy na jeden układ; na jednej magistrali I2C można też użyć kilku MCP23017 po ustawieniu adresów. [#21456227][#21434728][#21456273] Najpewniejsza droga to Arduino IDE i własny kod dostosowany do sekwencji START/WRITE/STOP TM1637, bo w ESP Easy nie było tu gotowego, sprawdzonego rozwiązania. [#21456378][#21457008][#21458446] Alternatywnie warto rozważyć gotowe sterowniki TM1638 lub MAX7219, jeśli zależy Ci na prostszym podłączeniu wielu wyświetlaczy. [#21434445][#21434604][#21434728]
Wygenerowane przez model językowy.
REKLAMA
  • #1 21434313
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    Dzień dobry, pytanie mam o wyświetlacze 7 segmentowe. Gdybym chciał ich połączyć kilka (pytanie ile tez można) do jednej płytki ESP. Czy są do tego jakieś ekspandery ? Np na I2C. Polećcie prośba jakąś płytkę, którą kupię i będzie mi to działać. Bo rozumiem, że do pinów CLK i DIO można podłączyć tylko jeden 7ds. Czy może płytka ESP32 z dużą ilość wejść i wyjść i każdy wyświetlacz zabierze 2 piny ?
       

    Niebieska płytka drukowana z wyświetlaczem 7 segmentowym i układem scalonym.
  • REKLAMA
  • #2 21434330
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    Jeśli ten wyświetlacz posiada możliwość zmiany adresu, to można połączyć więcej urządzeń na jednej linii I2C.
  • #3 21434332
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    Ten moim zdaniem nie posiada takiej funkcji. LCD1602 mają zworki A1, A2 itd -   to kumam. Ale kręcą mnie tez takie duże fajne cyfry. 
  • REKLAMA
  • #4 21434335
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    sznickers napisał:
    Czy są do tego jakieś ekspandery ?

    Istnieje coś takiego Link.
  • #5 21434375
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    W tym linku co mi wysłałeś są wyswietlacze OLED a nie display 7 d. Oled mają SDA i SCK , a moje 7s mają CLCK i DIO. Będzie to gadać razem?
  • #6 21434445
    viayner
    Poziom 43  
    Posty: 10627
    Pomógł: 1563
    Ocena: 2047
    Witam,
    rozważ może użycie TM1638, one mają dodatkowy pin STROBE = CS i tak możesz komunikować się z wieloma układami po tej samej szynie.
    Możesz dołożyć jakiś multiplekser do rozdzielania sygnałów na różne układy TM1637.
    Użyj innych układów sterujących wyświetlaczami, jak np. MAX7219.
    Pozdrawiam
  • #7 21434592
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    Dzięki Viayner, jak dobrze rozumiem zastosowanie układu tm1638 czy max daje dwa wyswietlacze, jeden pin więcej. Zawsze jakies rozwiązanie. Ale pasowało by mi dać do jednej płytki od 6 sztuk wyswietlaczy 7s- pomiar temperatury. 
    https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout?view=all
    I2C Control-Side pins:
    SCL - this is the I2C clock pin for the chip itself, connect to your microcontrollers I2C clock line.
    SDA - this is the I2C data pin for the chip itself, connect to your microcontrollers I2C data line.
    RST - this is the reset pin, for resetting the multiplexer chip. Pulled high by default, connect to ground to reset.
    Czy to u mnie załatwi sprawę? Taka płytka ?
    Moduł ekspandera I2C Adafruit TCA9548A z widocznymi pinami.
  • #8 21434604
    viayner
    Poziom 43  
    Posty: 10627
    Pomógł: 1563
    Ocena: 2047
    Witam,
    używając np. TM1638, łączysz wszystkie DIO razem, podobnie CLK, a STB sterujesz z dowolnego pinu, zresztą biblioteka do inicjalizacji potrzebuje 3 pinów, chyba że piszesz własną bibliotekę.
    Co masz na myśli, 6 sztuk wyświetlaczy? 6x 7 segment czy 6x moduł po 4x7 segment?
    Poszukaj, są gotowe moduły zawierające więcej niż 4 wyświetlacze, np. TM1638 obsługuje do 10 cyfr, MAX7219/21 8 cyfr, albo na rejestrach 74595, tu nie ma ograniczeń, łączysz tyle układów, ile trzeba.
    Pozdrawiam
  • #9 21434612
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    Chcę podłączyć kilka sztuk TM1637 do jednej płytki ESP:

    Niebieska płytka drukowana z wyświetlaczem 7 segmentowym i układem scalonym.
  • REKLAMA
  • #10 21434614
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    Do kol. @sznickers TCA9548A to jest ekspander a plytki z OLED są jako przykład.
    Rozdziela jedno SDA + SCL na osiem (dodatkowo są trzy wejścia adresowe).
  • #11 21434615
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    sznickers napisał:
    Będzie to gadać razem?

    Raczej nie za bardzo, ponieważ ten multiplexer oczekuje pierwszego bajtu z zawartością adresu, a dla wyświetlacza pierwszy bajt to komenda. Zakładałem, że telegram wyświetlacza bazuje na standardzie I2C, ale tak nie jest.
  • #12 21434673
    _jta_
    Specjalista elektronik
    Posty: 48944
    Pomógł: 3205
    Ocena: 4221
    A może zastosować demultipleksery do wybierania, na który wyświetlacz będą podawane sygnały I2C? Plus multiplekser do wyboru, z którego będą odbierane dane. Można by myśleć o multiplekserach analogowych, ale jakieś CD4051 prawdopodobnie mają za duży opór w stanie połączenia, by przekazywać sygnały, trzeba by znaleźć lepsze.
  • #13 21434693
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    jta jakbyś mógł podesdłać jaki typ model plytki, to byl bym wdzieczny.
  • REKLAMA
  • Pomocny post
    #14 21434728
    viayner
    Poziom 43  
    Posty: 10627
    Pomógł: 1563
    Ocena: 2047
    Witam,
    - jeżeli chcesz z multiplekserem, to każdy cyfrowy zda egzamin, np. 74157 (dwa wyjścia), 74153 (4 wyjścia), 74154 (16 wyjść), sterujesz adresem, co jest przekazywane z wejściami, na które wyjścia.
    - użyj dowolnego expandera I2C z możliwością ustawiania adresów i masz rozwiązanie problemu, np. MCP23017, masz możliwość ustawienia 8 różnych adresów I2C, a każdy obsłuży 2 wyświetlacze 7-segmentowe przy rozsądnym prądzie.
    Pozdrawiam
  • #15 21434740
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
  • #16 21434973
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    sznickers napisał:
    Czyli ten zda egzamin + TM1637 ?

    Oczywiście że zda.
    Należy tylko problem rozwiązać programowo. Nie da się wtenczas użyć gotowej biblioteki TM1637.
  • #17 21435406
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    A jakbym to podłączył w ESP Easy to bez pisania rules czy skryptów z poziomu wejść i wyjść da się to skonfigurować?
  • #18 21435445
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    sznickers napisał:
    da się to skonfigurować?

    Co masz na myśli?
  • Pomocny post
    #20 21435469
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    Chodzi o to, aby dostosować bibliotekę TM1637 (to tylko 3 komendy: START, STOP, WRITE) do wymagań komend MCP23017. Biblioteka MCP23017 jest gotowa, to po co kombinować.

    Dodano po 1 [godziny] 39 [minuty]:

    Przykład komendy STOP
    oryginalnie
    void TM1637Display::stop()
    void    SevenSegmentTM1637::comStop(uint8_t pinClk, uint8_t pinDIO) {
      digitalLow(pinClk);   // CLK LOW
      delayMicroseconds(TM1637_CLK_DELAY_US);
      digitalLow(pinDIO);    // DIO LOW
      delayMicroseconds(TM1637_CLK_DELAY_US);
      digitalHigh(pinClk);   // CLK HIGH
      delayMicroseconds(TM1637_CLK_DELAY_US);
      digitalHigh(pinDIO);   // DIO HIGH
    }
    

    dopasowany do MCP23017
    
    
    void TM1637-MCP23017Display::comstop()
    {
      mcp.digitalWrite(pinClk, LOW);
      delayMicroseconds(TM1637_CLK_DELAY_US);
      mcp.digitalWrite(pinDIO, LOW);
      delayMicroseconds(TM1637_CLK_DELAY_US);
      mcp.digitalWrite(pinClk, HIGH);
      delayMicroseconds(TM1637_CLK_DELAY_US);
      mcp.digitalWrite(pinDIO, HIGH);
      
    }
    
  • #21 21435710
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    Dziękuję Inot. Wystarczy to wkleić do rules ?
    Zrzut ekranu interfejsu ESP Easy Mega z widokiem na zakładkę reguł z kodem.
  • #22 21435717
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    Na ESP Easy absolutnie się nie znam, dlatego proponuję przejść na Arduino IDE.
    Oczywiście to nie wszystko. Należy odpowiednio jeszcze dopasować dwie inne funkcje biblioteki TM1637 Link. Oprócz tego zdeklarować odpowiednio piny.
  • Pomocny post
    #23 21438647
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    Nie wiem, z jakiego powodu nie ma odpowiedzi na mój ostatni post.
    Jeśli z niezrozumienia idei rozwiązania, to przedstawiam następną komendę dostosowania biblioteki.
    Kod: Arduino
    Zaloguj się, aby zobaczyć kod

    Kod: Arduino
    Zaloguj się, aby zobaczyć kod
  • #24 21438655
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    Inot dziękuję, zamówiłem moduł z Ali i czekam na niego, jak mi przyjdzie to będę wgrywał te komendy i testował.
  • Pomocny post
    #25 21438658
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    W takim razie możesz już pomyśleć nad tym, jak zmienić następną komendę, mianowicie:
    Kod: Arduino
    Zaloguj się, aby zobaczyć kod
  • #26 21439696
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    Podpowiedz kolego, ten moduł MCP23017 czy dobrze rozumiem, że mógłbym go tez wykorzystać do zaadresowania PZEM-ów kilku ? One chodzą po RX TX. Problem miałem, mam, żeby podłączyć więcej niż dwa na jednej płytce ESP-robiłem układ z diodami Schotkyego, ale tez mi to nie zagrało, może ten moduł by rozwiązał ten problem ?
    Zrzut ekranu z ustawień ESP Easy Mega dla urządzenia Energy PZEM-004T, z zaznaczoną konfiguracją portu szeregowego jako I2C oraz adresem 0x48.
  • #27 21439757
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    Te moduły można podłączyć bezpośrednio do ESP. Na przykład do ESP8266 można podłączyć bez problemu 3 takie elementy.
    Przykład takiego zastosowania Link.
  • #28 21441137
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    Dziękuję inot-dobry link!! Czyli do ESP8266 Nodemcu, i podłączone do PWM- dobre. Ja podłączyłem do wemos mini, 3 wemosy, uruchamiam. Stworzę sobie teraz deltę- dla ... sieć= falownik-pobór
    A ten plik PZEM softwer . ino -- to wsad do czego ? Pod Arduino ? Czy Homeasistant ?
    Interfejs użytkownika Domoticz wyświetlający dane dotyczące czujników elektrycznych.
  • #29 21441212
    inot
    Poziom 38  
    Posty: 3559
    Pomógł: 441
    Ocena: 801
    sznickers napisał:
    ino -- to wsad do czego ?

    Arduino.
    Jeśli do Wemos Mini podłączysz 3 takie moduły, to nie masz już portu I2C do dyspozycji (dla multiplexera).
  • #30 21441221
    sznickers
    Poziom 11  
    Posty: 196
    Pomógł: 1
    Ocena: 8
    Bawię się w ESP Easy i jak na razie lubię go-bo poznałem dostatecznie, tasmotę zacząłem poznawać-ale na razie wróciłem do ESP Easy, Arduino na razie tylko zainstalowałem, ale widzę, że dużo jest do Arduino na sieci. Widzę, że masz wiedzę i doświadczenie i chęć pomocy :). Zerknij-plis- czy dobrze rozumiem, bo czasem mi wyświetlacze lcd nie włączają się-czy dobrze myślę- trzeba jest przestawić na default ? na 0X20(default)?
    Zrzut ekranu z ustawieniami urządzenia ESP Easy Mega dla wyświetlacza LCD2004.
    Obraz pokazuje ustawienia adresów I2C dla wyświetlaczy LCD z różnymi konfigurowalnymi pinami A0, A1, A2.

Podsumowanie tematu

✨ Dyskusja dotyczy podłączenia wyświetlaczy 7-segmentowych TM1637 do płytki ESP, z pytaniem o możliwość użycia ekspanderów I2C do zwiększenia liczby wyświetlaczy. Uczestnicy sugerują użycie układów TM1638 lub MAX7219, które umożliwiają podłączenie wielu wyświetlaczy na jednej szynie. Wskazano również na możliwość zastosowania ekspandera MCP23017, który pozwala na adresowanie wielu wyświetlaczy. Uczestnicy omawiają również problemy z programowaniem i konfiguracją w środowisku ESP Easy oraz Arduino, podkreślając, że do prawidłowego działania wyświetlaczy konieczne jest odpowiednie przesyłanie sekwencji rozkazów.
Wygenerowane przez model językowy.
REKLAMA