Перейти к содержанию
    

I2C slave device на PIC16F84A

Может кто-нибудь уже писал для PIC'ов I2C-slave device?

Поделитесь, пожалуйста...

Или дайте ссылку на это.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Полноценный слэйв? Разве это возможно? Для слэйва времянка слишком строгая, программа не успеет. Мастера можно написать без проблем, а для слэйва лучше юзать что-нибудь вроде PIC16F74

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

IIC slave писал на 12С508 и 16С73.

В первом случае максимальная скорость не более 20кГц, причём приходилось блокировать SCL согласно спецификации - следовательно мастер должен это понимать, и ждать пока SCL не освободят. Реально нормальный IIC slave- начиная с 16C73 и выше, где есть аппаратная поддержка.

Может кто-нибудь уже писал для PIC'ов I2C-slave device?

Поделитесь, пожалуйста...

Или дайте ссылку на это.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну а что там сложного. Если физику I2C понимаешь. Если не забуду принесу свой проект. скину.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите пожалуйста разобраться с аппаратной поддержкой I2C

Контроллер PIC16f873

Вопрос такой Установка скорости обмена

На стр. 78 даташита сказано что она устанавливается по формуле f= fген/(4*(sspadd+1)

причем за скорость отвечают семь младших бит, и в этот же регистр записывается адресс при работе в режиме ведомого Я не могу догнать этот регистр двухбайтовый? И как в него записать требуюмое мне значени.

Если у кого нибудь есть программки аппаратной реализауии I2C на асемблере или С буду очень благодарен если вы ими поделеитесь :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо посмотрел ваши файлы

Вот код подлючения модуля и2с

void Init_Ssp( void )

{

TRISC |= 0b00011000; // ensure SDI and SD0 are inputs

SSPIF = 0; // reset I2C based interrupt flag

SSPCON2 = 0b00000000; // ensure all state bits are reset

SSPSTAT = 0b00000000; //

SSPADD = (( FOSC / (4 * i2c_bus_rate) )) - 1; // initialize i2c bus rate

SSPCON = 0b00111000; // Master I2C mode

}

Вторая строчка снизу Что записать в SSPADD чтобы частота SCL была приблизительно 100кГц

 

Пишу программу для чтения из 24С04 Использую компилятор MicroC. Написал программу с помощью стандартных библиотек встроеных в этот компилятор. Начал отлаживать в Протеусе и при помощи логического анализатора посмотрел временные диаграммы. Все нормально но не работает

Переписал программу програмно и все заработало Отличие от перво программы было в так называемом времени удержания данных(время когда линия scl меняет значение с 1 на 0 и до прихода нового бита информации на sda) Хотя оно по документации может равняться 0 но я его сдалел несколько наносек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если этот код из приведенного мною примера, то i2c_bus_rate=400000 (десятичное),

а FOSC = 16000000 (десятичное).

Для 100кГц i2c_bus_rate=100000.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите пожалуйста разобраться с аппаратной поддержкой I2C

Контроллер PIC16f873

Вопрос такой Установка скорости обмена

На стр. 78 даташита сказано что она устанавливается по формуле f= fген/(4*(sspadd+1)

причем за скорость отвечают семь младших бит, и в этот же регистр записывается адресс при работе в режиме ведомого Я не могу догнать этот регистр двухбайтовый? И как в него записать требуюмое мне значени.

Если у кого нибудь есть программки аппаратной реализауии I2C на асемблере или С буду очень благодарен если вы ими поделеитесь :biggrin:

 

При работе в режиме ведомого скорость обмена задается ведущим, и это регистр можно использовать для задания адреса. А в режиме ведущего, соответственно, отсутствует понятие адреса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При работе в режиме ведомого скорость обмена задается ведущим, и это регистр можно использовать для задания адреса. А в режиме ведущего, соответственно, отсутствует понятие адреса.

И вправду как все логично получается :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...