Skocz do zawartości
baalzevuv

Podłączenie 64 elementów wyświetlacza do Arduino

Pomocna odpowiedź

Witam wszystkich pasjonatów!
Mam pytanie techniczne. Chcę zbudować dokładny zegar którego wyświetlaczem będą wielkie świecące segmenty (duże obciążenie). Zakładając że wyświetlam "tylko" cztery cyfry potrzebuję na przykład 32 przekaźniki (nie mniej jest jeszcze opcja sekundnika, kurantów itp) stąd bezpieczniejszym założeniem będzie przygotować się od razu na 64 wyjścia ON-OFF (przekaźniki).

Teraz pytanie:  Czy arduino poradzi sobie z taką ilością wyjść (on-off), ew jakieś pomysły jak to tanio zrobić?   (tanio bo to musi być element powtarzalny - nie chodzi o zbudowanie jednej sztuki).  Żeby było jasne - znalazłem w internecie pomysły jak to zrobić nie mniej szybko okazało się że pokazane płytki expanderów są po prostu bardzo trudne do zdobycia.

Podsumowując: układ musi mieć do 64 wyjścia (on-off), układ zegara oraz wyprowadzone przyciski do ustawiania tego zegara 😉

 

Znalazłem coś takiego: https://botland.com.pl/pl/arduino-shield-ekspandery-wyprowadzen/5195-dfrobot-io-expansion-shield-dla-bluno-m3.html

Jeśli udałoby się zastosować dwie takie (lub podobne) płytki dalej można zastosować moduły przekażników 5V. 
Proszę o jakieś pomysły lub gotowe rozwiązania 😉
Ewentualny mail:     baalzevuv77@gmail.com

Udostępnij ten post


Link to post
Share on other sites

@baalzevuv witam na forum 🙂

To raczej proste zadanie. Wystarczy praktycznie dowolny ekspander np. taki z 8 wyjściami. Wykorzystasz 8 takich układów i będą 64 GPIO 🙂 Szukasz konkretnych modułów czy będziesz tworzył własną płytkę pod taki układ?

8 minut temu, baalzevuv napisał:

na 64 wyjścia ON-OFF (przekaźniki).

Tylko się upewnię - te przekaźniki to świadomy wybór? Wiesz, że to będzie strasznie hałasowało i do tego z czasem przekaźniki przestaną działać (od dużej liczby przełączeń)?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

rozwinę troszkę temat i zacznę od końca. 
Przekaźniki owszem będą hałasować ale nie dodałem że "lampki" będą zasilane transformatorem (i tu urwijmy temat - jeśli wyjdzie zaprezentuję o co dokładnie walczyłem). Przekaźniki i ich wady akurat w tym pomyśle nie są przeszkodą a wręcz dają mi dodatkowe możliwości 😉
Jeśli idzie o zrobienie płytki - biorę pod uwagę jej wykonanie...choć nie ukrywam że gotowe przynajmniej na początku ułatwiły by mocno sprawę. Dodam że nie chodzi o pojedyńczą sztukę.
Nie siedzę ani w arduino ani raspberry stąd czeka mnie wiele do nauczenia - jestem automatykiem więc.... chyba sobie poradzę a jak nie to poproszę młodszych kolegów 😉

Płytki expanderów są ok, w najgorszym przypadku faktycznie zastosuje się ich aż osiem  (choć to skrajny przypadek).
Sterowanie będzie podobne jak w wyświetlaczach LED czyli każdy segment to jeden przekaźnik (plus kropki itp) - tu tajemniczo dodam że to projekt wstępny -wersja 2.0 będzie sterowana inaczej 😉   każda liczba będzie osobnym przekaźnikiem - wyświetlacz neonowy).

Edytowano przez baalzevuv

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

W wyświetlaczach LED często stosuje się także multipleksowanie wyświetlania co pozwala zmniejszyć ilość potrzebnych portów I/O.

Edytowano przez Belferek

Udostępnij ten post


Link to post
Share on other sites
6 minut temu, Belferek napisał:

W wyświetlaczach LED często stosuje się także multipleksowanie wyświetlania co pozwala zmniejszyć ilość potrzebnych portów I/O.

W "moim" przypadku multipleksowanie odpada. Każdy segment to osobne sterowanie. Nie mniej nie zagłębiajmy się w nieistotne szczegóły.
Temat bardziej dotyczy możliwości sterowania do 64 elementów za pomocą prostego sterownika. Podejrzewam że wszystko się da nie wiem tylko jak się do tego zabrać 

Udostępnij ten post


Link to post
Share on other sites
1 minutę temu, Belferek napisał:

W wyświetlaczach LED często stosuje się także multipleksowanie wyświetlacza

Wyobrażasz sobie multipleksowanie na przekaźnikach? 😉

1 minutę temu, baalzevuv napisał:

Podejrzewam że wszystko się da nie wiem tylko jak się do tego zabrać 

Tak jak chciałeś na początku - użyj ekspanderów. Jeśli nie chcesz ośmiu to istnieją takie z 16 wyjściami. Jeśli chcesz gotowe moduły - najprostsze będzie zastosowanie 8-przekaźnikowych modułów z dołączoną do każdego małą płyteczką z 8-wyjściowym ekspanderem (np. taką). Jeśli i to nie pasuje to już nie wiem...

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
4 minuty temu, ethanak napisał:

Wyobrażasz sobie multipleksowanie na przekaźnikach?

A dlaczego by nie - jeśli przekaźniki miałyby podtrzymanie?

Edytowano przez Belferek

Udostępnij ten post


Link to post
Share on other sites

myślę że multipleksowanie to niepotrzebna...komplikacja. OK, zastosuję płytki / lub układy i jak dojdę jak to zrobić zaprezentuję całość jako ciekawostkę 😉

Udostępnij ten post


Link to post
Share on other sites

Witam ponownie.
Zdobyłem arduino uno, zegar RTC DS1307 i parę potrzebnych detali.
Po zmontowaniu w całość (zgodnie z wiedzą znalezioną w internecie),  wpisałem "program"... również sklejany z kilku znalezionych w necie + własne poprawki estetyczne.
Program wygląda tak:

#include <Wire.h>
#include <LiquidCrystal.h>
#include "RTClib.h"

RTC_DS1307 rtc;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 

char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

void setup () 
{
  Serial.begin(9600);
  lcd.begin(16, 2);
  
  if (! rtc.begin()) 
  {
    lcd.print("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) 
  {
    lcd.print("RTC is NOT running!");
  }
  
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
     
}

void loop () 
{
    DateTime now = rtc.now();
    
    lcd.setCursor(0, 1);
    lcd.print("time:  ");
    lcd.print(now.hour());
    lcd.print(':');
    lcd.print(now.minute());
    lcd.print(':');
    lcd.print(now.second());
    lcd.print("   ");

    lcd.setCursor(0, 0);
    lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
    lcd.print("   ");
    lcd.print(now.day());
    lcd.print('/');
    lcd.print(now.month());
    lcd.print('/');
    lcd.print(now.year());
   
}

Jak widać na załączonych zdjęciach - działa.

Niestety na tym etapie natrafiłem na dwa problemy których nie potrafię  (jeszcze) przeskoczyć. Pierwszy to...brak zera przed liczbami mniejszymi od 10 (minut i sekund)... a drugi poważniejszy. Nie wiem dlaczego ale pomimo sprawnej baterii w module zegara po każdym odłączeniu zasilania wświetlana godzina zaczyna się dokładnie w momencie wgrania programu (i synchronizacji). Czyli zakładając że program wgrałem o godzinie 11:15 po każdym resecie (odłączeniu zasilania) zaczyna się liczenie od 11:15.

Po uporaniu się z tymi problemami przejdę dalej czyli do podłączenia ekspanderów i płytek przekaźników (na początek 4 szt - 32 wyjścia). Tu zaczną się schody bo każda liczba (cyfry) godziny i minut będzie przekładana na uruchomienie konkretnych wyjść (będą zapalały segmenty świetlne wielkiego wyświetlacza).
Martwi mnie jeszcze jedna rzecz: 

Szkic używa 5482 bajtów (16%) pamięci programu. Maksimum to 32256 bajtów.
Zmienne globalne używają 546 bajtów (26%) pamięci dynamicznej, pozostawiając 1502 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów.

...a to przecież prosty program. Czy nie braknie mi pamięci?

IMG_20200124_111819 (Kopiowanie).jpg

IMG_20200124_111836 (Kopiowanie).jpg

IMG_20200124_111920 (Kopiowanie).jpg

IMG_20200124_112020 (Kopiowanie).jpg

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

ad. 1: zapoznaj się z funkcją sprintf;

ad. 2: zakomentuj rtc.adjust (jest potrzebna tylko wtedy, gdy masz nieustawiony zegar, czyli tylko raz).

Poza tym pamiętaj, że biblioteki zegara i wyświetlacza też się wliczają do objętości kodu.

Edytowano przez ethanak
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...