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

[Atmega8][bascom] Sterownik 160 diod led.

neo_84 02 Wrz 2008 10:06 9433 43
REKLAMA
  • #1 5498678
    neo_84
    Poziom 15  
    Witam chciałem zrobić sterownik na atmega8 do diod tzn mam 160 diod led i chciałbym nimi sterować przez port rs232
    sterowanie mniejwiecej pasuje mi takie : 1001110001111.....
    1-dioda świeci, 2-nie świeci 3- nie świeci 4- świeci ...itd

    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600

    dim a as string*160
    input a

    Właśnie tutaj zaczyna sie problem atmega nie ma tyle portów żeby obsłużyć 160 led wiec pasowało by jakiś dodatkowy układ tylko jaki ?
    Niewiem jak zmienną a przypisać do portów ? Może ktoś robił cos podobnego prosiłbym o pomoc
    Z góry dziekuje


    Poprawiłem tytuł:
    https://www.elektroda.pl/rtvforum/topic1015361.html
    [c_p]
  • REKLAMA
  • #2 5498787
    wdogli
    Poziom 18  
    Witam.
    Jeśli masz za mało nóżek to możesz zastosowac jakiś expander na przykład PCF8574. Za jego pomocą z dwóch nóżek (I2C) robisz 8 a do jednej szyny I2C możesz podłączyc 9 takich kostek więc 8*9=72. Czyli aby podłączyc 160 diod potrzeba 3 szyny I2C i na dwóch szynach po 9 kostek i na jednej 2 kostki. Jednak takie rozwiązanie ma jedną wadę a mianowicie koszt. Jedna taka kostka kosztuje około 5-7 PLN czyli komplet będzie kosztował 100-140 PLN.
    Może są jakieś inne sposoby.
    Ja znam taki :)
    Pozdrawiam
  • #4 5498851
    Pituś Bajtuś
    Poziom 28  
    wdogli napisał:
    Jednak takie rozwiązanie ma jedną wadę a mianowicie koszt. Jedna taka kostka kosztuje około 5-7 PLN czyli komplet będzie kosztował 100-140 PLN.

    CD4094 kosztuje poniżej złotówki. Do wysterowania 160 ledów potrzeba ich 20. Koszt < 20zł.
  • REKLAMA
  • #5 5498865
    neo_84
    Poziom 15  
    a ten rejestr sipo jest tańszy ? pasował by układ żeby miał więcej niż 8 nie ma jakiś układów które miał by po wiecej niz 20 ? bo tak sobie myśle czy np z kilku atmega8 by nie zrobił wkoncu jest 23 wyjscia i cena w granicach 4 zl co o tym myslicie można by to w taki sposób zrobic ? w koncu było by 8 układów a nie 20 ;) no chyba ze ktos jednak zna jakis układ który ma powyrzej 23 wyjsc i wmiare tani...
  • #7 5499363
    kedzi1
    Poziom 18  
    Dlaczego nikt nic nie napisał o multipleksie? Ja jak kiedyś robiłem płynący napis na ledach to wierszami sterowałem z portu 8 bitowego przez driver prądowy ULN... a kolumny z dekoderów 4 na 16 uruchamianych kolejno z dekodera 3 na 8 dawało to maksymalnie 8x16x8 czyli 1024 ledy. A sterowanie to bajka na jeden port wystaniasz adresy kolejnych oktetów (wystarczy liczbę zwiększac o 1) a na drugi kolejne komórki pamięci w których znajdowac się będzie obraz węża. Tanio i prosto. Moja matryca sterowana w ten sposób miała właśnie wymiary 8x80, czyli te twoje 160 ledów.
  • #8 5501748
    neo_84
    Poziom 15  
    Balu masz racje atmegi trzeba zaprogramować bo samo sie to nie zrobi...
    kedzi1 może jakieś szczegóły ? :| dodaje ze sterowanie jest przez port rs232 tak jak pisałem wyżej komenda input a komputer będzie wysyłał dane co 2 minuty czyli diody maja świecić miedzy wysyłaniem danych a nie tylko zaświecić sie jak wysyła i gasnąć jak skończy wysyłanie . Prosiłbym o jakiś schemat kedzi1 i czy dało by sie tak to zrobić ?
  • REKLAMA
  • #10 5501786
    wdogli
    Poziom 18  
    Witam.
    Tutaj masz artykuł z elektroniki z układem ULN2003 do sterowania diodami Link.
    Na tej podstawie powinieneś sobie poradzic.
    Pozdrawiam
  • #11 5501789
    kulmar
    Poziom 31  
    neo_84 napisał:
    Witam chciałem zrobić sterownik na atmega8 do diod tzn mam 160 diod led i chciałbym nimi sterować przez port rs232
    sterowanie mniejwiecej pasuje mi takie : 1001110001111.....
    1-dioda świeci, 2-nie świeci 3- nie świeci 4- świeci ...itd


    Nie rozumiem, po co do sterowania zaprzęgać układ RS232 ? Jeśli transmitowałbyś dane z procesora do odległego układu, to tak, to ma sens. Ale jeśli chcesz bezpośrednio sterować diodami, to jest wiele różnych rozwiązań Twojego problemu. Ponieważ napisałeś, że odświeżanie danych bedzie się odbywać nie częściej, niż co 2 minuty, to ja np. zastoswałbym 20 rejestrów szeregowych serii 74HC164. W TME cena takiego układu to ok. 65groszy. I w zależności od tego, ile nóżek procesora możesz przeznaczyć w swojej aplikacji na sterowanie diodami możesz stosować różne konfiguracje połączenia tych rejestrów do procesora.

    Pozdrawiam
    Mariusz
  • REKLAMA
  • #13 5507616
    neo_84
    Poziom 15  
    Na rejestrach dużo miejsca by zajeło :| jednak chyba najlepszym rozwiązaniem zrobić to na atmega8 tylko nie wiem jak zmienna A podzielić tzn jest przypisane 160 znaków 011001... i jak teraz z tej zmiennej wyciągnać pierwsze 20 znaków później następne 20 znaków jest jakaś taka komenda w bascom ?
    i wtedy można by wysłać pierwsze 20 zn do procka 1 później drugie 20 znaków do procka 2 itd a do komunikowania sie miedzy procesorami jest interfejs SPI ? przez 1-wire albo i2c nie zabardzo pewnie ? tylko nie wiem czy przez SPI to tylko mogą sie 2 komunikować czy jest możliwość kilku procesorów podpiąć razem ?
  • #14 5507643
    Balu
    Poziom 38  
    Z Twoim stanem wiedzy, ja bym robił na rejestrach :P Sorry ;]
    Można i po SPI i po I2C, po 1-wire też się da - tylko trzeba sobie napisać samemu komunikację;-)

    Ogółem, IMHO kilka procków = na prawdę głęboka woda... patrząc na to co piszesz...bardzo głeboka...
  • #15 5507651
    wd40
    Poziom 21  
    160 diod można wysterować 18-oma liniami I/O bez żadnych dodatkowych układów. No chyba, że chodzi o FLUXy.
  • #16 5508225
    orson-pl
    Poziom 17  
    Jak zrobić 160 na 18 wyjściach - nie wiem, ale 81 dałoby radę. Do 9 wyjść podłączasz np. rzędy anod, a do pozostałych 9 - kolumny katod. Potem po kolei ustawiasz stan wysoki na każdym z rzędów, a pinami od kolumn ustawiasz które mają się świecić (stan niski - świeci się, stan wysoki - nie świeci). Przy odpowiednio szybkim przełączaniu pewnie nie zauważysz różnicy.
  • #17 5508288
    mog123
    Poziom 15  
    Do wysterowania 160 diod, wystarczy 14 linii I/O, wykorzystuje sie w tym logike trojstanowa. Dzieki tej metodzie multipleksowania mozesz wysterowac n*(n-1) diod.


    [Atmega8][bascom] Sterownik 160 diod led.

    I tabelka to do obsługi kazdego leda z osobna:

    [Atmega8][bascom] Sterownik 160 diod led.

    1 to ustawieniestanu wysokiego na pin, 0 to podanie stanu niskiego, natomiast X to podanie trzeciego stanu, stanu wysokiej impedancji w ktorym pin sie blokuje, robimy to poprzez ustawienie pinugo jako wejscia!
    Gdy dodajesz kolejne piny, coraz szybciej zwieksza Ci sie ilosc ledow. Z jednej atmegi16 maxymalnie mozesz wysterowac dokladnie 992 ledy(32*31). Mam nadzieje ze pomoglem ;)
  • #18 5508304
    neo_84
    Poziom 15  
    balu mówisz ze głęboka woda masz racje nie znam 1-wire i i2c od zaplecza ale chyba pod spi nie nie było by tak trudno ??? ale skoro mówisz ze głęboka to sie nie będę pchał.... ale mam lepszy pomysł zaprogramować atmege jako rejestr SIPO i wtedy wystarczy mi 8 układów a nie 20 ! tylko jak to zrobić w bascom ? i chyba dalej pasowało by ze zmiennej "A" wyciągnać pojedynczo bity jest jakaś komenda do tego w bascomie ? żeby ze zmiennej string wyciągać pokolei znaki ?
  • #19 5508379
    szelus
    Poziom 34  
    :arrow: mog123
    Pomysł ciekawy, ale w ten sposób możesz zapalić chyba tylko jednego LED-a na raz? Przy multipleksowaniu 1:160, to chyba nie będą zbyt jasno świecić...
  • #20 5508419
    mog123
    Poziom 15  
    multipleksowac i tak musisz ;) jak dasz kwarc 16MHz to nie bedzie tragicznie. Pozatym, mozesz zapalac te zupelnie przy uC na zmiane w sensie 10101010 a potem 01010101. Po prostu trzeba to dobrze wykombinowac. Wg. mnie jest to najlepszy sposob pod katem ekonomicznym, nic tylko ledy i na dodatek malo I/O zuzywasz
  • #21 5508452
    szelus
    Poziom 34  
    Hmm... Jak masz 20mA prąd diody, 160 diód i zapalasz tylko jedną na raz, to efektywny prąd każdej to tylko 125 uA. Tak, jakbyś przy 5V dał w szereg rezystor 27k.
    To ja wątpię, czy będzie coś widać... Znaczy, coś może będzie...
  • #22 5508479
    mog123
    Poziom 15  
    Zauwaz ze czestotliwosc tu ma duzo do gadania. przy 1MHz faktycznie masz 125uA, przy 16MHz juz 2mA
  • #23 5508487
    robi667
    Poziom 18  
    Tak zastanawiam się nad wykorzystaniem przedstawionej przez mog123 logiki trójstanowej dla diod RGB, ale przez wspólną katodę/anodę już nie jest tak kolorowo... tzn. kolorowo jest, bo RGB, ale nie jest wesoło. ;)
    @mog123, może masz jakiś zaskakujący schemat na diody RGB? :>
  • #24 5508535
    mog123
    Poziom 15  
    Jak chcesz na diody RGB to sam pokombinuj :P
  • #25 5508543
    robi667
    Poziom 18  
    A istnieją diody RGB z 6 wyprowadzeniami, bez wspólnej a/k? Bo już nie raz by mi się taka przydała, a po Twoim poście w szczególności. ;)
  • #27 5508635
    wd40
    Poziom 21  
    szelus napisał:
    Hmm... Jak masz 20mA prąd diody, 160 diód i zapalasz tylko jedną na raz, to efektywny prąd każdej to tylko 125 uA. Tak, jakbyś przy 5V dał w szereg rezystor 27k.
    To ja wątpię, czy będzie coś widać... Znaczy, coś może będzie...

    Obecnie diody są na 2mA. Chłodzony procek wyciągnie może 50mA na parę pinów. Jeżeli dioda wytrzyma takie szpilki to można w ten sposób zasilić tylko 25 diod. Przy 4 pinach da się obsłużyć 12 diod, przy 5-u 20-a i w zasadzie biorąc pod uwagę powyższe ograniczenia prądowe to jest kres możliwości sterowania diod wyjściami 3-stanowymi.

    robi667 napisał:
    Tak zastanawiam się nad wykorzystaniem przedstawionej przez mog123 logiki trójstanowej dla diod RGB, ale przez wspólną katodę/anodę już nie jest tak kolorowo... tzn. kolorowo jest, bo RGB, ale nie jest wesoło. ;)
    @mog123, może masz jakiś zaskakujący schemat na diody RGB? :>


    RGB steruje się poprzez 4 wyjścia - do schematu dorysuj dodatkowy pin i połącz 2 diodami z każdym z pozostałych pinów. Czyli każdy pin ma połączenie diodowe z 3 innymi, a tyle potrzeba do wysterowania RGB. W ten sposób wysterujesz 4 diody RGB.

    orson-pl napisał:
    Jak zrobić 160 na 18 wyjściach - nie wiem, ale 81 dałoby radę.

    160 da się teoretycznie (!) wysterować wyjściami 2-stanowymi (nie 3 jak wyżej). Metoda jest analogiczna, efekty wizualne trochę gorsze a oprogramowanie tego wręcz makabryczne. Niestety i tutaj występują ograniczenia prądowe, więc i ta metoda nie jest idealna.

    Pozostaje więc metoda standardowa multiplexowania.

    Reasumując: istnieją 2 ograniczenia:
    1. prądowe - jeżeli procek wytrzyma 50mA/pin to możliwe jest zasilanie max. 25*25 diod.
    2. ilość pinów

    160 SuperLED da się wysterować standardowo na pewno poprzez 26 pinów.
  • #28 5508823
    szelus
    Poziom 34  
    wd40 napisał:

    Obecnie diody są na 2mA. Chłodzony procek wyciągnie może 50mA na parę pinów.

    Już to widzę - atmega świetnie wygląda z chłodzeniem wodnym podświetlonym na niebiesko ;)
    Weź się nie wygłupiaj. Oszczędność na driverach (czy tranzystorach) w tym przypadku może się szybko zemścić. To są groszowe oszczędności.

    P.S. Wiem, że są diody na 2mA. Ale one też nie będą zbyt jasno świecić przy 125 uA.
  • #29 5508968
    wd40
    Poziom 21  
    szelus napisał:

    Już to widzę - atmega świetnie wygląda z chłodzeniem wodnym podświetlonym na niebiesko ;)

    Nie wiedziałeś, że mikrokontrolery też można podkręcać? To jest właśnie tylko kwestia chłodzenia.
    szelus napisał:

    Weź się nie wygłupiaj. Oszczędność na driverach (czy tranzystorach) w tym przypadku może się szybko zemścić. To są groszowe oszczędności.

    Raczej trudno byłoby zrealizować driver 3-stanowy sterowany jedynie jednym wejściem 3-stanowym.
    Atmega8 z wejściem szeregowym może maksymalnie wysterować jedynie 121 diod w standardowym multiplexowaniu.

    szelus napisał:

    P.S. Wiem, że są diody na 2mA. Ale one też nie będą zbyt jasno świecić przy 125 uA.

    Więc policzyłem wyżej jakie są warunki zasilania diod - Atmega8 może jednym pinem średnim prądem 2mA zasilić jedynie 20-25 diod (20*2mA=40mA - wartość katalogowa).
    Co się tak uczepiłeś 125uA - przecież nikt nie będzie tak ich zasilał.
  • #30 5510705
    neo_84
    Poziom 15  
    Namyśliłem sie i wybieram rejestr SIPO to najprostsze rozwiązanie inne sa bardziej skomplikowane. Wiec powtarzam pytanie jak ze zmiennej STRING wyciągnać pojedyncze znaki bo inaczej nie wiem jak wysłać bity do rejestrów , i czy ma ktoś pomysł jak zaprogramować atmege jako rejestr SIPO a może sa jakieś rejestry które maja więcej niż 8 wyjść...
    chodzi mi o to żeby nie było zadużo układów na płydce
REKLAMA