@Vadimm1001

Не удается подключиться к расширителю PCF8574T?

Вот код:
#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>
#include <math.h>

#include "lcd_func.h"



unsigned char twi_start(void)
{
	TWCR|=(1<<TWINT)|(1<<TWEN)|(1<<TWSTA);
	while(!(TWCR & (1<<TWINT)));
	return TWSR;
}

unsigned char twi_write(unsigned char data)
{
	TWDR=data;
	TWCR|=(1<<TWINT)|(1<<TWEN);
	while(!(TWCR & (1<<TWINT)));
	return TWSR;
}

void twi_stop(void)
{
	TWCR|=(1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
}

int main (void)
{
	_delay_ms(1000);
	lcd_init();
	TWBR=2;
	lcd_integer(twi_start());	// Выводит 0x08
	lcd_integer(twi_write(0b01000000)); /*Это адрес с битом записи, выводит 0х20, то есть ведомый 
        ответил NACK */
	lcd_integer(twi_write(0x01)); /*Это просто значение которое хочу записать в порт PCF8574T выводит 0х10 то есть поступил повторный старт.*/
	while(1);

Мк настроен на тактовую частоту 1Мгц от внутреннего генератора. Запитал микроконтроллер с одной стороны, то есть подключил только к VCC и GND. На осциллографе линия SDA и SCL поднимается примерно на секунду и все дальше ничего нет. В протеусе все работает. На микросхеме написано PCF8574T, а не PCF8574 и не PCF8574А.
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 3
@wibsea
Какие уровни на A0,A1,A2?
Ответ написан
@BadElectrician
C++ это хобби
Посмотрите даташит внимательно.
Расширители на такой частоте не работают. 100 кГц вот примерно их диаппазон. В даташитах приводится примеры как настраивать частоту линий . Плюс очень влияет на линии пердачи данных эл емкость линий так что это вопрос не только программый но и аппаратный
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы