라디오 전자 및 전기 공학의 백과사전 LPT 포트의 또 다른 삶. 2부. 무선 전자 및 전기 공학 백과사전 LPT 포트에 신호를 기록하려면 저항이 1 Ohm - 270 kOhm인 1개의 스위치와 1개의 저항으로 구성된 회로(그림 8)를 조립하는 것이 좋습니다. 스위치(버튼) SW1-SW0의 이 위치에서는 모든 상위 접점에 논리적 "0"이 있으며, 하나라도 닫히면 해당 접점에 논리적 "7"이 나타납니다. 핀은 D2-D9 버스(핀 378-15, 주소 &H13) 또는 ERROR, SELECT, PAPER END, ACK 및 -BUSY(핀 12, 10, 11, 379 및 XNUMX, 주소 &HXNUMX)에 직접 연결할 수 있습니다. .
LPT 포트에서 들어오는 데이터를 표시하려면 다음 구성표를 권장합니다.
공칭 값이 1 - 8 옴인 저항 R270-R330, 모든 LED는 AL307B라고 합니다. 이러한 회로에는 전원이 필요하지 않으며 어쨌든 모든 것이 빛납니다. 나는 모든 신호를 나 자신에게 가져 왔고 모든 것이 즉시 보입니다. 일반적으로 valery-us3leh.narod.ru/dlpt.html에서 LPT 4D HARD Analyzer 프로그램을 다운로드하는 것이 좋습니다. 발레리 코프툰이 각본을 맡았습니다. 이 프로그램의 도움으로 ... 일반적으로 직접 볼 수 있습니다. K561LA7 칩에 직사각형 펄스 발생기를 조립해 봅시다. 발전기 + 5V. 사실 신호가 TTL 레벨을 갖도록 모든 장치(예: 155, 555 시리즈)를 조립하는 것이 더 편리합니다. 논리 "제로" 0-0,8V 및 로그 "일" 2,4-4,2V. 561 시리즈의 편리함은 전원 공급 장치의 다양성에 있습니다. + 3V에서 + 12V까지 동일하게 잘 작동합니다. 따라서 미세 회로의 선택은 귀하의 취향에 달려 있으며 유일한 질문은 진폭이 + 5V 이하인 직사각형 펄스를 얻는 것입니다. 간단한 펄스 발생기의 다이어그램이 그림 3에 나와 있습니다.
생성기 자체는 D1.1-D1.3 요소에 조립되며 출력 펄스의 더 "아름다운"전면을 위해 D1.4 요소를 사용했습니다. R1, R2, C1 - 주파수 설정 요소. 요소의 이러한 매개 변수를 사용하면 생성 주파수는 약 5-7Hz입니다. 명확성을 위해 생성기의 작동을 다음 그래프 형식으로 나타낼 수 있습니다.
인버터 출력 D1.4는 LPT 커넥터(버스 D2)의 핀 0에 연결됩니다. 생성기를 사용하기 전에 D0-D7 버스를 데이터 수신 모드로 전환해야 합니다. 이를 위해 &H37A에 43을 보냅니다.
그런 다음 폴링 포트 &H378을 시작합니다.
변수 A 값은 254 또는 255입니다. 이유는 무엇입니까?
사실은 D0-D7 버스가 데이터 수신 모드로 전환된 후 논리 단위 레벨(노란색 행)로 설정된다는 것입니다. D0 레벨이 D0 버스에 나타나면 로그 "0"(파란색 행) - 첫 번째 비트는 2 + XNUMX를 의미하는 XNUMX의 값을 갖습니다.1+22+23+24+25+26+27 = 254. 따라서 우리는 D0 버스에서 신호의 변화를 추적할 수 있지만 1초 동안 변화의 수를 세면 우리는 올바른 디지털 주파수 카운터를 얻을 것입니다. 앎 수 들어오는 충동 초당 에 대해 말할 수 있다 주파수(헤르츠). 그래서 주파수 카운터 프로그램입니다. 양식에는 3개의 버튼과 레이블이 있어야 합니다. 버튼 1은 주파수 측정기 시작, 버튼 2는 중지, 버튼 3 - 종료, 라벨 - 주파수를 나타냅니다. ******************************************* inpout32.dll을 사용하는 사람들을 위해 Option Explicit '포트 주소 작업을 위한 라이브러리 선언 개인 선언 함수 Inp Lib "inpout32.dll" 별칭 "Inp32"(ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "inpout32.dll" 별칭 "Out32"(ByVal PortAddress를 정수로, ByVal 값을 정수로) '밀리초 계산을 위한 라이브러리 선언 개인 선언 함수 GetTickCount Lib "kernel32"() 길이 Dim FTV As Long ' 시스템 시간의 초기 값 Dim STV As Long ' 시스템 시간의 끝 값 Dim FV As Integer 'FV는 포트의 초기 상태입니다. Dim SV As Integer 'SV 호환 포트 상태 Dim cntr '펄스 카운터 Dim J As Integer 'J=1 카운트 허용, J=0 카운트 허용되지 않음 Private Sub Command1_Click () Out &H37A, 43 '타이어 D0-D7을 읽기 모드로 설정 FTV = GetTickCount '기억된 시스템 시간(밀리초) J = 1 '카운트 - 허용 FV = Inp(&H378) '포트 상태 읽기 SV = FV 'SV는 포트 상태와 같습니다. cntr = 0 '제로 카운터 하는 동안 J <> 0 사건 STV = GetTickCount '현재 시스템 시간 기억 If STV > FTV + 1000 Then FrequencyShow '초가 경과하면 결과 표시 FV = Inp(&H378) '지속적으로 주소 &H378 폴링 If FV <> SV Then '포트 상태가 변경된 경우 SV = FV 'SV는 포트 상태와 같음 중심 = 중심 + 0.5 ' 카운터 + 0.5 END IF J = 0이면 종료 사용자가 중지를 눌렀을 경우 '종료 고리 최종 하위 Private Sub Command2_Click () '스톱 루프 '사용자가 중지를 눌렀을 경우 J=0 최종 하위 Private Sub Command3_Click () J = 0 '카운트 - 중지 출력 &H37A, 0' D0-D7 버스 상태 복원 언로드 '프로그램 종료 최종 하위 '주파수 표시 루틴 공개 SubFrequencyShow() Label1.Caption = Int(cntr) & " Hz" '표시 결과 cntr = 0 '제로 카운터 일시정지(0.2) '지연. 저주파 측정에 필요 FTV = GetTickCount '기억된 시스템 시간(밀리초) 최종 하위 '지연 루틴. 통화 형식: 일시 중지(초) Public Sub Pause(단일 값) 희미한 시작, 끝 시작 = 타이머 타이머 < 시작 + 값 동안 수행 사건 고리 마침=타이머 최종 하위 ******************************************* dlportio.dll을 사용하는 분들을 위해 Option Explicit '포트 주소 작업을 위한 라이브러리 선언 개인 선언 함수 DlPortReadPortUchar Lib "dlportio.dll"(ByVal Port As Long) As Byte Private Declare Sub DlPortWritePortUchar Lib "dlportio.dll"(ByVal 포트 길이, ByVal 값 바이트) '밀리초 계산을 위한 라이브러리 선언 개인 선언 함수 GetTickCount Lib "kernel32"() 길이 Dim FTV As Long ' 시스템 시간의 초기 값 Dim STV As Long ' 시스템 시간의 끝 값 Dim FV As Integer 'FV는 포트의 초기 상태입니다. Dim SV As Integer 'SV 호환 포트 상태 Dim cntr '펄스 카운터 Dim J As Integer 'J=1 카운트 허용, J=0 카운트 허용되지 않음 Private Sub Command1_Click () DlPortWritePortUchar &H37A, 43 ' D0-D7 버스를 읽기 모드로 전환 FTV = GetTickCount '기억된 시스템 시간(밀리초) J = 1' 카운트 - 허용 FV = DlPortReadPortUchar (&H378) '포트 상태 읽기 SV = FV 'SV는 포트 상태와 같음 cntr = 0 '제로 카운터 하는 동안 J <> 0 사건 STV = GetTickCount '현재 시스템 시간 기억 If STV > FTV + 1000 Then FrequencyShow '초가 경과하면 결과 표시 FV = DlPortReadPortUchar (&H378) '지속적으로 주소 &H378 폴링 If FV <> SV Then '포트 상태가 변경된 경우 SV = FV 'SV는 포트 상태와 같음 중심 = 중심 + 0.5 ' 카운터 + 0.5 END IF J = 0이면 종료 사용자가 중지를 눌렀을 경우 '종료 고리 최종 하위 Private Sub Command2_Click () '스톱 루프 '사용자가 중지를 눌렀을 경우 J=0 최종 하위 Private Sub Command3_Click () J = 0 '카운트 - 중지 DlPortWritePortUchar &H37A, 0 'D0-D7 버스 상태 복원 언로드 '프로그램 종료 최종 하위 '주파수 표시 루틴 공개 SubFrequencyShow() Label6.Caption = Int(cntr) & " Hz" '표시 결과 cntr = 0 '제로 카운터 일시정지(0.2) '지연. 저주파 측정에 필요 FTV = GetTickCount '기억된 시스템 시간(밀리초) 최종 하위 '지연 루틴. 통화 형식: 일시 중지(초) Public Sub Pause(단일 값) 희미한 시작, 끝 시작 = 타이머 타이머 < 시작 + 값 동안 수행 사건 고리 마침=타이머 최종 하위 ******************************************* 그리고 다? 물어. 예, 그게 다입니다. 그것은 어떤 이유로 작동하는 전체 프로그램입니다. Ø 보시다시피 코드는 라이브러리마다 거의 동일하므로 다음 예제에서는 라이브러리가 있는 코드만 고려합니다. dlportio.dll을 주파수 카운터 프로그램 코드를 주의 깊게 분석하면 카운터에 0.5가 더해지는 것을 알 수 있습니다. 중심 = 중심 + 0.5, 1이 아닙니다. 사실 이 프로그램 코드는 포트 상태가 1에서 0으로 또는 그 반대로 0에서 1로 전환되는 것을 고려하므로 주파수를 계산하려면 0.5를 더한 다음 출력해야 합니다. Label1.Caption = Int(cntr) & "hz" 또는 1 추가 중심 = 중심 + 1, 그런 다음 출력 Label1.Caption = Int(cntr/2) & "hz" 여기 수학이 있습니다. 그건 그렇고, 어떤 엔진의 회전축에 어떤 종류의 센서를 설치하려고 했습니까? 아마도이 프로그램의 도움으로 멋진 회전 속도계 J를 얻을 수 있습니다. 자, 계속 진행하겠습니다. 우리는 동일한 펄스 발생기를 사용하고 저항 R2 또는 R1 대신 서미스터를 납땜합니다 (기사 작성자는 자동차 상점에 가서 VAZ-30에서 2101 루블에 온도 센서를 구입했습니다). 이 온도 센서는 온도에 따라 저항을 변경합니다(+3200에서 14옴).0+143의 온도에서 C 및 100 Ohm0C.) 저항을 변경하면 발전기의 주파수도 변경되므로 변환기를 얻습니다. 온도-주파수, 즉. 디지털 온도계. 온도에 따른 저항의 변화는 다음 그래프에서 볼 수 있듯이 선형적으로 발생하지 않는다는 사실에 주목하고 싶습니다.
따라서 100 펄스가 20도이고 110 펄스가 21도라고 컴퓨터에 "설명"하는 것은 그리 쉽지는 않지만 그럼에도 불구하고 가능합니다. 문제는 코드와 알고리즘의 크기에만 있습니다. 저항 대신 가스 탱크의 연료 센서를 넣으면 액체 레벨 표시기가 나타납니다. 다음과 같은 표시기를 작성하는 것이 더 편리합니다. 1. 빈 탱크로 맥박 주파수를 측정합니다. 2. 볼륨을 추가하고(얻고자 하는 그라데이션 - 정확도에 따라) 빈도를 다시 측정합니다. 3. 용기 맨 위까지. 그리고 아래 그림과 같이 구조를 조립하면 다른 원리에 따라 액위 지시계를 만들 수 있습니다.
액체 레벨이 변경되면 자석이 있는 플로트의 위치도 변경되므로 해당 리드 스위치가 닫힙니다(열림). 벽이 얇은 플라스틱 튜브를 사용하는 것이 가장 좋습니다. 이 장치의 구성은 다음과 같습니다.
다음 알고리즘에 따라 이러한 장치의 정보를 처리할 수 있습니다.
Ø 일부는 D0-D7 버스를 읽기 모드로 전환할 필요가 없다고 반대할 수 있으며 이것이 작동합니다. 이에 대해 나는 다음과 같은 대답만 할 수 있습니다. 원하는 사람은 번역하지 마십시오. 이 주제에 대해서는 논의하지 않겠습니다. &H378 포트가 데이터 수신 모드에 있지 않고 사용된 핀(이 경우 2 - D0)이 논리 "1"인 경우 발전기가 작동하지 않습니다. 데이터 전송 모드에서 D0-D7 버스의 출력 전류는 CMOS 칩(561LA7)의 출력 전류보다 크므로 생성되지 않습니다. 물론 핀셋으로 접지 접점을 단락하면 전류가 충분하지 않습니다. 그러나 여분의 코드 줄을 입력하고 컴퓨터 하드웨어 개발자의 조언에 따라 수행하는 것이 어렵지 않은 것 같습니다. 이제 반대 과정, 즉 컴퓨터에서 장치로 데이터를 전송하는 프로세스. 예를 들어 동일한 펄스 발생기를 사용하고 회로를 약간 변경하십시오.
발전기에 전원을 공급한 후 갑자기 발전기가 작동하지 않는 것을 발견했습니다. 그리고 D2 요소의 입력 1.1에 논리 수준 "1"이 나타날 때만 작동합니다. DlPort쓰기포트Uchar &H378, 1 그리고 모든 것이 즉시 작동했습니다. 여기 컴퓨터 제어 발전기가 있습니다. 음, 발전기는 모두 작지만이 장치에 경의를 표해야합니다. 많은 전자 회로에서 기본으로 사용되는 것은 펄스 발생기입니다. 더 심각한 것을 컴퓨터에 연결해 볼까요? 여기 그런 계획이 있습니다
이 장치의 입력을 원하는 출력(예: D3)에 연결하고 GND 입력을 커넥터의 공통 와이어에 연결하지만 + 12V는 별도의 전원에서 가져와야 합니다. 릴레이는 자동차로 가져갈 수 있습니다. 일반적으로 요소의 모든 매개 변수는 완전히 다를 수 있습니다 (가까운 것을 취했습니다) DlPortWritePortUchar 및 H378, 8 또는 DlPortWritePortUchar 및 H378, 9 또는 DlPort쓰기포트Uchar &H378, 10 가장 중요한 것은 D3 버스에 "1" 로그가 있어야 한다는 것입니다. 릴레이는 작동하겠지만, 당신이 선택하는 것은 당신의 일입니다. 일반적으로 고전압 장치를 전환 할 때 일반적으로 고장에서 케이스까지 단락으로부터 자신을 보호해야합니다 (경우에 따라). 사고가 발생해도 멋진 LPT 포트가 타지 않도록 합니다. 따라서 이러한 연결의 경우 예를 들어 광 커플러를 통해 포트와 장치의 갈바닉 절연을 사용하는 것이 편리합니다.
장치의 모든 것이 "소진"되면 빛을 통해-아아, 전류가 흐르지 않고 아직 그런 일이 발생하지 않았습니다. 이것이 두 번째 부분이 끝나는 곳입니다. 세 번째 부분이 있습니까? 그럴 것이라고 생각하지만 여기에 관한 내용이 있습니다 ... 저자: Alexey Klyushnikov, Ivanovo; 간행물: cxem.net 다른 기사 보기 섹션 컴퓨터. 읽고 쓰기 유용한 이 기사에 대한 의견. 과학 기술의 최신 뉴스, 새로운 전자 제품: 터치 에뮬레이션을 위한 인조 가죽
15.04.2024 펫구구 글로벌 고양이 모래
15.04.2024 배려심 많은 남자의 매력
14.04.2024
다른 흥미로운 소식: ▪ 전자 제품은 음식과 음료의 단맛 수준을 평가합니다. ▪ 무선 전기
무료 기술 라이브러리의 흥미로운 자료: ▪ 기사 고대 그리스인들은 누구를 현대 인류의 조상으로 여겼습니까? 자세한 답변 ▪ 기사 컴퓨터 접지. 무선 전자 및 전기 공학 백과사전 이 페이지의 모든 언어 홈페이지 | 도서관 | 조항 | 사이트 맵 | 사이트 리뷰 www.diagram.com.ua |