Skocz do zawartości

Problem z wyświetlaczem LED


neon97

Pomocna odpowiedź

Kupiłam D-2625ASK11 i chciałam podłączyć go do Atmegi. Niestety dopiero zaczynam i mam problem. A konkretniej:

1.Jak rozpoznać czy jest wspólna anoda czy katoda?

2. W nocie katalogowej znalazłam tylko tyle:

Mam litery i numery..tylko od której strony licze te piny?

3. Jeśli dowiem się który pin odpowiada każdej z diod(A,B itp) to czy obie cyfry będą świeciły się jednocześnie? 😕

4. Co z napięciem? Gdzieś znalazłam tylko tyle, że na anode/katodę podajemy 2V. Tak? I co z resztą pinów?

Link do komentarza
Share on other sites

Na rysunku jest wyraźnie opisane gdzie jest pin 1. Ustaw wyświetlacz przodem do siebie, kropkami do dołu. Pin 1 jest pod spodem, w lewym dolnym rogu. Patrząc "przez wyświetlacz", liczysz odwrotnie do wskazówek zegara: na dole w prawo a potem na górze z powrotem w lewo.

Rodzaj organizacji (wspólna anoda czy katoda) najłatwiej rozpoznać po typie - jest tam jakiś napis na obudowie? Druga możliwość to multimetrem, tak jak mierzysz zwykłe diody. Masz dwa schematy połączeń wewnętrznych, sprawdź który pasuje.

Wyświetlaczy LED nie steruje się napięciem. Żeby tego używać musisz mieć min 8 oporników ograniczających prąd.

Jeśli wyświetlacz okaże się marny, będą także potrzebne dwa tranzystory (i kilka kolejnych oporników).

Dlaczego nie kupiłaś gotowego modułu z wyświetlaczem? Tam już to wszystko ktoś zrobił:

https://botland.com.pl/wyswietlacze-segmentowe-led/5973-modul-4x-wyswietlacz-7-segmentowy-interfejs-cyfrowy.html

https://botland.com.pl/wyswietlacze-segmentowe-led/2896-modul-4-x-wyswietlacz-8-segmentowy-wsp-anoda-2-otwory-montazowe.html

https://botland.com.pl/wyswietlacze-segmentowe-led/2996-modul-8-x-wyswietlacz-8-segmentowy-spi.html

Używanie tego jest dużo łatwiejsze niż rzeźba z opornikami i tranzystorami.

Napisz co chcesz z tym zrobić, po co podłączasz do procesora itd.

EDIT: Jeśli oba wyświetlacze zasilisz na raz to tak, obie cyfry będą pokazywały to samo. Dlatego nikt tak nie robi, to bez sensu. Musisz szybko załączać raz jeden a raz drugi. Jeśli zrobisz to min. 100 razy na sekundę, powstanie złudzenie jednoczesnego świecenia dwóch różnych cyfr. To się nazywa -> multipleksowanie.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dziękuję za odpowiedz, sporo wyjaśniła 🙂

Co do napisu na obudowie....Jedynie "D-5625ASK11"

Wyczytam coś z tego? 😉

Wiem, że będę potrzebowałam rezystorów i tranzystorów. W sumie robię kurs. I Mam pięknie rozrysowane gdzie i jaki podłączyć.

Co do tego modułu....Zwyczajnie nie wiedziałam, że takie istnieją 😃 Poszłam do elektronicznego i zobaczyłam, że mają po 25 groszy to wziełam 😉 Ale jakoś bardzo mi to nie przeszkadza.

Co chcę zrobić... Uczę się, więc narazie nic wielkiego. Zwyczajne odliczanie od X sekund do zera i wtedy zaświecić lampkę. Poźniej chcę zrobić budzik który można wyłączyć jedynie klikając w odpowiedniej kolejności na przyciski, ale to w jak już ogarnę podstawy

Link do komentarza
Share on other sites

Tutaj dokładnie ten sam wyświetlacz występuje jako wspólna katoda:

https://www.podzespoly-elektroniczne.pl/produkt/ddac1f6f13

a skoro tak, to możesz spróbować zbudować układ bez tranzystorów.

Jeśli spojrzysz na układ wyświetlania multipleksowanego to zauważysz, że są dwie grupy driverów: te od segmentów i te od elektrod wspólnych (anod lub katod). Te "segmentowe" muszą mieć oporniki i zawsze musi być ich 8 (bo kropka to równoprawny segment). Przez każdy z tych sterowników płynie prąd pojedynczego segmentu pomnożony przez liczbę wyświetlaczy. No i ten prąd może płynąć ciągle bo może się zdarzyć, że we wszystkich cyfrach świeci się akurat ten sam segment.

Drivery elektrod wspólnych "ciągną" oczywiście do plusa (wspólna anoda) lub do masy (wspólna katoda). Te z kolei sterowniki załączają się tylko raz na cały okres multipleksowania, tylko w chwili gdy dany wyświetlacz świeci. One z kolei przewodzą prąd będący sumą wszystkich 8 segmentów i muszą być bardzo "sztywne" tj. ich napięcie nie może się zmieniać w zależności od prądu, bo inaczej "bogatsze" w segmenty cyfry (np. 0, 6, 8, 9) będą świeciły ciemniej. Tu nie może być żadnych oporników szeregowych itp.

Mając jednak tylko dwie cyfry i w sumie nieduży wyświetlacz (ze wsp. K) potrzebujący niewiele prądu wykorzystaj możliwości portów ATmegi i podłącz obie katody bezpośrednio do których dwóch linii jakiegoś portu a pozostałe 8 segmentów przez oporniki do 8 linii innego (ale najlepiej wszystkie do tego samego) portu procesora. Takie coś zadziała a drutowania jest dużo mniej niż z tranzystorami.

Do sterowania wyświetlaczami LED są gotowe biblioteki Arduino, ale w celach edukacyjnych proponuję napisanie tego samodzielnie. Już widać, że nie jest to żadna rocket science a nauczyć się przy tym można naprawdę sporo. Powodzenia 🙂 Jakby co, pytaj.

Budzik wyłączany kombinacją przycisków mówisz? Zmyślne, ale u mnie długo by nie podziałał.. Dlaczego ludzie robią innym ludziom takie rzeczy?

W takich urządzeniach kluczowa jest estetyka. Masz jakiś pomysł na obudowę?

  • Pomogłeś! 1
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

Fajnie , ale pokaż schemat i kawałek kodu - to w sumie najciekawsze. Może ktoś jeszcze wpadnie na podobny pomysł i przyda mu się Twój przykład.

Jak teraz z jasnością? Jakie masz oporniki? Czy obyło się bez tranzystorów? Jaką masz częstotliwość przełączania? Zamierzasz rozbudować to do 4 lub więcej cyfr? Jeśli wyświetlacz nie jest beznadziejny i dobrze świeci przy 5mA (prądu ciągłego) to 4 cyfry porty ATmegi powinny uciągnąć. Z 6 może już być ciężko bez driverów. Jak działa obsługa multipleksowania? Udało się zrobić na przerwaniach od timera, czy na piechotę, delay() itp?

Link do komentarza
Share on other sites

Multipleksowania jeszcze nie zrobiłam, bo nie miałam zbytnio czasu. Ale zrobię. Jeszcze nie do końca czaje jak, ale zrobię 🙂 Póki co mam takie coś:

https://pastebin.com/256r5wAQ

Bez tranzystorów działa tak samo, ale już zostawiłam. Jasność dobra, rezystory 480 i 1k(na tranzystorach). Czestotliwosc 1000000.

Myślę zrobić dla 4 cyfr tylko, więc powinno nie być problemów. Ale pierwsze zrobię te dwie jednocześnie 😉

Link do komentarza
Share on other sites

Acha, czyli wyświetlasz na razie jedną cyfrę bez przełączania. I tak układ wygląda już bardzo groźnie 🙂

Oporników 480Ω nie ma szeregu więc upewnij się (zmierz?) co tam masz naprawdę. Pytałem o częstotliwość przełączania cyfr a nie taktowania procesora, ale jeśli tego nie robisz to pytania nie było.

Wyświetlanie statyczne jednej cyfry nie potrzebuje tranzystorów: wspólną elektrodę (katodę) jednego wyświetlacza podłączasz do masy a 8 segmentów sterujesz przez oporniki wprost z procesora.

Dobra, daj znać gdy ruszą obie cyfry.

Link do komentarza
Share on other sites

Z pomocą napisałam to:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define SEG_PORT PORTB
#define SEG_DIR DDRB
#define SEG_A 4
#define SEG_B 3
#define SEG_C 1
#define SEG_D 6
#define SEG_E 2
#define SEG_F 5
#define SEG_G 0
#define SEG_H 7

#define DIG_PORT PORTC
#define DIG_DIR DDRC
#define DIG_1 0
#define DIG_2 1

#define MUX_TIME 1

char tab_seg[] =
{
   _BV(SEG_A) | _BV(SEG_B) | _BV(SEG_C) | _BV(SEG_D) | _BV(SEG_E) | _BV(SEG_F),    // 0
   _BV(SEG_B) | _BV(SEG_C),                                                        // 1
   _BV(SEG_A) | _BV(SEG_B) | _BV(SEG_G) | _BV(SEG_D) | _BV(SEG_E),                 // 2
   _BV(SEG_A) | _BV(SEG_B) | _BV(SEG_C) | _BV(SEG_D) | _BV(SEG_G),                 // 3
   _BV(SEG_F) | _BV(SEG_G) | _BV(SEG_B) | _BV(SEG_C),                              // 4
   _BV(SEG_A) | _BV(SEG_F) | _BV(SEG_G) | _BV(SEG_C) | _BV(SEG_D),                             // 5
   _BV(SEG_F) | _BV(SEG_G) | _BV(SEG_E) | _BV(SEG_A) | _BV(SEG_C) | _BV(SEG_D),                                // 6
   _BV(SEG_A) | _BV(SEG_B) | _BV(SEG_C),                               // 7
   _BV(SEG_F) | _BV(SEG_G) | _BV(SEG_E) | _BV(SEG_D) | _BV(SEG_C) | _BV(SEG_B) | _BV(SEG_A),                               // 8
   _BV(SEG_F) | _BV(SEG_G) | _BV(SEG_B) | _BV(SEG_A) | _BV(SEG_C) | _BV(SEG_D),                                // 9


};

char dot, i;
volatile int tim_multiplex = -1;
volatile int tim_digit = -1;
int dig1, dig2;

void set_7seg(){
   static char current_dig = 1;

   if (current_dig == 1 && tim_multiplex >= MUX_TIME) {
       DIG_PORT = _BV(DIG_1);
       SEG_PORT = tab_seg[dig1];
       tim_multiplex = 0;
       current_dig = 2;
   }

   if (current_dig == 2 && tim_multiplex >= MUX_TIME) {
       DIG_PORT = _BV(DIG_2);
       SEG_PORT = tab_seg[dig2];
       tim_multiplex = 0;
       current_dig = 1;
   }
}


int main(void)
{

   // 8-bit TimerX config
   TCCR0B |= (1<<CS00) | (1<<CS01);  // set prescaler = 64 ---> please check proper values in PDF
   TCCR0A |= (1<<WGM01); // set CTC mode ---> please check proper values in PDF
   OCR0A  = 124;  // every  [ 1 ms ]
   TIMSK0  |= (1<<OCIE0A);     // enable CompareX interrupt

   sei();


   SEG_PORT = 0xFF;
   SEG_DIR = 0xFF;

   DIG_PORT = 0x00;
   DIG_DIR = (1 << DIG_1) | (1 << DIG_2);
   dig1 = 0;
   dig2 = 0;
   dot = 0;

   // Start multiplexing
   tim_multiplex = 0;

   // Start counting
   i = 0;
   tim_digit = 0;
   while(1)
   {

       if (tim_digit >= 124)
       {
           tim_digit = 0;
           i++;
           if (i > 9) {
               i = 0;
               dig1++;
           }
           if(dig1 > 9) dig1 = 0;
           dig2 = i;
       }
       set_7seg();
   }

}

// Timer0 compareA interrupt
ISR( TIMER0_COMPA_vect ) {
   if (tim_multiplex >= 0) ++tim_multiplex;
   if (tim_digit >= 0) ++tim_digit;
}

Jeśli masz jakieś uwagi to chętnie posłucham. A jak nie to koniec postu. Dziękuje za pomoc :

__________

Komentarz dodany przez: Treker

Na przyszłość pamiętaj, aby umieszczać programy bezpośrednio w treści wiadomości. Teraz poprawiłem za Ciebie 😉

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.