Skocz do zawartości

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


baalzevuv

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

Link do komentarza
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ń)?

Link do komentarza
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
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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ć 

Link do komentarza
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
Link do komentarza
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

Link do komentarza
Share on other sites

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
Link do komentarza
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!

Anonim
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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.