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

Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

bednarus3 06 Gru 2018 13:48 150 13
  • #1 06 Gru 2018 13:48
    bednarus3
    Poziom 8  

    Zrobiłem poniższy układ z optoizolacją, który sprawdza stan najmłodszego bitu rejestru danych w porcie LPT oraz ustawia 5 bit rejestru stanu. Jak uprościć ten schemat, żeby wyeliminować dwa układy CD40106? Czy istnieje transoptor z wyjściem logicznym, które jest w stanie wysokim, gdy dioda jest załączona?

    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    0 13
  • Sklep HeluKabel
  • #2 06 Gru 2018 18:09
    _jta_
    Specjalista elektronik

    Zamiast CD40106 w roli jednego inwertera może być tranzystor NPN, opornik do bazy już masz, do kolektora można dodać (pewnie i z otwartym kolektorem zadziała, ale mniej stabilnie).

    0
  • #3 06 Gru 2018 18:45
    bednarus3
    Poziom 8  

    A może być n-mosfet tak jak na schemacie poniżej? Ten układ ma programować stary eeprom, więc stabilność wielce wskazana. Najlepszy byłby transoptor z wyjściem logicznym w stanie wysokim, gdy dioda jest załączona. Ale nie mogę takiego znaleźć.

    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    0
  • Sklep HeluKabel
  • #4 06 Gru 2018 19:47
    _jta_
    Specjalista elektronik

    Może być i N-MOSFET, jakkolwiek w tym zastosowaniu nie będzie miał żadnej przewagi nad byle jakim NPN-em (np. BC548). R5 i R6 może nieco mniejsze, np. 4k7.

    0
  • #6 06 Gru 2018 20:32
    _jta_
    Specjalista elektronik

    To pytanie, jaki opornik pull-up jest w porcie drukarki, jaki w tym, do czego podłączy się wyjście... Jeśli wejście portu drukarki nie jest podłączone, to on "widzi" stan wejścia jako wysoki; i tylko napięcie poniżej 0.8V gwarantuje, że "zobaczy" stan niski (to jest standard TTL). Trzeba by zmierzyć prąd zwarcia tego wejścia portu - do 0.8mA 1k może być.

    0
  • #7 06 Gru 2018 23:05
    bednarus3
    Poziom 8  

    Napiszę o co mi chodzi. Zadeklarowałem się na jednym forum motoryzacyjnym, że zrobię programator EEPROM NMC9307. Zanim opublikuję cokolwiek chciałbym mieć pewność że nie udostępniam czegoś słabego albo strzelam z armaty do komara. Pierwszy układ jaki zrobiłem wygląda jak na schemacie poniżej. Ponieważ pamięć wymaga stosunkowo dużo prądu nie można jej było zasilić bezpośrednio z portu LPT tylko z drugiego źródła, stąd optoizolacja. A żeby było stabilnie jest inwerter z bramką Schmitta. Wszystko działa bez zastrzeżeń. Zapis, odczyt i kasowanie EEPROM
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    Później z ciekawości zrobiłem poniższy układ. Również w pełni działa z pamięcią NMC9307
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    Teraz się zastanawiam, czy coś pośredniego nie będzie najlepszym rozwiązaniem. Z optoizolacją, ale bez bramki Schmitta, tak żeby fani Golfa MK2, w których aucie kultowy licznik Digifiz przestał liczyć kilometry, byli w stanie sami zmontować układ, który nie spali portu LPT, USB ani EEPROM. Stąd następujący schemat:
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    A tuż przed pójściem spać przyszedł mi do głowy jeszcze jeden układ, w miarę łatwy do montażu, nawet z Bramką Schmitta
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    0
  • #8 07 Gru 2018 01:33
    _jta_
    Specjalista elektronik

    Hm... a to musi być port LPT? Teraz komputery z takim portem są coraz rzadsze - nie da się używać portu COM, za wolny? Bo COM jest bardziej odporny na uszkodzenia.

    0
  • #9 07 Gru 2018 07:27
    bednarus3
    Poziom 8  

    Za cienki elektronik jestem i programista pewnie też, żeby port COM wykorzystać. RS232 ma stany logiczne -12V dla "0" i 12V dla "1". A w LPT są piękne sygnały TTL. Poza tym program już napisałem i to wszystko działa i było testowane z układami z dwóch pierwszych schematów. COM nie byłby za wolny bo ten EEPROM wcale szybki nie jest, dlatego nie da się go obsłużyć w obecnych programatorach współpracujących z microwire, bo kość się po prostu nie wyrabia.
    Kilka godzin później... Po odpowiedniej lekturze i głębszym zastanowieniu powinienem dać radę stosunkowo w prosty sposób przerobić program, żeby sterował sygnałami TXD, DTR, RTS w porcie COM odpowiednio jako DI, CS, SK w EEPROM i sprawdzał stan CTS, żeby odczytać DO, ale nie przychodzi mi do głowy żaden interfejs, który pośredniczyłby pomiędzy portem COM komputera, a pamięcią.

    0
  • #10 07 Gru 2018 09:52
    _jta_
    Specjalista elektronik

    Z portu COM można sterować transoptory, jakkolwiek są dwie trudności z jego użyciem:
    1. daje on napięcia zarówno dodatnie, jak i ujemne, i to pewnie znacznie większe od dopuszczalnego napięcia wstecznego LED-ów transoptorów; sposobem na to są diody antyrównoległe do LED-ów (i oporniki ograniczające prąd w obie strony);
    2. wymaga on podawania na wejście zarówno napięć dodatnich, jak i ujemnych, a nie daje zasilania, więc potrzebuje zasilacza symetrycznego (chyba, żeby wykorzystać jego sygnały wyjściowe, tak działały myszy podłączane do portów szeregowych, i prosta przejściówka do 1-wire, taka z diod i oporników; to jest kwestia, czy przez znaczącą część czasu będzie na jakimś wyjściu napięcie dodatnie, i na jakimś ujemne).
    Odczytywać można RI - daje się ustawić przerwanie przy każdej zmianie stanu wejścia, dla pozostałych sygnałów tylko jeden kierunek zmiany może dawać przerwanie.

    Jest port szeregowy USB (na PL2303), na którym jest zasilanie i sygnały z poziomami TTL... tylko z kolei tam nie ma sygnałów sterujących, a tylko RX i TX. Jakkolwiek sam układ PL2303 ma piny DTR, RTS, RI, DSR, DCD, CTS (z odwróconą polaryzacją) - tylko z modułu nie są wyprowadzone. Bedę musiał spojrzeć, jak z dostępem do nich. Inny często stosowany scalak CH340 też ma wszystkie sygnały i to TTL, jest tańszy, ale wymaga instalowania sterownika, a moduł ma wyprowadzone tylko RX, TX, GND i 5V (moduł PL2303 ma jeszcze 3V3).

    0
  • #11 07 Gru 2018 11:02
    bednarus3
    Poziom 8  

    Przypomniało mi się, że kiedyś robiłem układ z tematu:
    https://www.elektroda.pl/rtvforum/topic125314.html
    Tam sygnał RTS jest podany tylko przez rezystor 10k Ohm na nogę SCL. Układ działa i nie uszkadza pamięci. Program ICprog jest w stanie również odczytać stan pinu SDA, który jest podłączony bezpośrednio do CTS w RS232. Dla EEPROM 24Cxx według noty katalogowej dopuszczalne najniższe napięcie wynosi -1V. Czyli jak zrobię analogicznie układ z schematu poniżej to on zadziała i nie uszkodzi NMC9307 dla którego najniższe dopuszczalne napięcie wynosi -0,3V? Niestety brakło pinów w porcie RS232, które można ustawiać programowo, żeby zasilić kość pamięci.
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    Kolejnych parę godzin później...
    Przyłożenie napięcia 5V z gniazda USB na którykolwiek z pinów CTS, DSR,DCD, RI powoduję, że stan tego wejścia widziany jest w programie Terminal v1.93b jako wysoki. Podanie masy tak samo jak przewód wiszący w powietrzu powoduje, że wejścia statusowe portu RS232 są w stanie niskim. Czyli bez problemu można odczytać poziomy TTL na wejściach RS232.
    Kiedyś natrafiłem w dokumentacji Atmela na poniższy układ wykrywający przejście przez "0" prądu z sieci elektrycznej. Skoro producent dopuszcza podanie tak wysokiego napięcia przez odpowiednio duży rezystor na nogę mikrokontrolera, to czemu nie można podać sygnału od -12V do 12V na wejścia wspominanej tu pamięci. Kwestia doboru rezystora. W załączniku cały dokument.
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    Ostatecznie wymyśliłem coś takiego na RS232 jak na schemacie poniżej? Czy tak jest poprawnie? Może wzbogacić układ w optoizolację?
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    0
  • #12 07 Gru 2018 15:16
    _jta_
    Specjalista elektronik

    Hm... pytanie, czy możesz połączyć masy - jeśli tak, to można się obyć bez transoptorów. Do układu z tego schematu wypada zastosować diody Schottky - one mają niższe napięcie przewodzenia i nie pozwolą wyjść poza zakres między masą i VCC dalej, niż około 0.4V (zwykłe 1N4148 0.8V, 1N4001 0.7V).

    Można jeszcze inaczej: do VCC kolektor tranzystora NPN, do masy kolektor PNP, emitery razem i do nóżki ATmegi (czy do czego mają być), bazy razem i przez opornik (ze 100k) do portu RS-232. To ograniczy zakres napięć lepiej, niż diody Schottky, a przy okazji zmniejszy prąd.

    Można jeszcze zajrzeć do dokumentacji tego, co chcesz podłączać i sprawdzić, czy i jaki jest dopuszczalny prąd wymuszany na pinie z zewnątrz - np. STM32F103C8T6 na zwykłych pinach I/O ma +-5mA, więc można dać taki opornik, żeby na pewno nie popłynął większy prąd (można i z 5 razy większy) i nie dawać więcej żadnych zabezpieczeń (ale ten STM ma i piny 'FT', to większość jego pinów I/O, i na nich nie jest dopuszczalne wymuszanie prądu wpływającego do pinu, jest za to ograniczenie napięcia do 5.5V, czy coś koło tego, więc daje się jedną diodę).

    Gorzej w drugą stronę - od scalaka do RS-232 - tu wypada dać tranzystor NPN (polecam BC547C, ważne to C na końcu), baza poprzez opornik do pinu wyjściowego scalaka, emiter do masy, kolektor do wejścia RS-232, i dioda 1N4001 między emiterem i kolektorem (anoda do emitera).

    Jeszcze jedna możliwość: niedawno kupiłem na Allegro za kilka zł (spore kilka, ale tylko kilka) przejściówkę USB na RS-232 - okazało się, że ona ma komplet sygnałów (jeszcze muszę sprawdzić, jak z PG = Protective Ground) i napięcia 0/5V - może coś takiego by się nadawało?

    Z tym, że największe zagrożenie jest przy podłączaniu - jeśli między łączonymi urządzeniami jest napięcie i nie masa zostanie połączona jako pierwsza. Wtedy się okazuje, czy te urządzenia są odpowiednio zabezpieczone, czy nie. Niejeden port drukarki zdarzyło się u nas upalić przez przełączanie drukarki bez wyłączania jej lub komputera.

    0
  • #13 08 Gru 2018 03:13
    bednarus3
    Poziom 8  

    Rozmowa odbiegła od tematu, więc wróćmy do meritum. Stworzyłem kompletne, w pełni działające rozwiązanie programujące eeprom NMC9307 (pewnie inne Microwire o rozmiarze 256 bitów i organizacji 16x16 też, ale nie były testowane)
    GUI wygląda tak:
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    "Programator" LPT tak:
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    A jego schemat tak:
    Uproszczenie układu sprawdzającego stan rejestru danych portu LPT

    Pamięć zasilana jest z gniazda USB komputera stąd ten przewód z wtykiem USB.
    Chcę to udostępnić. Dlatego pytanie. Czy to rozwiązanie po stronie fizycznej jest bezpieczne? Nie chciałbym, żeby osobą, które tego użyją mego dzieła, upaliły się porty LPT, USB lub EEPROM. Wiem transoptory byłyby lepsze, mam nawet taki programator zrobiony i działający, ale chodzi o łatwość wykonania, żeby przeciętny śmiertelnik posiadający podstawową umiejętność władania lutownicą mógł go wykonać.
    Programator RS232 jest w trakcie opracowywania.

    0
  • #14 08 Gru 2018 09:52
    _jta_
    Specjalista elektronik

    Trzeba pamiętać o takich zasadach:
    (1) Najpierw podłączać wtyk USB (masa i zasilanie), potem LPT (sygnały); odłączanie najpierw LPT.
    (2) Podczas podłączania i odłączania sygnały na LPT mają być w stanie nieaktywnym - takim, żeby stan logiczny na wejściu EEPROM-u nie zmieniał się przez to podłączenie. Inaczej może się zdarzyć, że podczas wtykania wygenerują się sygnały, które w przypadkowy sposób coś zaprogramują.
    (3) Trzeba wyłączyć używanie portu LPT przez system komputera, żeby mieć wyłączną kontrolę na tym, co jest na tym porcie.

    Można by pomyśleć - ale to będzie więcej elementów - o zrobieniu układu, który nie przesyła sygnałów, dopóki nie zostanie włączony, i to włączenie wymaga zasilania - najlepiej tak, żeby kolejność była odwrotna, podłączałoby się najpierw LPT, ale układ nie przepuszczałby sygnałów, dopiero po podłączeniu zasilania z USB układ by je włączał, i to z opóźnieniem - przy odłączeniu by wyłączał bez opóźnienia, i oprócz tego byłby albo przycisk do odłączania, albo podtrzymanie zasilania tak, by układ przy odłączaniu wyłączał sygnały zanim zaniknie zasilanie.

    0