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

[ATMEGA 8][BASCOM] Tablica informacyjna LED

hiv_sick 03 Gru 2008 23:13 35634 106
  • #1 5815286
    hiv_sick
    Poziom 22  
    witam, mam do zrobienia jako prace dyplomową tablicę informacyjną LED. Zbudowałem już matrycę, która składa się z 24 kolumn i 8 wierszy diod LED, a także sterownik do niej. W matrycy diody led połączone są multipleksowo.

    [ATMEGA 8][BASCOM] Tablica informacyjna LED

    W sterowniku działa mikrokontroler atmega8 połączony magistralą I2C z trzema 8-bitowymi ekspanderami PCF8574, które odpowiednio połączone są poprzez klucze tranzystorowe z anodami matrycy (kolumny). Port D mikrokontrolera połączony jest z ośmioma wierszami matrycy.

    [ATMEGA 8][BASCOM] Tablica informacyjna LED

    Tablica LED ma działać w taki sposób, że ma wyświetlać napisy, przesuwając je od prawej do lewej strony...

    Może ma ktoś koncepcje napisania odpowiedniego programu sterującego ową matrycą?

    Czy rezonator kwarcowy 8MHz bedzie odpowiedni? może wybrać o większej częstotliwości taktowania?

    Adresy ekspanderów są następujące:

    expander 1 - 000
    expander 2 - 001
    expander 3 - 010

    pozdrawiam
  • Pomocny post
    #2 5815385
    dawid512
    Poziom 32  
    Multipleksujesz to jak zwykłe 7 segmentowe wyświetlacze LED. Mam nadzieję że wiesz na czym to polega. W ruch idzie timer który podczas przerwania zapala jedną kolumnę i wpisuje do portu odpowiednią wartość. Kiedy nie występuje przerwanie to kolumny zostają wygaszone. I tak w kółko z taką częstotliwością żeby oko ludzkie nie było w stanie tego zauważyć. W twoim przypadku musisz wysłać na PCF-a odpowiednią wartość co będzie odpowiadało zapaleniu kolejnego segmentu.
  • #3 5815405
    hiv_sick
    Poziom 22  
    ale nie wiem jak do tego zaprzęgnąć timer, moze jakis przyklad?

    Dodano po 1 [minuty]:

    jakie polecenia wysylac do pcfów aby zapalic dany segment wiem...
  • #4 5815434
    dawid512
    Poziom 32  
    Proszę bardzo:
    Config Timer0 = Timer , Prescale = 256
    On Timer0 Odmierz_8ms    
    
    Enable Interrupts                                          
    Enable Timer0                                              
    Counter0 = 6     
    
    ....
    
    Odmierz_8ms:
    
    Counter0 = counter0 +6
    
    .... instrukcje
    
    return
    
    
  • #5 5815484
    hiv_sick
    Poziom 22  
    ok, dzieki. napisalem (z twoją pomocą DAWID512) program, ktory bedzie zapalał kolejne wiersze od dołu do góry...heh i jest problem bo widać jak diody mrugają...czy problemem jest ustawienie timera, czy moze czestotliwość taktowania mikrokontrolera (8MHz)?
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Timer0 = Timer , Prescale = 1
    On Timer0 Odmierz_8ms
    
    Config Portd = Output
    Config I2cdelay = 0
    
    Config Scl = Portc.0                                        'konfiguracja I2C
    Config Sda = Portc.1
    
    Dim I As Byte
    Dim J As Byte
    Dim Exp1 As Byte
    Dim Exp2 As Byte
    Dim Exp3 As Byte
    Dim Pauza As Byte
    Dim K1 As Byte
    Dim K2 As Byte
    Dim K3 As Byte
    Dim K4 As Byte
    Dim K5 As Byte
    Dim K6 As Byte
    Dim K7 As Byte
    Dim K8 As Byte
    
    Exp1 = 64                                                   'adres WYJSCIA expandera pierwszego
    Exp2 = 66                                                   'adres WYJSCIA expandera drugiego
    Exp3 = 68                                                   'adres WYJSCIA expadnera trzeciego
    
    Portd = 254
    
    I = 254
    
    Pauza = 0
    
    K1 = 254
    K2 = 253
    K3 = 251
    K4 = 247
    K5 = 239
    K6 = 223
    K7 = 191
    K8 = 127
    
    Do
    
       Enable Interrupts
       Enable Timer0
       Counter0 = 6
    
    
    
       Odmierz_8ms:
    
       Counter0 = Counter0 + 6
    
          For I = 1 To 8
    
             Rotate Portd , Left
    
             I2csend , Exp1 , K1
             Waitms Pauza
             I2csend , Exp1 , K2
             Waitms Pauza
             I2csend , Exp1 , K3
             Waitms Pauza
             I2csend , Exp1 , K4
             Waitms Pauza
             I2csend , Exp1 , K5
             Waitms Pauza
             I2csend , Exp1 , K6
             Waitms Pauza
             I2csend , Exp1 , K7
             Waitms Pauza
             I2csend , Exp1 , K8
             Waitms Pauza
             I2csend Exp1 , 255
    
       I2csend , Exp2 , K1
       Waitms Pauza
       I2csend , Exp2 , K2
       Waitms Pauza
       I2csend , Exp2 , K3
       Waitms Pauza
       I2csend , Exp2 , K4
       Waitms Pauza
       I2csend , Exp2 , K5
       Waitms Pauza
       I2csend , Exp2 , K6
       Waitms Pauza
       I2csend , Exp2 , K7
       Waitms Pauza
       I2csend , Exp2 , K8
       Waitms Pauza
       I2csend Exp2 , 255
    
       I2csend , Exp3 , K1
       Waitms Pauza
       I2csend , Exp3 , K2
       Waitms Pauza
       I2csend , Exp3 , K3
       Waitms Pauza
       I2csend , Exp3 , K4
       Waitms Pauza
       I2csend , Exp3 , K5
       Waitms Pauza
       I2csend , Exp3 , K6
       Waitms Pauza
       I2csend , Exp3 , K7
       Waitms Pauza
       I2csend , Exp3 , K8
       Waitms Pauza
       I2csend Exp3 , 255
    
       Next I
    
    Return
    
       For I = 1 To 8
    
          Rotate Portd , Left
    
       Next I
    
    Loop
    
    End
    


    Dodałem znaczniki [code]
    [zumek]
  • #6 5815798
    seba_x
    Poziom 31  
    spróbuj przyspieszyć transmisję na i2c przy użyciu "CONFIG I2CDELAY" i wywal "waitms" to nigdy nie działa tak jak trzeba. Ewentualnie zmniejsz czas przerwania 8ms .
  • Pomocny post
    #7 5816399
    dawid512
    Poziom 32  
    Zmień doświadczalnie wartość wpisywaną do timera. Zobacz czy poprawnie wyświetla ci to co chcesz. Ważne jest także żeby przerwanie nie było za długie bo wtedy może grozić to resetem uc.
  • #8 5816691
    hiv_sick
    Poziom 22  
    witam ponownie. Uzywalem polecenie config I2CDELAY =0. nic to nie dalo, napisalem tez program (bez przerwania timera), ktory bedzie przemiatał wiersze od dołu do góry. Niby przemiata, ale niestety robi dalej to wolno, tzn widać że diody migają...moze to wina rezonatora? wpięty jest 8MHz...

    moze ktos napisze jak zrobic to z timerem
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Portd = Output
    Config I2cdelay = 0
    
    Config Scl = Portc.0 'konfiguracja I2C
    Config Sda = Portc.1
    
    Dim I As Byte
    Dim J As Byte
    Dim Exp1 As Byte
    Dim Exp2 As Byte
    Dim Exp3 As Byte
    Dim K1 As Byte
    Dim K2 As Byte
    Dim K3 As Byte
    Dim K4 As Byte
    Dim K5 As Byte
    Dim K6 As Byte
    Dim K7 As Byte
    Dim K8 As Byte
    
    Exp1 = 64 'adres WYJSCIA expandera pierwszego
    Exp2 = 66 'adres WYJSCIA expandera drugiego
    Exp3 = 68 'adres WYJSCIA expadnera trzeciego
    
    Portd = 254
    
    I = 254
    
    K1 = 254
    K2 = 253
    K3 = 251
    K4 = 247
    K5 = 239
    K6 = 223
    K7 = 191
    K8 = 127
    
    Do
    
    Rotate Portd , Left
    
    I2csend , Exp1 , K1
    
    I2csend , Exp1 , K2
    
    I2csend , Exp1 , K3
    
    I2csend , Exp1 , K4
    
    I2csend , Exp1 , K5
    
    I2csend , Exp1 , K6
    
    I2csend , Exp1 , K7
    
    I2csend , Exp1 , K8
    
    I2csend Exp1 , 255
    
    I2csend , Exp2 , K1
    
    I2csend , Exp2 , K2
    
    I2csend , Exp2 , K3
    
    I2csend , Exp2 , K4
    
    I2csend , Exp2 , K5
    
    I2csend , Exp2 , K6
    
    I2csend , Exp2 , K7
    
    I2csend , Exp2 , K8
    
    I2csend Exp2 , 255
    
    I2csend , Exp3 , K1
    
    I2csend , Exp3 , K2
    
    I2csend , Exp3 , K3
    
    I2csend , Exp3 , K4
    
    I2csend , Exp3 , K5
    
    I2csend , Exp3 , K6
    
    I2csend , Exp3 , K7
    
    I2csend , Exp3 , K8
    
    I2csend Exp3 , 255
    
    Loop
    
    End
    
    


    Dodałem znaczniki [code]
    Kod umieszczamy w znacznikach [code] - proszę o tym pamiętać.
    [zumek]


    Dodano po 2 [godziny] 14 [minuty]:

    zmienilem kwarc na 12MHz, dalej to samo...cos mi się wydaje ze problem tkwi w magistrali I2C...
  • #9 5817800
    KJ
    Poziom 31  
    Problem jak dla mnie jest oczywisty. I2C w bascomie jest stanowczo za wolne do takich rzeczy. Trzeba będzie zmienić ten układ raczej. Albo napisać soft w C lub assemblerze.

    Zaraz chwila ... czy mi się wydaje czy ty masz wsp. multiplexu 1/24 do tego po i2c ... To nie ma prawa szybko działać Proponuje zrobić współczynnik 1/8 - pomiędzy linie a procek wstaw ULN2803 i steruj tak: wpisujesz w i2c dane dla pierwszej linii i ją włączasz portem. Potem wygaszasz i wpisujesz dane dla drugiej linii po i2c włączasz 2 linie itd ....
  • #10 5817959
    Dr.Vee
    VIP Zasłużony dla elektroda
    Sprawdź w symulatorze jak długo trwa jedno polecenie I2csend. Poza tym dlaczego nie wykorzystałeś sprzętowego interfejsu I2C, tylko obsługujesz wszystko programowo?

    Zamiast "doświadczalnie" dobierać wartości timera, lepiej policz co i jak. Potrzebujesz odświeżać całą matrycę z częstotliwością 100Hz, czyli zmieniasz kolumnę 24x szybciej = 2,4kHz, czyli co ok. 400us. Maksymalna częstotliwość SCL dla układu PCF to 100kHz, do wysłania adresu + danych potrzebujesz ok. 20 bitów = 200us. Jak widać nie masz tutaj wiele rezerwy, zwłaszcza że czasem musisz wysłać dane do dwóch układów na raz.

    Gdybyś policzył to wcześniej, to nie musiałbyś się teraz głowić dlaczego nie działa :) Polecam rozwiązanie z rejestrami szeregowymi (np. '164 albo '595) - ostatnio pisałem projekt w C na '51, matryca 88 kolumn, 100Hz i wyrabiał się z dużą rezerwą przy taktowaniu 1,5MHz (1 cykl na 1 takt zegara).

    Edit: zmiana '165 na '164 :)

    Pozdrawiam,
    Dr.Vee
  • #11 5818536
    hiv_sick
    Poziom 22  
    no to tak, w bascomie jedno polecenie I2csend trwa 3139 cykli ! ;O. czyli widze, ze uklad sterownika bedzie trzeba budowac jeszcze raz ;/. Dr.Vee jak mozesz to przybliz mi temat zwiazany z tymi rejestrami szeregowymi jak wyglądałoby wtedy zapalanie na nich kolumn.

    Istnieje jeszcze mozliwosc wstawiania kodu ASEMBLERA do programu BASCOMA, moze wtedy by to szybciej zadziałało...jednak z asemblera jestem zielony...moze wy wiecie jak wygladalby kod programu asemblera, ktory by pokoleji zapalał kolumny z odpowiednią szybkośćią. pozdrawiam
  • Pomocny post
    #12 5818550
    dawid512
    Poziom 32  
    A gdyby tak wykorzystać TWI np. w C? Może I2C Bascoma jest takie wolne?
  • #13 5818567
    hiv_sick
    Poziom 22  
    TWI ???
  • Pomocny post
    #14 5818606
    dawid512
    Poziom 32  
    Tak TWI które jest sprzętowe zaś I2C to programowa interpretacja.
  • #15 5818620
    Dr.Vee
    VIP Zasłużony dla elektroda
    TWI = Two Wire Interface = sprzętowy interfejs I2C (nazwa używana przez Atmela, bo I2C jest zastrzeżone przez Philipsa). Niewiele to pomoże, chyba że obniżysz F odświeżania (obliczenia masz powyżej).

    Z rejestrem przesuwnym np 74HC164 spinasz wyjście Q7 pierwszego rejestru z wejściami A i B drugiego rejestru i tak dalej... Wejścia CP i MR wszystkich rejestrów zwierasz razem i do 2 pinów uC. Wejścia A i B pierwszego rejestru łączysz z 3 pinem uC i możesz już sterować całym szeregiem rejestrów. Do wyjść rejestrów podłączasz tranzystory kolumn i gotowe.

    Pozdrawiam,
    Dr.Vee
  • #16 5818733
    zumek
    Poziom 39  
    Do sterowania 74164, polecam interface SPI - "szybko tanio i bezboleśnie" :D

    Piotrek
  • #17 5818735
    hiv_sick
    Poziom 22  
    panie DR.VEE czy to ma wygladać tak?:

    [ATMEGA 8][BASCOM] Tablica informacyjna LED

    jezeli juz bym zbudowal to na rejestrach to jak mam to obsluzyc programowo?
  • #18 5818759
    kedzi1
    Poziom 18  
    Dlaczego nie napiszesz swojej obsługi I2C? Jak mówi się że bascom be to wszyscy krzyczą, a jak bascom już czegoś "nie umie" to sie już nie da :). Piszę bo przypomniałeś mi moją pracę dyplomową z technikum. Ja robiłem tablice z matrycą 8x80 i do tego mnóstwo 7-segmentowców. Ech... to były czasy. U mnie na wierszach był drajwer prądowy a kolumnami sterowały dekodery 4 na 16 przez tranzystory, adresowane przez jeden 3 na 8. Program dzięki temu był bardzo prosty. Bezpośrednio adresowałem każdą kolumnę jedną zmienną przepisywaną na port. Jeszcze jest kwestia czy wszystkie literki mają mieć tą samą czy różną szerokość. Beznadziejnie wygląda jak "i" zajmuje tyle co "W". Jak jesteś ambitny to dasz rade. Pisz do mnie jak bedziesz miał kłopot to pomogę.
    Jeszcze jedno, jak ja robiłem swoją pracę to też pisałem w Bascomie i jak mi się "skończyło" w połowie demo z powodu ograniczenia 2 kilo to zdecydowałem się na asm i napisałem wszystko w niecałych 2 kilobajtach. Dziś macie C i pełno gotowców z netu. Może czas nabrać dobrych przyzwyczajeń. Pracuje już 3 lata w branży i powiem że to konieczność znać C. Żaden poważny pracodawca nie kupi Ci Bascoma żebyś mógł dla niego pracować :).
  • #19 5818910
    hiv_sick
    Poziom 22  
    kedzi1: szczerze mówiąc to z C mam mało wspolnego...jezeli juz programowac w C to jaki kompilator, moze gdzies jakiś kurs w necie się znajdzie?
  • Pomocny post
    #20 5819001
    dawid512
    Poziom 32  
    Na prawdę warto zainteresować się pisaniem w C. Sam pisałe i pisze programy w Bascomie ale ostatnio większość staram się pisać w C i widzę wiele korzyści. Na początek polecam AVR STUDIO oraz kompilator WINAVR. Jeśli chodzi o kurs to jest coś takiego jak to Link. Uważaj na sbi i cbi których już się nie stosuje.
  • #21 5819089
    hiv_sick
    Poziom 22  
    hmm, jezeli mozesz i ci się chce to napisz program, który bedzie zapalał wiersze w mojej matrycy np. od dołu do góry. Jezeli zadziała lepiej w C to nic nie przerabiam w ukladzie, a biorę się za nauki języka C. jezeli napiszesz i skompiluje się u mnie, to daje 20pktów (troche skromnie ale sam duzo wiecej nie mam :P)

    W Bascomie pisalem to tak:

    
    
    K1 = 254
    K2 = 253
    K3 = 251
    K4 = 247
    K5 = 239
    K6 = 223
    K7 = 191
    K8 = 127
    
    Exp1 = 64            'adresy expanderów line out
    Exp2 = 66
    Exp3 = 68
    
    portd = 254
    
    Do
    
    Rotate Portd , Left , 1 
    
    I2csend , Exp1 , K1
    I2csend , Exp1 , K2
    I2csend , Exp1 , K3
    I2csend , Exp1 , K4
    I2csend , Exp1 , K5
    I2csend , Exp1 , K6
    I2csend , Exp1 , K7
    I2csend , Exp1 , K8
    I2csend , Exp2 , K1
    I2csend , Exp2 , K2
    I2csend , Exp2 , K3
    I2csend , Exp2 , K4
    I2csend , Exp2 , K5
    I2csend , Exp2 , K6
    I2csend , Exp2 , K7
    I2csend , Exp2 , K8
    I2csend , Exp3 , K1
    I2csend , Exp3 , K2
    I2csend , Exp3 , K3
    I2csend , Exp3 , K4
    I2csend , Exp3 , K5
    I2csend , Exp3 , K6
    I2csend , Exp3 , K7
    I2csend , Exp3 , K8
    
    Loop
    
    


    Dodano po 38 [sekundy]:

    AVR STUDIO mam :)
  • #22 5819986
    seba_x
    Poziom 31  
    Możesz spróbować użyć do transmisji i2c pinów pc.4 i pc.5 ?

    pcf8574 mają fSCL max 100khz , a gdybyś zastosował pcf8575 ? fSCL mają max 400khz.
  • #23 5820961
    Dr.Vee
    VIP Zasłużony dla elektroda
    hiv_sick napisał:
    czy to ma wygladać tak?:

    [ATMEGA 8][BASCOM] Tablica informacyjna LED

    Dokładnie tak.

    Możesz podłączyć A i B do MOSI, CLK do SCK i stosować sprzętowe SPI tak jak radzi zumek.

    Pozdrawiam,
    Dr.Vee
  • #24 5822152
    ZbeeGin
    Poziom 39  
    By użyć sprzętowego TWI nie trzeba wielkich rzeczy. Dopisuje się tylko

    $lib "I2C_TWI.LBX"

    A wszystkie procedurki nie kierują się na programowy a sprzętowy I2C-TWI. Oczywiście wszystkie CONFIGi są wymagane: CONFIG SCL, CONFIG SDA, CONFIG TWI. Inaczej nie zostaną skonfigurowane porty i preskaler.

    Programu to niestety nie przyśpieszy w stopniu takim jaki byśmy chcieli, gdyż i tak trzeba sprawdzać czy TWI jest zajęte czy nie w pustej pętli i to kilka razy. Głównym ograniczeniem jest niestety sama częstotliwość taktowania SCL i ilość bitów wysyłanych po magistrali. Trzeba pamiętać, że aby wysłać coś do każdego ekspandera tracimy w sumie 20 taktów na jeden bajt: START, SLA+W, DATA, STOP!!

    Jak i poprzednicy: I2C odstaw na bok. Skorzystaj z rejestrów przesuwających. Zamiast kostek TTL (nawet CMOS-TTL) możesz użyć CD4094, który ma zatrzaski wyjściowe - obraz nie będzie wtedy "śnieżył". Zapiszesz w rejestrach całą linię i dopiero wyślesz na wyjścia. A w czasie gdy poprzednia linia się wyświetla, zapisujesz w rejestrach nową linię. Cały trick to odpowiednie sterowanie wierszami - w szczególności ich wygaszanie przed zmianą wyświetlanej linii.
  • #25 5822554
    BoskiDialer
    Poziom 34  
    20 taktów na jeden bajt co najmniej. 3 porty po 8 wyprowadzeń, 8 wierszy, przyjmijmy odświeżanie 50Hz, i już mamy strumień danych: 20*3*8*8*50 = 192000 kilobitów/s. Oczywiście aktualizacja nie powinna być podczas wyświetlania linii, więc częstotliwość trzeba by zwiększyć i to znacznie - a i tak mamy słabe parametry. I2c zdecydowanie nie wyrobi.

    Przy rejestrach przesuwanych można też zrobić manewr z podłączeniem: wejście szeregowe każdego do osobnego wyprowadzenia procesora, wtedy zawsze mamy 8 cykli zegara, więcej operacji na bitach, mimo to średnia prędkość powinna być większa (pisząc w asm). Oczywiście połączenie szeregowo pod SPI też jest dobre.

    Dodano po 4 [minuty]:

    Zerowanie rejestrów tutaj nawet nie jest potrzebne, wystarczyło by wejście CLR sprowadzić na stałe do poziomu wysokiego (jeśli zerowanie jest stanem niskim).
  • #26 5823230
    hiv_sick
    Poziom 22  
    ZbeeGin - masz racje nie pomogło zawiele włączenie sprzętowego TWI, "obraz" nadal miga. Z tego co widze to nie powinno być lepiej nawet w C. Dlatego robie kolejny projekt sterownika...

    prosze jeszcze sprawdzic czy tak bedzie ok...

    [ATMEGA 8][BASCOM] Tablica informacyjna LED

    sterownik bedzie zbudowany z czterech rejestrów przesuwnych, ponieważ z każdego rejestru bede mogl uzyc siedmiu wyjść, ósme będzie do wysylania informacji kolejnym rejestrom. jeszcze mam pytanie jak tym wtedy sterować? bo rozumiem, że w danym czasie będe musiał zapalać daną kolumną z danymi wierszami...

    Aby zapalić diodę w pierwszym wierszu i w pierwszej kolumnie, oraz drugą diodę w drugim wierszu i kolumnie...

    [ATMEGA 8][BASCOM] Tablica informacyjna LED

    będę musiał podać stan niski na wejście AB rejestru, oraz dać stan niski na pierwszy wiersz, nastepnie podać stan wysoki na CLK (aby przesunąć wartość rejestru w prawo), jednocześnie wpisać do wiersza pierwszego jedynke logiczną, oraz zero logiczne do wiersza drugiego...o to chodzi?

    Dodano po 12 [minuty]:

    albo jeszcze lepiej zastosuje zworki, np gdybym chcial uzyc SPI :)

    [ATMEGA 8][BASCOM] Tablica informacyjna LED
  • #27 5823298
    Dr.Vee
    VIP Zasłużony dla elektroda
    Wyjście QH tak samo powinno sterować tranzystorem, jak wszystkie inne. Zapomniałeś podłączyć emitery tranzystorów...

    Zerowanie Ci się nie przyda, bo u Ciebie kolumny wyłącza się stanem wysokim. Przy włączeniu zasilania wypełniasz wszystkie rejestry jedynkami, później ustawiasz 0 na AB dajesz impuls na CLK i wysterowujesz odpowiednio wiersze. Dla drugiej (i każdej następnej) kolumny dajesz 1 na AB, impuls na CLK i wysterowujesz wiersz...

    Pozdrawiam,
    Dr.Vee
  • #28 5823395
    lord_dagoth
    Poziom 25  
    Może zainteresuje Cie mój sterownik do matrycy 20x20, bardzo łatwo można go zmodyfikować do innych wymiarów ;)

    [ATMEGA 8][BASCOM] Tablica informacyjna LED
  • #29 5824054
    hiv_sick
    Poziom 22  
    witam kazde wyjscie rejestru podłączyłem do tranzystora ktory bedzie sterował kolumnami - tak jak pisałeś DR.VEE.

    [ATMEGA 8][BASCOM] Tablica informacyjna LED

    lord_dagoth jezeli mnie przekonasz, że twój sterownik będzie lepszy to wybiorę twój - podaj kilka argumentów...a może inni się wypowiedzą na ten temat?
  • #30 5825222
    lord_dagoth
    Poziom 25  
    No nie wiem czy jest lepszy ale:
    Płytka jest ładniejsza, bo nie mam tranzystorów i związanej z nimi plątaniny ścieżek, tylko ULN'y i UDN'y. Na dodatek rejestr '595 ma zatrzask, dzięki czemu będziesz w trakcie przesuwania bitów nie będziesz miał efektu migania. Po prostu wsuniesz bity, a następnie jednym impulsem przepiszesz je na wyjście.

    Jak chcesz to wieczorem wrzuce schemat płytki, żeby pokazać czemu ULN'y i UDN'y są lepszy wyjściem niż tranzystory.
REKLAMA