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

 
 
> I2C EEPROM, проблема.
ControllerZ
сообщение Aug 9 2005, 05:35
Сообщение #1


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

Группа: Свой
Сообщений: 197
Регистрация: 6-08-05
Пользователь №: 7 409



Есть такая проблема с микросхемой 24C08 После Start на микросхему могу записывать данные считывать все нормально но как только отправляю на нее Stop все микруха молчит и больше не реагирует на Start в чем проблема? smile3046.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Major
сообщение Aug 10 2005, 01:49
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 375



1. К коду следует давать коментарии (все таки "публичное выступление").
Установку линий в состояния можно было сделать "говорящими" макросами.

Рассмотрим кусочек вашего кода:

movlw 0xAA ; Записываем b'10101010' по заданному адресу
movwf Byte
call SendByte
call ACKTest ; Байт принят?
btfsc Err, 0 ; Если не принят то обработка ошибки
call OnError

call StopI2C ; Установка ЕЕПРОМ в режим Стоп

При выходе из процедуры SendByte имеем:
[B]SCL = L, SDA = L;


Далее вызов ACKTest:

ACKTest
clrf Err

clrf PORTA - это лишнее
bsf STATUS, RP0
movlw b'00011101' - !!! SCL должен так же быть как вход (подтяжка есть с наружи), так как slave устройство может ужерживать SCL в низком до момента выставления ACK.

movwf TRISA
bcf STATUS, RP0

bsf PORTA, SCL - см. выше
nop
nop
nop
nop
btfsc PORTA, SDA
bsf Err, 0
bcf PORTA, SCL

clrf PORTA
bsf STATUS, RP0
movlw b'00011100'
movwf TRISA
bcf STATUS, RP0
return

ВАМ НЕОБХОДИМО ПЕРЕПИСАТЬ ФУНКЦИЮ ОЖИДАНИЯ ACK
Пока что имеем - выход при состоянии линий (clrf PORTA ):

SCL=L,SDA=L;

Далее вызов StopI2C:

StopI2C
bcf PORTA, SCL
bcf PORTA, SDA

bsf PORTA, SCL
nop
nop
nop
nop
bsf PORTA, SDA
return

Вроде все корректно в вызове стопа, за исключением лишних метаний по переводу линий в состояние НИЗКИЙ.
Необходимо реализовать все функции так чтобы SCL всегда при выходе был в низком уровне, за исключением функции СТОП.

В общем необходимо разбраться с ACK, потом продолжим.
В рекомендациях от микрочипа написано что рулить надо не только уровнями линий, но и их направлением,
В пристежке файл исходников для пика, на языке С.
Та м в функции i2c_SendByte, тож вроде ошибка, коментарий есть а дела нет, если используется "чистый" пик (не С73 с недоделанным И2С).
/* SCL_DIR should be input here */
if(!SCL){

А SCL реально не переводиться на вход (хотя со встроенным модулем оно будет как вход).
Go to the top of the page
 
+Quote Post
ControllerZ
сообщение Aug 10 2005, 10:44
Сообщение #3


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

Группа: Свой
Сообщений: 197
Регистрация: 6-08-05
Пользователь №: 7 409



Спасибо все попробую сегодня вечерем перепишу прогу. smile3009.gif
Go to the top of the page
 
+Quote Post
ControllerZ
сообщение Aug 10 2005, 19:40
Сообщение #4


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

Группа: Свой
Сообщений: 197
Регистрация: 6-08-05
Пользователь №: 7 409



Все заработало огромное спасибо я все теперь сделал по умному smile.gif
Вот кто хочет глянуть как я это сделал смотрите.
Прикрепленные файлы
Прикрепленный файл  i2c_P.txt ( 3.41 килобайт ) Кол-во скачиваний: 78
 
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 15:11
Рейтинг@Mail.ru


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