Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.03.2007, 10:30
|
|
Частый гость
Регистрация: 28.07.2006
Сообщений: 24
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Запись в I2C EEPROM
Здравствуйте,помогите пожалуйста!
Пытаюсь записать в i2c eeprom из PIC, используя аппаратный i2c. Программа на PICС, моделирую в Proteus.
Код:
|
void InitMem ()
{
SCK_DIR=IN;
SDI_DIR=IN;
SSPCON=0b00101000;
SSPSTAT=0b10000000;
SSPADD=0b1010000;
return;
}
void WriteMem (unsigned int data)
{
SEN=1; //START
while (!SSPIF) {};
SSPIF=0;
SSPBUF=0b10100000; //адрес ПЗУ
while (!SSPIF) {};
SSPIF=0;
while (ACKSTAT) {};
SSPIF=0;
SSPBUF=0x00; //старший адрес ячейки
while (!SSPIF) {};
SSPIF=0;
while (ACKSTAT) {};
SSPIF=0;
SSPBUF=0x00; //младший адрес ячейки
while (!SSPIF) {};
SSPIF=0;
while (ACKSTAT) {};
SSPIF=0;
SSPBUF=0x00; //данные
while (!SSPIF) {};
SSPIF=0;
while (ACKSTAT) {};
SSPIF=0;
PEN=1; //STOP
while (!SSPIF) {};
SSPIF=0;
return;
} |
На выделенном участке I2C MemoruLog Messages (в Proteus) выдает:
1.550606273m [RX_ADDR(2) ]: *WARNING* Stop setup time violated. Clock positive edge was at 1.5505069m, setup time is 99.373n, minumum is 600.n).
и соответственно ничего не пишется.
В примере HiTech PICC по I2C такая же фигня.
-- Прилагается рисунок: --
|
|
|
|
07.03.2007, 12:52
|
|
Частый гость
Регистрация: 28.07.2006
Сообщений: 24
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Посмотрел в протеусе сигналы на линии с помощью I2CSPY. Процессор сразуже после передачи старшего адреса ячейки (т.е. второго байта посылаемой информации) дает на линию STOP. Может кто нибудь знает в чем дело?
|
|
|
|
07.03.2007, 13:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
по аглицки написано что нарушены временные интервалы -похоже паузу нужно добавить.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
07.03.2007, 14:31
|
|
Частый гость
Регистрация: 28.07.2006
Сообщений: 24
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
по аглицки написано что нарушены временные интервалы -похоже паузу нужно добавить.
|
PIC выставляет сам сигнал STOP (после второго отправленного байта). Этого не должно быть. Насколько я понял, STOP посылается при установке в 1 бита SSPCON2,PEN. EEPROM видит, что не все данные отосланы, а STOP выставлен, вот и пишется, что время не то.
Вопрос в том, почему PIC сам посылает STOP без команды?
|
|
|
|
07.03.2007, 15:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
т.е. почему он
while (ACKSTAT) {};
проскакивает ?
Шагайте по исходнику АСМ кнопкой F11 и смотрите осциллограммы сигналов и что там вообще творится.
Может протеус глючит или модель ПИКа.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
07.03.2007, 15:32
|
|
Частый гость
Регистрация: 28.07.2006
Сообщений: 24
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
[quote="avr123-nm-ru"]т.е. почему он
while (ACKSTAT) {};
проскакивает ?
quote]
В том то и дело, что он ничего не проскакивает, а просто выдает на линию STOP. "Когда его не просят"
|
|
|
|
07.03.2007, 15:34
|
|
Частый гость
Регистрация: 28.07.2006
Сообщений: 24
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
т.е. почему он
while (ACKSTAT) {};
проскакивает ?
|
Шагайте по исходнику АСМ кнопкой F11 и смотрите осциллограммы сигналов и что там вообще творится.
Может протеус глючит или модель ПИКа.
|
|
|
|
07.03.2007, 15:48
|
|
Частый гость
Регистрация: 28.07.2006
Сообщений: 24
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Прошу прощения за за последние посты, не на то нажал, запарился уже.
Итак:
Дело в том, что PIC ничего не проскакивает, он просто выдает на линию STOP, "когда его не просят"
|
|
|
|
07.03.2007, 16:08
|
|
Частый гость
Регистрация: 28.07.2006
Сообщений: 24
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Все разобрался
установил:
SSPCON=0b00101000;
STAT_SMP=1;
SSPCON2=0;
И настроил скорость:
SSPADD=0x15;
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Запись EEPROM Megi88
|
FedorChek |
Микроконтроллеры, АЦП, память и т.д |
3 |
23.03.2009 18:42 |
Запись в EEPROM pic16f628a
|
J-t |
Микроконтроллеры, АЦП, память и т.д |
6 |
22.01.2008 16:10 |
PIC,запись в EEPROM ?
|
retas |
Микроконтроллеры, АЦП, память и т.д |
6 |
30.11.2007 19:13 |
Запись в eeprom в ATtiny2313
|
Violett |
Микроконтроллеры, АЦП, память и т.д |
4 |
23.04.2006 23:19 |
Запись чтение в EEPROM
|
gnom |
Микроконтроллеры, АЦП, память и т.д |
2 |
24.02.2006 23:10 |
Часовой пояс GMT +4, время: 18:47.
|
|