X-Git-Url: https://vault307.fbx.one/gitweb/RPI-PICO-I2C-LCD.git/blobdiff_plain/0885f40b9f3d931e92571231da4d33bac29c07b1..refs/heads/main:/pico_i2c_lcd.py diff --git a/pico_i2c_lcd.py b/pico_i2c_lcd.py index d7941d8..fd83b8b 100644 --- a/pico_i2c_lcd.py +++ b/pico_i2c_lcd.py @@ -1,4 +1,5 @@ import utime +import gc from lcd_api import LcdApi from machine import I2C @@ -18,7 +19,7 @@ class I2cLcd(LcdApi): def __init__(self, i2c, i2c_addr, num_lines, num_columns): self.i2c = i2c self.i2c_addr = i2c_addr - self.i2c.writeto(self.i2c_addr, bytearray([0])) + self.i2c.writeto(self.i2c_addr, bytes([0])) utime.sleep_ms(20) # Allow LCD time to powerup # Send reset 3 times self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) @@ -35,45 +36,51 @@ class I2cLcd(LcdApi): if num_lines > 1: cmd |= self.LCD_FUNCTION_2LINES self.hal_write_command(cmd) + gc.collect() def hal_write_init_nibble(self, nibble): # Writes an initialization nibble to the LCD. # This particular function is only used during initialization. byte = ((nibble >> 4) & 0x0f) << SHIFT_DATA - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) + self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E])) + self.i2c.writeto(self.i2c_addr, bytes([byte])) + gc.collect() def hal_backlight_on(self): # Allows the hal layer to turn the backlight on - self.i2c.writeto(self.i2c_addr, bytearray([1 << SHIFT_BACKLIGHT])) + self.i2c.writeto(self.i2c_addr, bytes([1 << SHIFT_BACKLIGHT])) + gc.collect() def hal_backlight_off(self): #Allows the hal layer to turn the backlight off - self.i2c.writeto(self.i2c_addr, bytearray([0])) + self.i2c.writeto(self.i2c_addr, bytes([0])) + gc.collect() def hal_write_command(self, cmd): # Write a command to the LCD. Data is latched on the falling edge of E. byte = ((self.backlight << SHIFT_BACKLIGHT) | (((cmd >> 4) & 0x0f) << SHIFT_DATA)) - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) + self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E])) + self.i2c.writeto(self.i2c_addr, bytes([byte])) byte = ((self.backlight << SHIFT_BACKLIGHT) | ((cmd & 0x0f) << SHIFT_DATA)) - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) + self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E])) + self.i2c.writeto(self.i2c_addr, bytes([byte])) if cmd <= 3: # The home and clear commands require a worst case delay of 4.1 msec utime.sleep_ms(5) + gc.collect() def hal_write_data(self, data): # Write data to the LCD. Data is latched on the falling edge of E. byte = (MASK_RS | (self.backlight << SHIFT_BACKLIGHT) | (((data >> 4) & 0x0f) << SHIFT_DATA)) - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) + self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E])) + self.i2c.writeto(self.i2c_addr, bytes([byte])) byte = (MASK_RS | (self.backlight << SHIFT_BACKLIGHT) | ((data & 0x0f) << SHIFT_DATA)) - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) + self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E])) + self.i2c.writeto(self.i2c_addr, bytes([byte])) + gc.collect()