문제

HD44780 LCD 화면이 있으며 Arduino Development 패키지와 함께 제공되는 액체 결정 라이브러리를 사용하고 있습니다. 그러나 신뢰할 수 없습니다. 나는 그것에 몇 가지 문제를 발견했고, 인터럽트 중심이되는 대신, 개발자가 칩이 작업을 실행하는 데 걸릴 필요가 있다고 생각하는 한 잠이 든다.

사양 시트에서 바쁜 플래그는 실행 중에 설정됩니다. 즉, 인터럽트 중심이 될 수 있습니다.

누구든지 실제로이 작업을 수행하는 라이브러리를 아는 사람이 있습니까? 8 비트를 모두 연결해야합니까, 아니면 4 핀으로 보관할 수 있습니까?

도움이 되었습니까?

해결책

나는 당신이 이것에 대한 인터럽트가 필요하다고 생각하지 않습니다. 보고 있습니다 액체 결정 .cpp Arduino 분포에서는 변경하면됩니다. LiquidCrystal::write4bits, LiquidCrystal::write8bits, 그리고 LiquidCrystal::pulseEnable 암호. 처음 두 가지 방법은 데이터를 작성하기 전에 바쁜 라인 (BD7)을 모니터링하여 시작해야하며 마지막 방법은 100US 일시 정지를 제거하기 위해 수정됩니다.

이것이 기본 코드에서 수행되지 않은 이유는 이러한 LCD의 많은 사용자가 R/W를 접지에 묶어 디스플레이가 항상 쓰기 모드에 있기 때문에 바쁜 신호를 읽을 수 없기 때문입니다. 그러나 이것은 _rw_pin을 -1로 설정하여 라이브러리로 전달되므로 펄스 및 쓰기 코드는 속도 최적화로 바쁜 것을 감지하는 방법으로 R/W 핀을 조건부로 사용할 수 있습니다.

다른 팁

3 개의 핀에 8 비트를 사용할 수 있습니다. 시프트 레지스터 만 있으면됩니다. Mouser.com에서 HEF4094BP를 사용하고 있습니다 (배송은 실제 칩보다 비용이 많이 듭니다).

시프트 레지스터의 배선 다이어그램 및 코드 수정은 다음과 같습니다. http://www.arduino.cc/playground/code/lcd3wires

얼마 전에 나는 바쁜 깃발을지지하기 위해 액체 결정 lib를 수정했습니다. 실제 인터럽트 구동 작동은 있습니다 ~ 아니다 가능 - 각 읽기마다 당신은 Enable 라인 두 번. 따라서 바쁜 깃발을 투표해야합니다.

그런 다음 바쁜 깃발을 폴링하는 것은 벤치 마크를 발견했습니다. 느리게 대부분의 명령을 기다리는 것보다. (예외는 '명확한'및 '홈'명령입니다). 그 이유는 읽기 모드와 쓰기 모드 사이를 전환하는 데 8 번의 추가 호출과 같은 부호 단계가 필요하기 때문입니다. digitaWrite 그리고 8 번의 추가 전화 pinMode. 16MHz Arduinos에서도 100µs를 기다리는 것보다 느리게.

그 후 나는 핀 레지스터를 직접 및 대량 모드로 조작하는 라이브러리를 작성했습니다. 하나의 레지스터 액세스가있는 8 개의 핀. 그 후 나는 여론 조사를 통해 약간의 혜택을 얻기 위해 야구장에있었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top