Ejemplo n.º 1
0
uint8_t noinline clock_rw(uint8_t read,uint8_t en)
{
    uint8_t data = 0;

    if (read)
    {   /* Datenbyte an PCF senden, DBx high zum lesen, sollte vor EN high Flanke geschehen */
        i2c_pcf8574x_set(HD44780_PCF8574_ADR, lcd_data | HD44780_PCF8574x_DBx_MASK);
		/* EN setzen */
        lcd_data |= _BV(HD44780_PCF8574x_EN);
		/* Datenbyte an PCF senden, DBx high zum lesen, EN uebertragen */
        i2c_pcf8574x_set(HD44780_PCF8574_ADR, lcd_data | HD44780_PCF8574x_DBx_MASK);
		/* Datenbyte von PCF lesen, daten_nibble maskiert */
        data = i2c_pcf8574x_read(HD44780_PCF8574_ADR) & HD44780_PCF8574x_DBx_MASK;
    }
    else
    {   /* Datenbyte an PCF senden, muss vor EN high Flanke geschehen */
        i2c_pcf8574x_set(HD44780_PCF8574_ADR, lcd_data);
		/* EN setzen */
        lcd_data |= _BV(HD44780_PCF8574x_EN);
		/* Datenbyte an PCF senden, EN status uebertragen */
        i2c_pcf8574x_set(HD44780_PCF8574_ADR, lcd_data);
    }

	/* EN loeschen */
    lcd_data &= ~(_BV(HD44780_PCF8574x_EN));
	/* Datenbyte erneut senden, EN status uebertragen */
    i2c_pcf8574x_set(HD44780_PCF8574_ADR, lcd_data);

    return data;
}
Ejemplo n.º 2
0
int16_t parse_cmd_i2c_pcf8574x_set(char *cmd, char *output, uint16_t len)
{
	uint8_t adr;
	uint8_t chip;
	uint8_t value;
	sscanf_P(cmd, PSTR("%u %u %x"), &adr, &chip, &value);

#ifdef ECMD_MIRROR_REQUEST
	uint8_t oadr = adr;
#endif

	if (chip == 0)
	{
		adr += I2C_SLA_PCF8574;
	}
	else
	{
		adr += I2C_SLA_PCF8574A;
	}
#ifdef DEBUG_I2C
	debug_printf("I2C PCF8574X IC address 0x%X, value:%X\n",adr, value);
#endif
	i2c_pcf8574x_set(adr, value);
#ifdef ECMD_MIRROR_REQUEST
	return ECMD_FINAL(snprintf_P(output, len, PSTR("pcf8574x set %u %u 0x%X"), oadr, chip, value));
#else
	return ECMD_FINAL(snprintf_P(output, len, PSTR("0x%X"), value));
#endif
}
Ejemplo n.º 3
0
void noinline
hd44780_hw_init(void)
{
  /* alle ausgaenge auf 0 setzen */
  lcd_data = 0;
#ifdef HD44780_BACKLIGHT_INV
  back_light = 1;
  lcd_data |= _BV(HD44780_PCF8574x_BL);
#endif

  i2c_pcf8574x_set(HD44780_PCF8574x_ADR, lcd_data);
}
Ejemplo n.º 4
0
void hd44780_backlight(uint8_t state)
{
    back_light = state;

	/* backlight status falls vorhanden uebernehmen */
	if(back_light)
        lcd_data |= _BV(HD44780_PCF8574x_BL);
    else
        lcd_data &= ~(_BV(HD44780_PCF8574x_BL));
	/* backlight status direkt uebertragen */
    i2c_pcf8574x_set(HD44780_PCF8574_ADR, lcd_data);
}
Ejemplo n.º 5
0
void noinline hd44780_hw_init(void)
{
	/* alle ausgaenge auf 0 setzen */
    lcd_data = 0;
    i2c_pcf8574x_set(HD44780_PCF8574_ADR, lcd_data );
}