Elektroda.pl
Elektroda.pl
X
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega16 - Wyświetlacz LED 74HC164 74HC595

02 Kwi 2013 20:27 3171 15
  • Poziom 26  
    Witam

    Czy Atmega16 może nie radzić sobie z multipleksowaniem wyświetlacza LED 240x8? Multipleksowanie od lewej od prawej odpada bo słabo świeci i powstają 'duszki' a przy multipleksowaniu od góry do dołu przy 120x8 jest wyśmienicie ale przy 240x8 Mega nie wydala, wyświetlacz irytująco miga. Wsuwanie niestety odbywa się przy pomocy 74HC164 :(. Kod dostosowany do przemiatania od lewej do prawej (pierwsze założenie) dlatego taka tablica a nie inna.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Tablicy nie przerobię bo już powstało 21 efektów pod ten model...

    Jeszcze pytanie... dlaczego 74HC595 jest podatna na ... uziemianie? kiedy dotknę scalaka lub machnę blisko niego ręką to gubi wiersze a po oddaleniu się wszystko wraca do normy. Luty sprawdzałem, zasilanie grubymi kablami poprowadziłem i dołożyłem kondensatory, ale nadal to samo.
  • PCBway
  • Poziom 39  
    Dane do HC164 powinieneś wysyłać przez SPI. Jeśli HC595 zmienia stany pod wpływem zbliżenia dłoni to znaczy że piny które nie powinny "wisieć w powietrzu" jednak wiszą.
  • Specjalista - Mikrokontrolery
    Jeśli użyjesz sprzętowego SPI, to bez problemu nadążysz. Z programowym też powinno od biedy nadążyć, pod warunkiem, że napiszesz to przyzwoicie, nie tak jak jest teraz.

    Wychodząc z wyliczeń - 240 pikseli * 8 wierszy to prawie 2000 pikseli. Przy 300 Hz mamy 600000 pikseli na sekundę - przy 16 MHz i dobrym stylu programowania jakoś nadąży nawet przy programowym SPI. Zresztą można zjechać z częstotliwością odświeżania - ostatecznie nawet o połowę (150 Hz).
  • PCBway
  • Poziom 26  
    Wszystko fajnie ale ja potrzebuję sprzętowy spi do pobierania danych z PC. Ma czuwać i gdy nadejdzie impuls przerwać program i przełączyć się w tryb odczytu. W powietrzu miałem MR więc już poprawione, OE mam do proca wpięty i ustawiony na LOW. 595 działa już prawidłowo. Przy 240x8 delikatnie pulsuję... ale mnie to irytuję :). Jest taktowany 16Mhz. Wykorzystany jeden timer. Wyświwtlam w pętli głównej aby uniknąć przesunięcia ew. efektu podczas wyświetlania. Zadeklarowałem na początku funkcji zmienne ale dalej tak samo.
  • Specjalista - Mikrokontrolery
    To weź mikrokontroler, który się do tego nadaje - z dwoma SPI. Tak to jest, kiedy projekt zaczyna się od końca, czyli od wyboru procesora.

    Wyświetlanie w pętli głównej nie ma prawa działać poprawnie - to podstawowy błąd, który generuje różne ciekawe "efekty" na wyświetlaczu. Przynajmniej przełączanie wierszy musisz zrobić w przerwaniu timera, idealnie 2400 Hz, może być nieco mniej.
  • Poziom 26  
    efekt przepycha mi dane z bufora IN do bufora OUT i namyślając się nie ma żadnych podstaw aby w timerze nie wsadzić wyświetlania. Zaraz napiszę wyświetlanie dla TIMER0. Powiedz czy sposób wyświetlania może pozostać? Pierwszą pętle do kasowania stanów musiałem zrobić ponieważ potrzebuję wygasić na czas wsunięcia a powstawał jakiś kosmos bez tego... no chyba że skorzystać z MR zamiast OE które źle wg. mnie działa (artefakty przy próbie użycia i odciążenia programu z "FORów".)
  • Specjalista - Mikrokontrolery
    Nie potrzebujesz wygaszać na czas wsuwania, bo w HC595 masz dwa rejestry - właśnie po to. Natomiast samo wsuwanie trzeba zrobić szybciej - abo na SPI, albo odchudzić kod.
  • Poziom 12  
    To może zamiast łączenia się z kompem po SPI wykorzystaj UART, a SPI zostanie Ci na rejestry przesuwne.
  • Poziom 26  
    Tak ale wsuwam aż 240 bitów... ale na 74HC164 czyli choć bardzo to mi nie po drodze bo duży wyświetlacz to muszę wyłączyć wiersz. Wiersze załączam 74HC595 aby mniej kabli doprowadzało sygnał. Powinno być na odwrót... no cóż nie ja to projektowałem. Stąd też problemy. 2500Hz TIMER0 i mamy nadal piękną migaczkę ;). W sumie może być i UART ;). Ale czy SPI coś pomoże? Pobawię się lutownicą i przerobię układ a domyślam się że będzie jak z T0. Co do timera jak ma on zostać to muszę efekty zaflagować aby czekały na wyświetlenie bo kiedy są w pętli głównej to wyprzedzają timer i robią jeszcze lepszy efekt :D. Zasada prosta programu: Jest Bufor1 do którego ładuję znaki i dokonuję obróbki ew ekstra znaczników (aby pogrubić tekst, dodać czas, datę, temp), Bufor1 przetwarzany jest między efektem a wyświetlaniem skokowo aby nie zaburzać pracy całego programu, Bufor1 przepisuję do Bufor2.
    Efekt jest przetwarzany w pętli lub tylko fadein do Bufora_out(on jest bezpośrednio pokazywany na wyświetlaczu). Po załadowaniu animacji. W locie już podczas animacji tworzy się Bufor1 i przepisuję Bufor2 do OUT w timerze (w celu aktualizacji czasu/temp). KIedy ma wejść następny napis/grafika zostaję Bufor1 przepisany do Bufor2 i zapętla się ten chaos :).
  • Specjalista - Mikrokontrolery
    Czyli masz ewidentny błąd w projekcie sprzętu, bo wsuwanie trwa długo i wskutek zastosowanie niewłaściwego układu musisz wygaszać wiersz na czas wsuwania. Popraw błąd w projekcie sprzętu - oprogramowaniem tego nijak nie obejdziesz, bo transmisja zawsze będzie zajmowała znaczącą część całego czasu pracy.

    Musisz mieć 595, i do kolumn, i do wierszy.
  • Poziom 26  
    no cóż jakoś to świeciło...nie ja to wymyśliłem niestety... dziś mój perfekcjonizm zadecydował ;).... kupiłem ponad 30 74HC595 i będę montował na osobnej pcb do której będą dochodzić taśmy na złączach IDC. Wsuwać myślę będę wszystko jedną szyną tz. na końcu transferu danych kolumn dołączę 8 bitów od wierszy. Trzymać kciuki :).
  • Poziom 26  
    Wyświetlacz ruszył. Główny problem to były złe fusy... no ale człowiek całe życie się uczy... obecnie wyświetlacz troszeczkę przerobiłem. Chciałem odciążyć ile się da sterownik:

    Ekran ma na kolumnach 74hc595 oraz jedną sztukę na wierszu. Układy na wieszczach zostały rozdzielone na 5 osobnych bloków danych co pozwala mi jednocześnie wsuwać po 48 bitów oraz na końcu 8 bitów osobo na wiersze. Udało mi się wszystko zmieścić w kablu 10-cio żyłowym zakończonym wtykiem RS.

    Kolejno sygnały :
    +12, GND, 5x DATA, 1xLATCH, 2xCLOCK;

    Ze względu na spadki nie ciągnę 5V z zasilacza tylko 12V. Kabel połączeniowy ma ponad 20m i zasilanie przysiada przy pełnym zapaleniu matrycy.

    Procek robi cuda ale tym się pochwale jak rozważę z Wami jeden problem....

    Dlaczego taktować zegar matrycy na 2500hz? Obecnie ustawiony mam timer na 400hz i nic nie mruga. Druga sprawa to jaki powinno być napięcie zasilania bo trochę boję się o grzejące kolumny. Dajmy na to niech coś się stanie i ekran zaświeci się cały za długo.

    Ekran ma 8x240 diod z tym że w każdym wierszu mam nie jedną diodę a dwie w szeregu. Diody zwykle zasila się 5V prądem 20mA co daje nam 10V z tym samym prądem dla dwóch. Zasilanie samych ledów to 12V z ATXa. Pod obciążeniem czyli przy pełnym zaświeceniu mam 11V na zasilaczu (jest mocno obciążony bo buczy zdrowo). Kolumna niech pobiera cała 160mA jak dobrze myślę. Każda kolumna ma po tranzystorze na kolumnę on się grzeje ale ma 300 lub 500mA bo temperatura jest w normie. Grzeją się oporniki dość mocno. Coś ok. 40-50C bo parzą. Z prawa ohma na kolumnę dla 12V wypada jakiś 75Ohm rezystor. Idę o zakład że będzie tam pewnie 100Ohm. Oryginalne zasilanie miało jakieś 14V ale było mocno niestabilne. Zastosowane oporniki 0,25W... a mi jakoś wychodzi że odkłada się na nim jakieś... ponad 1W?

    Jak obliczyć wypełnienie diody dla danej częstotliwości?
  • Poziom 1  
  • Poziom 26  
    Mógłbyś przybliżyć mi jakieś wzory czy też sposoby obliczeń wypełnienia, częstotliwości, czasu. Jak sterować jasnością? Wiem PWM ale mnie by zależało na klarownej informacji w dwóch słowach a nie książek bo czasu mam mało już na to świecidełko :D.
  • Specjalista - Mikrokontrolery
    Powyżej masz już napisane sporo o częstotliwościach odświeżania - optymalnie 300 Hz dla całego wyświetlacza, a kolejne wiersze wyświetlasz tyle razy częściej, ile jest wierszy (przy 8 wierszach - 2400 Hz). Jeśli masz 8 wierszy, to każdy wiersz świeci przez 1/8 czasu, co oznacza, że można nieco przekroczyć nominalny ciągły prąd diody (3..4 krotnie, ale nie 8-krotnie), bo prąd nie płynie przez nią ciągle. Spadek napięcia na czerwonej diodzie małej mocy wynosi około 2 V. Dalej do obliczeń wystarcza już tylko logika i prawo Ohma.
  • Poziom 26  
    Jeszcze dopieszczam sofcik i dodaję funkcję więc spoko. Ustawiłem 2400Hz ale musiałem być zmuszony wyłączyć wyświetlacz na czas transmisji RS-232 bo mi się timer wcinał gdzie nie powinien :D. W pocku dwa timery się kręcą, Uart, I2C, chodzi spoko nie wiesza się. Postawiłem Watchdog-a i pilnuję pętli wyświetlania. Efektów ponad 15. Programowanie czasu postoju tekstu, szybkości efektu, samego efektu i tekstu do pamięci.

    Link


    Dodano po 2 [godziny] 57 [minuty]:

    Jedna rzecz mnie tylko denerwuję... dlaczego jeden wiersz ten na samym dole może jaśniej świecić? Mosfety te same, wartości podciągnięć oraz rezystorów od ULN2803 te same. Owszem mosfet jest zaraz na linii zasilania i bezpośrednio wychodzi na wiersz ale też przedrutowałem resztę i dalej to samo. Mosfety to IRF5305. Od ULN jest 470Ohm a na mosfecie 1k. Zdarzają się też jakieś drobne duszki? Wolne tranzystory?