I2C LCD 직렬 인터페이스 보드에 텍스트가 표시되지 않습니다 (핀이 잘못 되었습니까?)


9

자체적으로 잘 작동하는 1602 LCD 화면이 있습니다. 그러나 별도로 구입 한 I2C / IIC LCD 컨트롤러를 사용하여 일부 핀을 풀고 싶었습니다.

컨트롤러가 올바른 주소로 Arduino UNO와 통신하는 것 같지만 텍스트를 표시 할 수 없습니다. 기본적으로 (코드 없음) LCD에 16 줄의 "사각"의 한 줄이있는 것 같습니다. 코드에서 주소 27을 사용하면 LCD가 16 줄의 2 줄로 바뀝니다 (아래 사진 참조). 이 코드는 백라이트가 3 번 깜박이도록 요구합니다. 그러나 나는 2 줄의 사각형을 얻을 수 없습니다. (전체 코드는이 질문의 맨 아래에 있습니다).

F Malpartida 의 LiquidCrystal_I2C 라이브러리 를 사용하고 있으며 일반적으로 사용되는 것 같습니다.
더 나은 라이브러리를 사용해야합니까?

코드에서 잘못된 핀이 사용되고 있는지 궁금합니다. 온라인에서 보는 모든 스케치는 다음 핀을 사용합니다.

//                    addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Set the LCD I2C address

그러나 아래에서 볼 수 있듯이 온라인에서 볼 수있는 모든 1602 LCD는 내 것과 같은 핀을 가지고 있습니다.

I2C LCD 컨트롤러

이 핀은 표준으로 보입니다.
1602 LCD 핀아웃

더 혼동을주기 위해 LCD 보드의 핀은 왼쪽에서 1로 시작하지만 기본 코드의 핀은 0으로 시작하는 것 같습니다! 그래서 코드의 핀을 LCD 보드의 숫자로 변경하려고했습니다. LCD는 더 이상 2 줄의 사각형으로 바뀌지 않으며 더 이상 백라이트를 깜박이지 않습니다. 그런 다음 각 핀에서 1을 빼고 (0에서 시작) 동일한 결과를 얻었습니다. 그런 다음 기본 핀에서 1을 뺀 동일한 결과를 사용했습니다. 따라서 기본 핀이 어떻게 더 정확합니까?! 내가 무엇을 잘못하고 있지?

다른 사람이 I2C 컨트롤러 중 하나를 사용하여 작동합니까?

전체 코드 :

/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
 terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here: 
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>

/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);  // Used to type in characters
  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

// ------- Quick 3 blinks of backlight  -------------
  for(int i = 0; i< 3; i++) {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on  

//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0  
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("HI!YourDuino.com");
  delay(8000);  

// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
  lcd.clear();
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print("Use Serial Mon");
  lcd.setCursor(0,1);
  lcd.print("Type to display");  

}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  {
    // when characters arrive over the serial port...
    if (Serial.available()) {
      // wait a bit for the entire message to arrive
      delay(100);
      // clear the screen
      lcd.clear();
      // read all the available characters
      while (Serial.available() > 0) {
        // display each character to the LCD
        lcd.write(Serial.read());
      }
    }
  }

}/* --(end main loop )-- */

풀업을 추가 한 것을 기억하십니까?
Ignacio Vazquez-Abrams


1
아마도 문제는 아니지만 전위차계를 사용하여 대비를 조정 해 보셨습니까? 코드의 숫자는 PCF8574 칩의 어느 핀이 LCD 보드의 어느 핀에 연결되어 있는지 나타냅니다. I2C 보드의 P3이 LCD의 백라이트 핀에 연결된 것 같습니다. 그러나 다른 핀은 어떻게 든 틀렸다고 생각합니다. 멀티 미터를 사용하여 PCF8574의 P0-P7 핀이 LCD 헤더의 어느 핀으로 이동하는지 확인하십시오.
Gerben

2
문제가되지 않더라도 LCD의 납땜 된 핀 헤더에주의를 기울여야합니다. 그림에서 구멍 주위의 구리를 완전히 덮지 않는 것처럼 보입니다. 먼저이 납땜 지점을 개선하려고합니다.
jfpoilpret

1
@Gerben, derp. 멀티 미터로 칩을 테스트했지만 여전히 완전히 혼란 스럽습니다. 칩의 핀 9-12는 lCD의 D4-D7에 해당합니다. 핀 6 = E, 5 = RW 및 4 = RS. 핀 7이 실제로 무엇인지 알 수 없습니다. 이 값을 사용하면 LCD에서 다시 응답하지 않습니다. 또한 그 핀에서 1을 빼야합니까? 다시, 모든 기본 코드는 핀 0 = RS를 갖습니다. 그러나 칩의 첫 번째 핀이 A0 (주소)이기 때문에 그렇게 할 수 없습니다. 기본적으로 단일 핀을 변경하면 백라이트 응답이 중단되거나 두 번째 행에 블록 문자가 표시되지 않습니다.
Bort

답변:


3

우선,이 전선이 올바르게 연결되지 않은 것처럼 보입니다.

여기에 이미지 설명을 입력하십시오

나는 전에 여성 점퍼를 분해하지 않았으므로 문제가되지 않을 수 있습니다. 그러나 이것이 원인 일 수 있습니다.

또한 트리머 (나사가있는 것처럼 보이는 파란색)를 돌려 대비를 조정 해야 합니다. 대비가 올바르게 설정되지 않으면 LCD에 아무것도 표시되지 않거나 텍스트가 씻겨 진 버전 또는 파란색 상자가 표시됩니다. 이것은 아마도 원인입니다.


점퍼는 사진 보드를 움직 였기 때문입니다. 또한 트리머를 이미 조정했으며 전체 블록이거나 전혀 없습니다.
Bort December

3

SainSmart 20x04를 구입했으며 주소를로 변경해야했습니다 0x3F. 백라이트 점퍼가 없어 I2C 보드의 오른쪽에있는 작은 헤더가 백라이트 전원을 제공합니다. 내가 찾은 일부 코드는 다음과 같습니다.

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

나는 똑같은 문제가 있으며 자습서 0x27에 있지만 내 장치에는 0x3F 인 LCD 1602A의 주소를 변경하여 문제를 해결합니다.

행운을 빕니다!


이 경우 에도이 줄을 바꿀 때 일했습니다 LiquidCrystal_I2C lcd(0x3F,16,2);. 고마워요!
Stefan

0

내가 아는 한, 풀업 저항은 디스플레이와 통합되어야합니다.

다른 주소를 사용해 보셨습니까? 비슷한 주소가 있는데 주소 0x3F에서 작동합니다. 아마도 이것이 도움이 될 것입니다.


보드는 "주소 27"로 판매되었으며 27은 전혀 응답하지 않는 유일한 주소입니다. 사진에서 볼 수있는 트리밍 포트 바로 위에 A1 A2 및 A3 핀을 납땜하여 실제로 사용자 정의 할 수 있습니다.
BORT

0

이 코드를 변경하십시오.

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

이에:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 8, POSITIVE);

( "포지티브"이전의 인수가 3에서 8로 변경됨)


1
왜 설명이 있습니까? PCF8574에는 P8이 없습니다.
tcurdt


-2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 6, 5, 7, 3, POSITIVE);  // Set the LCD

I2C 모듈 D6-> P5는 D5-> P6 (반전)입니다.


1
더 설명해 주시겠습니까?
Bort

2
제발 편집 게시물을하고 코드 서식 인하 (사 선행 공백)를 사용하여 코드를 포맷합니다. 도움이 필요하면 Markdown help를 참조하십시오 . 코드를 선택하고을 눌러 Ctrl+K브라우저에서이 작업을 수행 할 수 있습니다. 더 자세하게 대답하면 대답이 더 도움이 될 것입니다.
Nick Gammon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.