реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> I2C slave device на PIC16F84A, помогите написать програмный I2C-slave
ssps
сообщение Mar 23 2006, 05:22
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-03-06
Пользователь №: 15 322



Может кто-нибудь уже писал для PIC'ов I2C-slave device?
Поделитесь, пожалуйста...
Или дайте ссылку на это.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Mar 25 2006, 01:51
Сообщение #2


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Полноценный слэйв? Разве это возможно? Для слэйва времянка слишком строгая, программа не успеет. Мастера можно написать без проблем, а для слэйва лучше юзать что-нибудь вроде PIC16F74
Go to the top of the page
 
+Quote Post
vm1
сообщение Apr 4 2006, 08:44
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 978



IIC slave писал на 12С508 и 16С73.
В первом случае максимальная скорость не более 20кГц, причём приходилось блокировать SCL согласно спецификации - следовательно мастер должен это понимать, и ждать пока SCL не освободят. Реально нормальный IIC slave- начиная с 16C73 и выше, где есть аппаратная поддержка.
Цитата(ssps @ Mar 23 2006, 09:22) *
Может кто-нибудь уже писал для PIC'ов I2C-slave device?
Поделитесь, пожалуйста...
Или дайте ссылку на это.
Go to the top of the page
 
+Quote Post
alekseykoj
сообщение Apr 4 2006, 09:39
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 8-11-05
Пользователь №: 10 602



Ну а что там сложного. Если физику I2C понимаешь. Если не забуду принесу свой проект. скину.
Go to the top of the page
 
+Quote Post
molex
сообщение Sep 4 2006, 16:28
Сообщение #5





Группа: Участник
Сообщений: 4
Регистрация: 31-08-06
Пользователь №: 19 993



Помогите пожалуйста разобраться с аппаратной поддержкой I2C
Контроллер PIC16f873
Вопрос такой Установка скорости обмена
На стр. 78 даташита сказано что она устанавливается по формуле f= fген/(4*(sspadd+1)
причем за скорость отвечают семь младших бит, и в этот же регистр записывается адресс при работе в режиме ведомого Я не могу догнать этот регистр двухбайтовый? И как в него записать требуюмое мне значени.
Если у кого нибудь есть программки аппаратной реализауии I2C на асемблере или С буду очень благодарен если вы ими поделеитесь biggrin.gif
Go to the top of the page
 
+Quote Post
upc2
сообщение Sep 5 2006, 04:42
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



И на asm., и на С
Прикрепленные файлы
Прикрепленный файл  AN736.rar ( 433.54 килобайт ) Кол-во скачиваний: 132
 
Go to the top of the page
 
+Quote Post
molex
сообщение Sep 5 2006, 18:59
Сообщение #7





Группа: Участник
Сообщений: 4
Регистрация: 31-08-06
Пользователь №: 19 993



Спасибо посмотрел ваши файлы
Вот код подлючения модуля и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 но я его сдалел несколько наносек.
Go to the top of the page
 
+Quote Post
upc2
сообщение Sep 6 2006, 05:50
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



Если этот код из приведенного мною примера, то i2c_bus_rate=400000 (десятичное),
а FOSC = 16000000 (десятичное).
Для 100кГц i2c_bus_rate=100000.
Go to the top of the page
 
+Quote Post
Harvester
сообщение Sep 6 2006, 07:06
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(molex @ Sep 4 2006, 20:28) *
Помогите пожалуйста разобраться с аппаратной поддержкой I2C
Контроллер PIC16f873
Вопрос такой Установка скорости обмена
На стр. 78 даташита сказано что она устанавливается по формуле f= fген/(4*(sspadd+1)
причем за скорость отвечают семь младших бит, и в этот же регистр записывается адресс при работе в режиме ведомого Я не могу догнать этот регистр двухбайтовый? И как в него записать требуюмое мне значени.
Если у кого нибудь есть программки аппаратной реализауии I2C на асемблере или С буду очень благодарен если вы ими поделеитесь biggrin.gif


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


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
molex
сообщение Sep 6 2006, 18:06
Сообщение #10





Группа: Участник
Сообщений: 4
Регистрация: 31-08-06
Пользователь №: 19 993



[/quote]
При работе в режиме ведомого скорость обмена задается ведущим, и это регистр можно использовать для задания адреса. А в режиме ведущего, соответственно, отсутствует понятие адреса.
[/quote]
И вправду как все логично получается biggrin.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 02:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016