Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: I2C slave device на PIC16F84A
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
ssps
Может кто-нибудь уже писал для PIC'ов I2C-slave device?
Поделитесь, пожалуйста...
Или дайте ссылку на это.
=AK=
Полноценный слэйв? Разве это возможно? Для слэйва времянка слишком строгая, программа не успеет. Мастера можно написать без проблем, а для слэйва лучше юзать что-нибудь вроде PIC16F74
vm1
IIC slave писал на 12С508 и 16С73.
В первом случае максимальная скорость не более 20кГц, причём приходилось блокировать SCL согласно спецификации - следовательно мастер должен это понимать, и ждать пока SCL не освободят. Реально нормальный IIC slave- начиная с 16C73 и выше, где есть аппаратная поддержка.
Цитата(ssps @ Mar 23 2006, 09:22) *
Может кто-нибудь уже писал для PIC'ов I2C-slave device?
Поделитесь, пожалуйста...
Или дайте ссылку на это.
alekseykoj
Ну а что там сложного. Если физику I2C понимаешь. Если не забуду принесу свой проект. скину.
molex
Помогите пожалуйста разобраться с аппаратной поддержкой I2C
Контроллер PIC16f873
Вопрос такой Установка скорости обмена
На стр. 78 даташита сказано что она устанавливается по формуле f= fген/(4*(sspadd+1)
причем за скорость отвечают семь младших бит, и в этот же регистр записывается адресс при работе в режиме ведомого Я не могу догнать этот регистр двухбайтовый? И как в него записать требуюмое мне значени.
Если у кого нибудь есть программки аппаратной реализауии I2C на асемблере или С буду очень благодарен если вы ими поделеитесь biggrin.gif
upc2
И на asm., и на С
molex
Спасибо посмотрел ваши файлы
Вот код подлючения модуля и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 но я его сдалел несколько наносек.
upc2
Если этот код из приведенного мною примера, то i2c_bus_rate=400000 (десятичное),
а FOSC = 16000000 (десятичное).
Для 100кГц i2c_bus_rate=100000.
Harvester
Цитата(molex @ Sep 4 2006, 20:28) *
Помогите пожалуйста разобраться с аппаратной поддержкой I2C
Контроллер PIC16f873
Вопрос такой Установка скорости обмена
На стр. 78 даташита сказано что она устанавливается по формуле f= fген/(4*(sspadd+1)
причем за скорость отвечают семь младших бит, и в этот же регистр записывается адресс при работе в режиме ведомого Я не могу догнать этот регистр двухбайтовый? И как в него записать требуюмое мне значени.
Если у кого нибудь есть программки аппаратной реализауии I2C на асемблере или С буду очень благодарен если вы ими поделеитесь biggrin.gif


При работе в режиме ведомого скорость обмена задается ведущим, и это регистр можно использовать для задания адреса. А в режиме ведущего, соответственно, отсутствует понятие адреса.
molex
[/quote]
При работе в режиме ведомого скорость обмена задается ведущим, и это регистр можно использовать для задания адреса. А в режиме ведущего, соответственно, отсутствует понятие адреса.
[/quote]
И вправду как все логично получается biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.