«

»

Dec 13

LCD dengan I2C Back Pack

Saat ini, tersedia driver LCD dalam kemasan I2C Back Pack, sehingga untuk memrogram LCD, cukup menggunakan dua pin I/O, secara I2C.

Di satu sisi, solusi ini menawarkan kesederhanaan, namun di sisi lain ada harga yang harus dibayar, yakni performa. Solusi LCD berbasis I2C lebih lambat dibanding berbasis paralel. Dengan fakta ini, maka, solusi I2C tidak disarankan untuk ditempatkan di dalam ISR – interrupt service routine.

Untuk penulisan teks “Hello NS.One” dan “Good jobs” di baris yang berbeda, memerlukan waktu ~ 25 ms, sementara dengan LCD parallel, perlu waktu 7 ms.

** Kedua aplikasi dijalankan pada board NS.One/16 @ 8 MHz.

Jadi, bila proses penulisan ini ditempatkan dalam ISR, bisa dibayangkan apa yang akan terjadi. Dari ujicoba yang dilakukan, sistem menggantung alias hang.

Bagaimana solusinya?

Kita bisa menggunakan ISR untuk men-toggle sebuah variabel, dimana variabel ini akan digunakan untuk menulis ke LCD, yang ditempatkan dalam super loop.

volatile boolean xtoggle = 0;

ISR ( TIMER1_OVF_vect )
{
  xtoggle = 1;
  TCNT1 = 65536 - 7812;  
}

void setup()
{
  Wire.begin();
  lcd.begin (16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
  TCCR1A = 0;
  TCCR1B = 0;
  bitSet(TCCR1B,CS10);
  bitClear(TCCR1B,CS11);
  bitSet(TCCR1B,CS12);
  bitSet(TIMSK,TOIE1);
  TCNT1 = 65536 - 7812;
}

void loop()
{
  if ( xtoggle ) {
    lcd.clear();
    lcd.print("Hello NS.One");
    xtoggle = 0;
  }
}