Skocz do zawartości
paperfalse

Elektroniczne tips & tricks

Pomocna odpowiedź

Podzielmy się pomysłami.

Od siebie to co ostatnio przewinęło się w rozmowie ze znajomymi. Na większości schematów w których wykorzystane są jednocześnie scalaki 74HC165 i 74HC595  np. do klawiatury matrycowej i lcd typu HD autorzy sterują nimi za pomocą 2 pinów CS, dla każdego scalaka lub kaskady scalaków osobno. A to taki mój pomysł na zaoszczędzenie pinu. Banalne i skuteczne. Można zmienić wartości kondensatora na 2n i rezystora na 100ohm dla wyższej wartości szczytowej napięcia. Może się komuś początkującemu przyda. 

SPI_HC165_HC595_.jpg

Udostępnij ten post


Link to post
Share on other sites

A mógłbyś napisać coś więcej, bo nie każdy zna te układy na pamięć?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Akurat je znam, ale też jestem ciekaw co kierowało autorem pomysłu. Układ wydaje się mocno przekombinowany, bo oba te rejestry można podłączyć do wspólnego SPI w ogóle bez żadnych elementów dodatkowych i wciąż sterować je z jednego sygnału "CE". O ile jeszcze obwód RC mogę zrozumieć (chyba wiem co tam świtało w główce), to już te oporniki do masy lub zasilanie puszczone przez diodę(!) jakoś nie bardzo.. Ktoś wyraźnie kopiował i kompilował do wspólnego schematu czyjeś rozwiązania nie do końca rozumiejąc co robi. No ale pewnie zadziałało, może tylko to się liczy?

Acha, i napisz jak radzisz sobie z załadowaniem nowej zawartości do 165, bo CE w nim to nie jest ChipEnable tylko ClockEnable - zwykła bramka na zegarze, a do ładowania (asynchronicznego) służy w nim zwarty (tutaj) na stałe do masy pin nr 1. Czy na pewno ten schemat przerysowałeś z działającej wersji układu?

Edytowano przez marek1707
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

To zależy czym się za pomocą nich steruje, bez tego obwodu RCD wyświetlacz nie pracuje prawidłowo, potrafi mrygać szczególnie kiedy podświetlanie też jest sterowane przez SPI ponieważ stan wysoki na CS aktywuje port wyjściowy układu. Problemu nie ma jeśli nic więcej nie jest podłączone do SPI oprócz tych rejestrów ale jeśli jest to ten skromny układ jest skutecznym rozwiązaniem. Dioda na zasilaniu faktycznie zbędna ale nie szkodzi. Rezystor Przy Q7' zapobiega zwarciu na tym pinie w przypadku błędnego przeładowania rejestru i pierwszy bit wlizie na ogonek. Natomiast rezystor przy diodzie wyostrza charakterystykę impulsu. Elementy są zestawione w wystarczający sposób do osiągnięcia celu ale jeśli potraficie nic nie szkodzi na przeszkodzie aby zoptymalizować to rozwiązanie. Ktoś wyraźnie kombinował jak to w elektronice często się zdarza szczególnie na początku.

Rozwiązanie działa. Rejestr jest na stałe aktywny a port jest sczytywany kiedy potrzeba czyli przy okazji odświeżania wyświetlacza w tym przypadku. Kiedy do wyświetlacza połączonego z 595 wysyłane są dane na pinie CE jest stan niski w tym czasie też odbierane są dane z 165. Powrót do stanu wysokiego na CS blokuje wejście zegara na 165 co zatrzymuje pracę rejestru i wywołuje impuls na CE 595 co zatrzaskuje stan rejestru na porcie wyjściowym. W praktyce tylko ostatni bajt z 165 jest brany pod uwagę jako stan podłączonej do portu klawiatury. W tym konkretnym przypadku do SPI podłączone są również inne urządzenia.

Edytowano przez paperfalse

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, paperfalse napisał:

Dioda na zasilaniu faktycznie zbędna ale nie szkodzi

Szkodzi, bo zwiększa impedancję źródła a układy cyfrowe tego nie lubią. Gdyby jeszcze za nią był kondensator, to faktycznie dużo by nie zmieniała oprócz tego, że wszystkie sygnały wyjściowe miałyby obniżone o 0.7V poziomy. Nie widzę w tym żadnego sensu a Ty publikując taką bzdurę masz czelnosc twierdzić, że to fajne rozwiązanie dla początkujących.

1 godzinę temu, paperfalse napisał:

Rezystor Przy Q7' zapobiega zwarciu na tym pinie w przypadku błędnego przeładowania rejestru i pierwszy bit wlizie na ogonek.

Kompletny bełkot. Ani rezystor 100k na wyjściu 165 ani te 2k na wyjściu 595 niczego nie zmieniają w działaniu tego układu ani niczemu nie "zapobiegają". Są zupełnie zbędne i nawet nie przypuszczam co mogło kierować rysującym, że je tam wstawił. Podejrzewam, że on też nie wie. I w zasadzie mam pewność, że to nie byłeś Ty:

3 godziny temu, paperfalse napisał:

A to taki mój pomysł na zaoszczędzenie pinu...

Ktoś wyraźnie kombinował jak to w elektronice często się zdarza...

W końcu to jest Twoje rozwiązanie, czy przerysowane bezmyślnie z jakiegoś schematu z sieci? Tak, bezmyślnie, bo podłączenie na stałe wejścia SH/PL do masy powoduje, że rejestr 165 jest zawsze w trybie ładowania a to znaczy, że na wyjściu SO zawsze jest widoczny stan wejścia D7 niezależnie od stanu wszystkich innych wejść. Żadnego wczytywania stanów po SPI nie będzie. Żałosne.

Podsumowując: jeżeli jesteś początkującym w dziedzinie techniki cyfrowej - na co wskazuje poziom choćby tego tematu - nie przepisuj w przyszłości rzeczy, których nie do końca rozumiesz jako "objawień" polecanym innych. Takia płycizna wiedzy i błędy szybko wyjdą na jaw, bo mamy tu naprawdę wielu zawodowców a Ty wyjdziesz zwyczajnie na głupka. A jeśli było to potknięcie i jednak znasz się na tym co tu wrzuciłeś, wystarczy napisać "Przepraszam, nie przemyślałem tego, faktycznie babol na babolu". Każdy ma prawo do błędu, ale brnięcie w to dalej jest śmieszne. Słabo jakoś wystartowałeś, paperfalse.

Jeśli nie usłyszymy jasnego sprostowania, to moim zdaniem temat nie wnosi niczego nowego a wręcz wprowadza w błąd i jako taki nadaje się jedynie do kosza.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
55 minut temu, marek1707 napisał:

Kompletny bełkot. Ani rezystor 100k na wyjściu 165 ani te 2k na wyjściu 595 niczego nie zmieniają w działaniu tego układu ani niczemu nie "zapobiegają". Są zupełnie zbędne i nawet nie przypuszczam co mogło kierować rysującym, że je tam wstawił.

A więc to tak????  Ale chyba wiem o co Ci chodzi, żeby pozostawić je niepodłączone? Cóż, nie chcę mieć anteny na pinie, te rezystory są po to aby piny nie wisiały w powietrzu, to podobno dobry zwyczaj w projektowaniu ale skoro twierdzisz inaczej. Czy to w ogóle jest jakaś różnica dla działania scalaka czy te rezystory tam są czy nie? Jedynie chyba pobór prądu wzrośnie o kilkanaście uA. Co innego gdyby były do masy podpięte bezpośrednio, wtedy przy przepełnieniu rejestru 595 powstało by zwarcie.

Co do diody masz rację choćby z tego względu, że szkoda diody bo sam fakt czy to napięcie będzie mniejsze o ten spadek na diodzie nie robi żadnej różnicy. Jeśli natomiast chodzi o zmasowanie tych pinów PL i SI to pełnią one funkcję synchronicznego wprowadzania danych do rejestru która to jest w tym przypadku nieużywana więc nie jest to błędem. Można jedynie dodać rezystor aby zachować konsekwencję w całym  schemacie odnośnie postępowania z nieużywanymi pinami. No chyba, że nie jestem w stanie przeczytać tekstu z DS ze zrozumieniem:

Cytat

The 74HC165; 74HCT165 are 8-bit serial or parallel-in/serial-out shift registers. The device features a serial data input (DS), eight parallel data inputs (D0 to D7) and two complementary serial outputs (Q7 and Q7). When the parallel load input (PL) is LOW the data from D0 to D7 is loaded into the shift register asynchronously. When PL is HIGH data enters the register serially at DS. When the clock enable input (CE) is LOW data is shifted on the LOW-to-HIGH transitions of the CP input. A HIGH on CE will disable the CP input. Inputs are overvoltage tolerant to 15 V. This enables the device to be used in HIGH-to-LOW level shifting applications.

Gdzie DS to na schemacie SI.

 Schemat rysowany paintem, tu wersja poprawiona:

74HC165.jpg

SPI_HC165_HC595_.jpg

Edytowano przez paperfalse
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, paperfalse napisał:

nie chcę mieć anteny na pinie

Nie pleć, zarówno Q7 w jednym rejestrze jaki i QH w drugim są wyjściami, żadne oporniki nie są im potrzebne do szczęścia.

Podtrzymuję moje zdanie: układ działać nie będzie a temat do kosza. Niczego nie poprawiłeś i nie rozumiesz prostych zdań, które sam cytujesz. Wskazówka: spróbuj przetłumaczyć na polski poniższe i zastanów sie co to oznacza dla Twojego układu oraz - w rezultacie - dlaczego sterowanie wejściem SH/PL jest kluczowe:

1 godzinę temu, paperfalse napisał:

When the parallel load input (PL) is LOW the data from D0 to D7 is loaded into the shift register asynchronously.

Możesz też przemyśleć w wolnej chwili (noc jeszcze długa) czym różni się operacja "parallel load" od "serial shift" w kontekście rejestru 165. Może coś zostanie na przyszłość.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Masz rację Marku. Mój błąd, bezmyślne kopiowanie nie prowadzi do niczego dobrego i lepiej nie uczyć się elektroniki od arduinowców tylko z książek. Część schematu dotycząca 595 jeszcze ujdzie ale przy 165, tak jak słusznie zwróciłeś uwagę, jest błąd. Nie zrozumiałem Cię na początku. Poprawiłem schemat i trochę go rozszerzyłem. Ale nadal nie jestem pewny co miałeś na myśli pisząc:

18 godzin temu, marek1707 napisał:

Układ wydaje się mocno przekombinowany, bo oba te rejestry można podłączyć do wspólnego SPI w ogóle bez żadnych elementów dodatkowych i wciąż sterować je z jednego sygnału "CE".

mógłbyś to sprecyzować?

Myślę też, że temat nadaje się bardziej do działu "sprawdzanie schematów" niż tutaj.

Dzięki za zainteresowanie.

 

SPI_HC165_HC595_.jpg

Edytowano przez paperfalse
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

No to tak:

1. Jak rozumiem SCK i CS na prawej i lewej części schematu są tożsame, czy tak? Po co rozszerzałeś do 16 bitów? Czy to jakoś zmienia koncepcję działania?

2. Zostawiłeś wiszące w powietrzu wejście SI - nie jest to błąd tragiczny w skutkach, ale sam pisałeś o antenach. W odróżnieniu od wyjść, wejść nie zostawiamy samopas.

3. To teraz, żeby dopełnić formalności jesteś nam winien przepis jak to działa, czyli wracamy do pytania Deshipu. W szczególności chcę wiedzieć (i zapewne nie tylko ja) po co trzymasz się kurczowo tych układów różniczkujących. Oczywiście rozumiem, że jeden "wykrywa" zbocze narastające a drugi opadające i to jest jasne, ale nie rozumiem dlaczego? Właśnie użycie tych obwodów miałem na myśli pisząc o przekombinowaniu. Tak więc usiądź wygodnie i swoimi słowami opisz (albo narysuj przebiegi i je skomentuj) jak wyobrażasz sobie współpracę procesora z tym układem. Dla uproszczenia możemy uznać, że 8- czy 16-bitowość rejestrów niczego nie zmienia więc w opisie możesz posługiwać się 1-bajtowymi transferami SPI.Czyli krok po kroku: co robi procesor, jakie sygnały wysyła i jaki to ma skutek w opisywanym układzie. Mam nadzieję, że teraz, gdy już wiesz jak działają oba scalaki zmusi Cię to do ponownego przemyślenia całości i wyciągnięcia jakichś ciekawych wniosków. Acha, i napisz jaki jest cel blokowania zegara rejestru 165?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Cała koncepcja ma na celu rozszerzenie portu I/O mC w tym przypadku ATtiny85 który ma tylko 5 pinów na porcie więc potrzebny expander do obsługi wyświetlacza i klawiatury i jeszcze być może czegoś innego przy jednoczesnym wykorzystaniu ADC. Na początku zastanawiałem się nad zakupem bidirectional na I2C ale okazał się dosyć drogi a i tak potrzebne byłyby co najmniej 2 więc wybór padł na tanie układy logiczne. 

Niestety zasada ich działania niezupełnie zgadza się ze standardem SPI gdzie operacja transmisji danych przebiega podczas stanu niskiego na pinie CS. Układ 595 potrzebuje dodatniego impulsu na CS po załadowaniu danych do rejestru w celu zatrzaśnięcia rejestru na porcie wyjściowym. Pierwotnym założeniem było aby potraktować oba scalaki jak jedno urządzenie SPI i podczas stanu niskiego na CS jednocześnie pobierać dane z 165 i wysyłać do 595. Po przełączeniu CS w stan wysoki za pomocą kondensatora wytworzy się impuls dodatni na pinie ST_CP i zatrzaśnie rejestr na porcie. Następnie kondensator rozładuje się przez rezystor i na pinie ST_CP znów będzie stan niski więc potencjalna transmisja na SPI nie zmieni stanu portu. Problem jest to, że zatrzask tych scalaków działa odwrotnie. Nie zrozumiałem dokładnie sposobu działania tego 165 na co słusznie zwróciłeś uwagę. 165 potrzebuje impulsu stanu niskiego na PL aby przekazać stan portu wejściowego do rejestru więc podłączenie go na stałe do masy było błędem ponieważ przy każdym przesunięciu rejestr byłby modyfikowany a dane wysyłane błędne. Po przerobieniu schematu spadek napięcia na linii CS spowoduje rozładowanie kondensatora, który zacznie się ładować w drugą stronę aż do osiągnięcia wartości napięcia zasilania na pinie PL przy stanie niskim na pinie CE odpowiedzialnym za aktywacje wejścia zegarowego. Po ponownym wystąpieniu stanu wysokiego na linii CS dioda uniemożliwi skok napięcia powyżej bezpiecznego na pinie PL, wejście zegarowe 165 zostanie odłączone, zostanie wytworzony impuls dodatni na pinie CE 595 co zatrzaśnie jego port i tym sposobem odczyt 165 i zapis 595 odbędzie się w tym samym cyklu transmisji danych. Diody w obu przypadkach pełnią funkcję zabezpieczającą przed przekroczeniem bezpiecznego napięcia za kondensatorem podczas zmiany stanów na linii CS. Powinno działać poprawnie, chyba, że się w tych rozważaniach znowu pomyliłem.  

Być może dodam jeszcze wykresy przebiegów jak zainstaluje jakiś LTSpice czy coś takiego.

1 tak są, nie zmienia.

2 poprawione

3 j.w. Zegar jest blokowany aby 165  nie zaśmiecał transmisji na MISO.

Edytowano przez paperfalse

Udostępnij ten post


Link to post
Share on other sites

Twoim kolejnym problemem jest nieodróżnianie reakcji na zbocze od reakcji na poziom. Te dwa rejestry to dwie różne epoki historyczne i dwa różne podejścia do projektowania układów cyfrowych. W czasach pierwszych TTLi liczył się każdy tranzystor na strukturze i wtedy wiele wejść sterujących było asynchronicznych. Dobrym przykładem tego jest właśnie 165, gdzie SH/PL jest czułe na poziom. To oznacza, że działa ono niezależnie od zegara. Z kolei wejście ST_CP w 595 jest aktywne tylko zboczem narastającym i to akurat się świetnie składa. Od razu też widać, że produkowanie krótkiej szpilki na tym wejściu nie ma sensu, ono i tak przeładowuje dane na wyjścia tylko w chwili narastania sygnału CE. No to teraz wyobraź sobie, że wywalasz z tego swojego(?) układu wszystkie elementy członów różniczkujących i doprowadzasz sygnał wyboru CE bezpośrednio do SH/LD i do ST_CP. Wejście blokowania zegara w 164 podłączasz na stałe do masy, nie będzie potrzebne. To samo robisz z jego SI. Wg mnie będzie to działać tak:

1. Normalnie linia CE jest w stanie niskim -> rejestr 165 jest ładowany równolegle z wejść D0..D7, na jego wyjściu MISO widać stan linii D7 (ale nikogo to nie obchodzi) a rejestr 595 wypuszcza na wyjścia stan wcześniej wysłany.

2. Ładujesz do SPDR (mówimy o procesorze AVR) dane dla 595 i robisz transfer SPI. W czasie transmisji układ 165 ignoruje zegary, bo jest zmuszony do operacji LOAD a Ty ignorujesz dane wracające po MISO. Po linii MOSI wysyłasz za to dane do 595 który właśnie je wciąga do swojego rejestru przesuwającego.

3. Po zakończeniu transferu podnosisz CE do stanu wysokiego. Na zboczu narastającym rejestr 595 przeładowuje te nowe 8 bitów na swoje wyjścia a w stanie wysokim 164 kończy ładowanie i jedynie  pamięta "zamrożony" stan swoich 8 wejść.

4. Robisz drugi transfer SPI, ale tym razem wysyłasz cokolwiek (np. 0x00). Rejestr 595 to odbiera, ale to nie zmienia stanu jego wyjść, a 165 wysyła do Ciebie przez MISO 8 bitów danych bo jest w trybie SHIFT.

5. Po zakończonej transmisji odczytujesz dane z SPDR i opuszczasz CE z powrotem na zero wracając do punktu wyjścia. Opadające zbocze niczego w 595 nie zmienia a 165 wraca do wczytywania wejść.

O tym myślałem pisząc, że można oba te układy podłączyć do wspólnego SPI bez żadnej "glue logic". Czy to jakoś przemawia?

Moim zdaniem główny "Trip & tick" z tego tematu dla Ciebie jest taki: Następnym razem lepiej napisać "Chcę podłączyć dwa rejestry do SPI i znalazłem schemat - czy zadziała?" niż z zadęciem wrzucać bzdury i jeszcze ich bronić jak jakiś potłuczony.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Mógłbyś jeszcze pokrótce wyjaśnić jak to co napisałeś ma się do tych timingów z not katalogowych? Bo chyba nie zrozumiałem gdzie tu wobec tego jest błąd. Jedyne różnice jakie są względem tych wykresów to PL  w 165 dostaje stan niski nieco później co nie ma żadnego znaczenia dla samej transmisji nie może on też być aktywny podczas przesyłania danych w czym zrobiłem błąd na początku i reset w 595 nie jest używany. Całość działa i nie wiem czego tu się czepiać. Myślę, że to funkcjonalny "TIP" dla kogoś komu pinów portu procka braknie.

 

timing.jpg

 

Edytowano przez paperfalse

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, paperfalse napisał:

Mógłbyś jeszcze pokrótce wyjaśnić jak to co napisałeś ma się do tych timingów z not katalogowych?

Nie, opisałem wszystko w punktach. Przeczytaj je jeszcze raz a w razie problemów ze zrozumieniem zadaj pytanie szczegółowe, nie będę się powtarzał. Jeśli nie rozumiesz przebiegów z kart katalogowych, pokaż strzałką którego miejsca nie czaisz. Zbyt dużo tam się dzieje by to szczegółowo opisywać a potem i tak okaże się, że chodziło Ci o coś zupełnie innego. Interfejs jest prosty i same rejestry także. Osobne bloki sterowane osobnymi sygnałami. Co tu trudnego?

54 minuty temu, paperfalse napisał:

Całość działa i nie wiem czego tu się czepiać

Nie no, jak grochem o ścianę. Działa dopiero teraz, gdy pozmieniałeś schemat wg moich wskazówek. A wciąż można go uprościć do postaci jaką opisałem ostatnio przez wywalenie wszystkiego co nie jest scalakiem - tego też wolisz nie widzieć? Chłopie, weź się ogarnij i zajrzyj do pierwszego postu, od czego ten wątek zacząłeś a do czego doszliśmy? Widzisz różnice? Tak, sam pomysł podłączenia dwóch rejestrów do jednego SPI i jednego CE jest dobry, ale jest tak stary jak.. SPI, nie ma tu nic "trickowego" ani "tipsowego", niczego nowego ani odkrywczego nie opisałeś. A na dodatek w pokazanym pierwotnie układzie były błędy uniemożliwiające działanie - czyż nie jest to wystarczający powód do narzekania na poziom tego tematu? Pomagasz innym przez podsuwanie złych rozwiązań? To taki pomysł na niszczenie konkurencji czy coś? Jak dla mnie EOT, chyba że zadasz konkretne techniczne pytanie.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Sposób jaki opisałeś faktycznie działa prawidłowo i nie mam co do tego żadnych obiekcji tyle tylko, że niezupełnie jest to to o co mi chodziło. Wszystko byłoby ok gdyby do SPI nie było podłączone nic więcej oprócz tych scalaków ale niestety jest tam jeszcze pamięć szeregowa i po drugie odczyt 165 i zapis 595 w przedstawionym przez Ciebie rozwiązaniu odbywa się na przemian a mnie zależało aby miało to miejsce w jednym cyklu transmisji tak jak w typowej transmisji po SPI (jednoczesny zapis i odczyt) i właśnie próbuję ustalić jak to zrealizować. Dodałem strzałki na wykresach timingów, wyraźnie są tam pokazane impulsy. W szczególności w 165 sterowany jedynie pinem PL będzie niszczył transmisję do pamięci szeregowej.

W przypadku 595 faktycznie nie jest potrzebny obwód rc jeśli wejście jest sterowane zboczem narastającym,  zastosowałem go aby odtworzyć przebieg widoczny na timingach. Po stronie 165 musi być żeby możliwy był jednoczesny odczyt i zapis.

17 godzin temu, marek1707 napisał:

1. Normalnie linia CE jest w stanie niskim -> rejestr 165 jest ładowany równolegle z wejść D0..D7, na jego wyjściu MISO widać stan linii D7 (ale nikogo to nie obchodzi) 

Właśnie mnie obchodzi bo będzie to miało wpływ na transmisję z innymi urządzeniami. Może sprawdzi się dodanie rezystora separującego wyjście z 165 do MISO?

Udostępnij ten post


Link to post
Share on other sites

Temat przeniesiony na prośbę autora.

Udostępnij ten post


Link to post
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!

Gość
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...