|
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
|
|
Проблема с i2c шиной22.10.2010, 14:49. Показов 6339. Ответов 8
Метки нет (Все метки)
На шине 3 устройства: микроконтроллер ADuC812 (Master), микросхема EEPROM AT24C01 (Slave) и микросхема часов DS1307 (Slave).
Проблема в следующем - при обращении к микросхеме памяти и посылке байта, она не принимает байт, и посылает сигнал неподтверждения (NOACK). Адресные входы микросхемы EEPROM посажены на землю, поэтому адрес устройства 000. Посылаю байт: 10100001, на девятом тактовом импульсе на SDA устанавливается 1. Ниже приведен кусок кода программы: (MDE - SDA на ввод или на вывод, MDO-бит который выдается на SDA, MCO-бит который выдается на SCL, MDI-в режиме приемника бит принятый с y2s записывается в MDI) void main(void) { Init(); I2C_Start(); I2C_Send_byte(0xA1); I2C_Stop(); while(1) { } } void I2C_Start(void) { I2C_BUSY=1; MDE=1; //SDA output delay_ms(); MDO=1; delay_ms(); MCO=1; I2C_NOACK=0; I2C_ERROR=0; delay_ms(); if(MCO=0) { I2C_MISTAKE=0; send_lcd_symbol(set_first_line+1, E);}; if(MDO=0) { I2C_MISTAKE=0; send_lcd_symbol(set_first_line+2, E);}; delay_ms(); MDO=0; delay_ms(); MCO=0; //Start } void I2C_Send_byte(char byte) { unsykned char bits; MDE=1; MDO=0; MCO=0; for(bits=0;bits<8;bits++) { if((byte&0x80)==0x80) { MDO=1; delay_ms(); MCO=1; delay_ms(); MCO=0; send_lcd_symbol(set_first_line+bits, 1); } else { MDO=0; delay_ms(); MCO=1; delay_ms(); MCO=0; send_lcd_symbol(set_first_line+bits, 0); }; byte=byte<<1; } MDE=0; MCO=1; delay_ms(); if(MDI==1) { I2C_NOACK=1; send_lcd_symbol(set_first_line+12, N); } else { send_lcd_symbol(set_first_line+14, A);}; MCO=0; }
0
|
|
| 22.10.2010, 14:49 | |
|
Ответы с готовыми решениями:
8
Проблема с I2C, а можетбыть с питанием... проблема с I2C. Proteus, проблема с i2c |
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
| 23.10.2010, 19:39 | |
|
AT24C01 работает без адресации. То есть там не TWI, а его обрубок.
Адрес, который ты ей посылаешь, она принимает за адрес в памяти, и пытается прочитать байт по адресу 10100001. Так-как у ней 128 байт памяти, адрес выходит за рамки. Поэтому она не посылает ACK. Нормальная адресация начинается с AT24C02. ЕМНИП...
0
|
|
|
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
|
|
| 23.10.2010, 23:40 | |
|
Странно, в даташите сказано что нужно посылать байт с фиксированной частью 1010, потом адрес микросхемы и бит чтения или записи. Может тут как то DS1307 виновата? Кстати как не обратиться, у нее ведь нет адресных входов?
0
|
|
|
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
|
|
| 24.10.2010, 00:08 | |
|
Япона мать. Прошу прощения, микросхема памяти - 24C32 даташит - http://www.atmel.som/dyn/resources/prod ... oc0336.pdf
Хорошо что пины расположены одинаково, а то пришлось бы плату переделывать. Собтвенно проблему то это не решает, сигнал АСК все равно отсутствует.
0
|
|
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
||||||
| 24.10.2010, 00:23 | ||||||
|
Запустите программу в какой-нибудь виртуалке (Протеус , например) и посмотрите, какой сигнал формируется МК. Потом сравните с тем сигналом, что в ДШ на память.
0
|
||||||
|
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
|
|
| 24.10.2010, 00:39 | |
|
Просто неизвестно в каком состоянии она нахдится после команды MDE=1. Подтягивающие резисторы стоят, внешние, 4.7 кОм.
0
|
|
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
||||||
| 24.10.2010, 00:50 | ||||||
|
Я немного не про то. После выполнения этого кода, линия будет намертво прибита к питанию, и если её попытается прижать к земле другое устройство, то что-нибудь сгорит.
У меня старт реализован так:
0
|
||||||
|
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 55
|
|
| 24.10.2010, 01:26 | |
|
delay_ms() ну "на глаз" примерно 1мс. Если учесть что одна итерация выполняется за один машинный цикл. Кварц 12 МГц.
0
|
|
| 24.10.2010, 01:26 | |
|
Помогаю со студенческими работами здесь
9
Проблема с I2C (ATMEGA128 + DS50PCI401) Проблема согласования логических уровней I2C I2C на stm32-discovery непонятная проблема STM32F051, I2C, SPl, проблема с запуском шины R5 1600af есть ли проблема с шиной инфинити фабрик? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
|