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

Jak efektywnie używać zatrzasków 74HCT573 z Atmegą 8?

Geron 11 Wrz 2006 17:01 2511 8
REKLAMA
  • #1 3009507
    Geron
    Poziom 12  
    Posty: 71
    Pomógł: 3
    Ocena: 2
    Witam.

    Buduję mały sterownik programowalny na Atmedze 8. Jak na sterownik przystoi powinien on obsługiwać trochę wejść i wyjść. Chcę obsłużych po osiem lini wejściowych i wyjściowych. Problem w tym, że nie mam tylu wolnych pinów w uC.

    Wpakowałem do układu dwa zatrzaski 74HCT573. Jeden na wejściach, drugi na wyjściach. Sygnał LE zatrzasku na wyjściu spiąłem z sygnałem !OE zatrzasku na wejściu i steruje nim programowo w ten sposób, że ustawiam "1" (LE activ -> dla zatrzasku na wyjściu i !OE -> "Z" dla zatrzasku na wejściu) tylko w chwili wyrzucania danych wyjściowych na porty. Dzięki temy zurzywam tylko 9 lini, a nie 16.

    Sęk w tym, że nie działa dokońca tak jak oczekuję i się zastanawiam. Reaguje na sygnały wejściowe, sygnały wyjściowe zachowują siędziwacznie. Zastanawiam się, czy uparcie szukać jakiś błędów, czy tego poprostu nie można robić w ten sposób.

    Przyznaję, nie jestem specjalnie biegły w elektronice.

    Czy może ktoś próbował robić coś podobnego i może sięudało :) ?

    Pozdr.
  • REKLAMA
  • #2 3009573
    przemek20
    Poziom 21  
    Posty: 328
    Pomógł: 41
    Ocena: 25
    Jak najbardziej dobre rozwiązanie z jednym maleńkim ale. Ja bym podłączył oddzielnie LE jednego i OE drugiego do osobnych nóżek procka. Wtedy będzie ok. Sygnały wyjściowe wystawiaj gdy LE=0 i OE=1, czyli gdy oba bufory są nieaktywne. Potem LE=1 i gotowe. Pozdrawiam.
  • #3 3009591
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam

    A może użyć '164 do szeregowego wyprowadzania danych i '165 do szeregowego wprowadzania danych. Miałbyś wtedy jeden sygnał zegarowy dla obu układów, wyjście danych dla '164, wejście danych dla '165 i oprócz tego z jeden sygnał dla '573, który jest w tym wypadku konieczny do sterowania wyjściami. Brak '164 powodowałby nieprawidłowe działanie przy zmianie danych na wyjściu.

    --
    pozdrawiam
  • REKLAMA
  • #4 3009677
    Elektrooonik
    Poziom 29  
    Posty: 1212
    Pomógł: 127
    Ocena: 83
    polecam układy pcf8574 i sterowanie magistralą i2c

    Dodano po 19 [sekundy]:

    potrzeba tylko 2 linie I/O
  • #5 3009860
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Zmień kości na 74HCT574, wyprowadzenia mają 1:1, a różnia się tym, że '573 jest zatraskiem typu LATCH, a '574 jest zatrzaskiwana zboczem.
  • REKLAMA
  • #6 3011500
    Geron
    Poziom 12  
    Posty: 71
    Pomógł: 3
    Ocena: 2
    No dobra. Dzięki koledzy napełniliście mnie nadzieją :). Popróbuję jeszcze coś zdziałać z `573 (może rzeczywiście Przemek20 ma rację) jak będą dalej kłopoty to spróbuję zmienić kości.

    Pozdrawiam
    Odezwę się jak zadziała

    Dodano po 6 [minuty]:

    Ahhh jeszcze coś.

    Do latcha wejściowego podłączyłem pullup`y 10k na wszystkich wejściach. Wprawdzie nie pomogło, ale wydaje mi się, że powinny być.
    Poprawdcie mnie jeśli się mylę.
    Czy na wyjściach dawać pulldown`y?

    Dodano po 39 [minuty]:

    I jeszcze jedno........

    Jak to jest z przetwornikami C/A? Znalazłem tylko takie, w których potrzebne jest napięcie Vee = -15V. W układzie napewno nie będę budował dodatkowego zasilania (narazie mam ok 12V niestabilizowane ).
    Czy są jakieś przetworniki które niepotrzebują takiego napięcia? Wogóle do czego ono jest potrzebne:) ?
  • Pomocny post
    #7 3012200
    przemek20
    Poziom 21  
    Posty: 328
    Pomógł: 41
    Ocena: 25
    Kości nie zmieniaj bo po co. 573 są powszechnie wykorzystywane w takich układach . Nie dawaj żadnych pulldownów. Pullupy tez nie są potrzebne (ale nie zaszkodzą). Są przetworniki które mają pojedyncze zasilanie np: DAC 7611 i inne układy burr brown. Wiele przetworników można zasilać napiciem symetrycznym lub nie.
    Pozdrawiam.
  • REKLAMA
  • #8 3013246
    Geron
    Poziom 12  
    Posty: 71
    Pomógł: 3
    Ocena: 2
    OK. Ten 7611 jest całkiem fajny, znalazłem jeszcze inny - dac5573 - sterowany przez I2C (i tak już korzystam z I2C do komunikacji z pamięcią, więc jego dodanie nie kosztuje żadnej pracy) Wcześniej jak szukałem jeszcze nie wiedziałem jak obsłużyć I2C. Tylko mały minus :). Nie dostanę go nigdzie w okolicy. Jedynie na zamówienie.

    Pozdr.
    Dziękuję za wskazówki jeszcze odezwę się jak skończę układ, żeby zostawić może jakieś rozwiązania dla innych zagubionych :)
  • #9 3018774
    Geron
    Poziom 12  
    Posty: 71
    Pomógł: 3
    Ocena: 2
    Noo. Jak obiecałem, tak czynię.
    Zostawię poprawny (chyba, w każdym razie działający) układ na forum. Może komuś się kiedyś przyda. Nic skomplikowanego, ale jednak. Kłopot miałem rzeczywiście dlatego, że !OE jednego zatrzasku i LE drugiego były połączone. Trzeba je rozdzielić i co więcej, dałem jeszcze małe opóźnienie pomiędzy przełączaniem (bez tego na wyjściach pojawiała się "1" ułamek sekundy podczas przełączania -> lekkie żarzenie się diod). Może dlatego, że zatrzaski są z serii HC, a nie HCT, ale mniejsza o to.

    Oto kod do obsługi tego ustrojstwa:

    // *************************************

    int SETout(int IOout)
    {
    cli();
    PORTB |=0x08; // Wyłączenie wejść
    t=1000;
    while(t)
    t--;
    DDRD |=0xFC;
    DDRB |=0x03;

    PORTD |=(IOout&0xFC);
    PORTB |=(IOout&0x03);
    PORTD &=(IOout|0x03);
    PORTB &=(IOout|0xFC);

    PORTB |=0x04; // Włączenie wyjść


    PORTB &=0xFB; // Wyłączenie wyjść
    DDRD &=0x03;
    DDRB &=0xFC;
    t=1000;
    while(t)
    t--;
    PORTB &=0xF7; // Włączenie wejść}
    sei();
    return(1);
    }

    Program po restarcie ustawia wykonuje:

    DDRB |=0x0C; // obsługa zatrzasków IO

    i sprawdza stan Portu B i D (odpowiednich pinów) w pętli nieskończonej.

    np.:
    while(1)
    { if (!(PINB&0x01))
    SETout(DIoutreg[0]);
    }


    // ***************************************

    Magistrala danych podłączona do portu D 2-7 oraz B 0 1 (razem osiem linii)
    Sygnały sterujące zatrzaskami podłączone pod piny 2 (out) i 3 (in) portu B.
    Musiałem niestety poszatkować bajt wyjściowy na dwa porty, bo mam strasznie ciasno przy uC. Żeby dobudować te osiem lini musiałem sporo rzeczy poprzenosić. Teraz mam problem, bo przetworniki A/C nieopatrznie przeniosłem na piny 4 i 5 portu C (magistrala I2C), które są podciągnięte do Vcc (wykorzystuje TWI), no ale to już inny temat :).

    Pozdrawiam, dziękuję za dobre rady.
    Temat uważam za zamknięty (chyba, że ktoś ma jakieś uwagi)

Podsumowanie tematu

✨ Dyskusja dotyczy efektywnego wykorzystania zatrzasków 74HCT573 w projekcie sterownika opartego na mikrokontrolerze Atmega8, mającego obsługiwać po osiem linii wejściowych i wyjściowych przy ograniczonej liczbie pinów. Proponowane rozwiązanie polega na zastosowaniu dwóch układów 74HCT573 – jeden do wejść, drugi do wyjść – oraz sterowaniu sygnałami LE i !OE w sposób programowy, co pozwala ograniczyć liczbę używanych linii do 9 zamiast 16. Wskazano jednak, że połączenie sygnału LE jednego zatrzasku z !OE drugiego powoduje problemy z poprawnym działaniem, dlatego zaleca się rozdzielenie tych sygnałów i sterowanie nimi z osobnych pinów mikrokontrolera. Dodatkowo sugerowano wprowadzenie niewielkiego opóźnienia przy przełączaniu sygnałów, aby uniknąć niepożądanych stanów przejściowych na wyjściach. W dyskusji pojawiły się alternatywy, takie jak użycie układów 74HC164 i 74HC165 do szeregowego przesyłania danych lub zastosowanie ekspanderów I2C, np. PCF8574, co znacznie redukuje liczbę potrzebnych linii I/O. Poruszono także temat przetworników cyfrowo-analogowych (DAC), wskazując modele z pojedynczym zasilaniem, takie jak DAC7611 czy DAC5573 sterowany przez I2C, które mogą być łatwo integrowane z systemem. Wskazano, że stosowanie rezystorów podciągających (pull-up) na wejściach zatrzasków jest dopuszczalne, natomiast pull-downy na wyjściach nie są zalecane. Ostatecznie potwierdzono, że układy 74HCT573 są odpowiednie do takich zastosowań, pod warunkiem prawidłowego sterowania sygnałami LE i !OE oraz odpowiedniego rozdzielenia ich linii sterujących.
Wygenerowane przez model językowy.
REKLAMA