Например TDA7294

Форум РадиоКот • Просмотр темы - 8051 программный I2C. Не взлетело :(.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 15:26:22

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 11:06:01 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 227
Рейтинг сообщения: 0
Добрый день.
Недавно решил сделать программный I2C для микроконтроллера STC89C52RC. Поковырялся в тырнете, работающих сразу примеров не нашел. Погрустил, почитал DiHalt-а, поковырялся в разных чужих листингах, и решил написать еще один.
И вроде даже написал. Для начала традиционно взял EEPROM AT24C32N (меньше не нашлось). Программа состоит из двух частей, первая пишет в микросхему байт по нулевому адресу, вторая часть читает его оттуда, и показывает на полосковом светодиодном индикаторе. Но заработало не очень. Первая часть программы работает нормально, байт пишется - в этом я убедился, прочитав микруху программатором. Читает и показывает тоже нормально - байт, записанный программатором или первой частю программы - читается. Но все вместе это не работает.
Я решил узнать где происходит затык, для этого я использовал светодиод на контакте P1.0 , строчку зажигания которого размещал в разных частях программы. После какой инструкции не зажигался - там и затык. Оказалось что после перехода к чтению, и отправки аппаратного адреса микрухи, подпрограмма отправки стоит и ждет нуля на линии SDA, который микросхема не выдает. Если пропустить ACK - выдает невесть что.
Чё с этим делать - не знаю. Всю циклограмму обращения к микрухе проверил на соответствие даташиту пошагово и побайтно, раз 5. Есть ощущение что микросхема криво инициализирована, потому не выставляет готовность. Но если неправильно, почему тогда части программы работают правильно. Что я сделал не так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 11:27:57 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
шашек в руки я не брал давно... но когда разбирался, то написал i2c-мастера на ассемблере за пару часов. где-то валяется даже код...
но в гугле этого кода - как у дяди кота Матроскина гуталина!
вот например: https://github.com/ExploreEmbedded/8051 ... 0-libfiles - там есть файлики и для i2c, и выглядят правильными...

ну и последнее, но наиважнейшее: задавать вопрос "что я делю не так", не показав, что именно вы наделали - это абсолютно бессмысленный вопрос. не факт, что вам помогут после того, как увидят ваш код, но не видя кода вам не помогут однозначно.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 11:50:24 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 227
Рейтинг сообщения: 0
шашек в руки я не брал давно... но когда разбирался, то написал i2c-мастера на ассемблере за пару часов. где-то валяется даже код...
но в гугле этого кода - как у дяди кота Матроскина гуталина!
вот например: https://github.com/ExploreEmbedded/8051 ... 0-libfiles - там есть файлики и для i2c, и выглядят правильными...


Ну, попытка разобраться с С у меня не особо задалась. Мне бы ассемблер, а весь доступный в гугле ассемблер я уже попробовал.

Цитата:
ну и последнее, но наиважнейшее: задавать вопрос "что я делю не так", не показав, что именно вы наделали - это абсолютно бессмысленный вопрос. не факт, что вам помогут после того, как увидят ваш код, но не видя кода вам не помогут однозначно.

Ну я ссылку на листинг привел, так он слишком громоздкий чтоб его вставлять сюда.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 14:33:04 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Есть вроде такое (программный I2С на ассемблере)...
Надо в архивах порыться...
:roll:
Воть вроде раскопалось:
Вложение:
Новая папка.zip [6.27 KiB]
Скачиваний: 172

Однако относительно DS1307 чтение по предварительно заданному адресу там хотя и работает, но организованно не по фэншую.
:oops:
В принципе причина обнаружена и исправлена, но не в данных файликах - все лапы не дойдут стары тексты исправить.
8)


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 15:19:18 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Shuspano писал(а):
после перехода к чтению, и отправки аппаратного адреса микрухи
а не тут ли собачка-то порылась? написано "переход к чтению И отправка адреса" в то время как именно в байте адреса содержится бит чтения/записи, и перейти к чтению ДО или ВМЕСТО отправки адреса попросту нельзя.

Добавлено after 1 minute 51 second:
кстати, еще: после "записи" надо выдать STOP в шину и подождать, пока микросхема обновит страничку - мгновенно переходить к чтению нельзя, как я припоминаю, во всяком случае, к чтению из той же самой странички... могу ошибаться...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 15:23:22 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Скорее та же "затыковка", что и у меня была (причина появления "изврата")...
Посылаем адрес устройства , затем адрес данных (чтение по произвольному адресу)...и...
Если алгоритм проверки АСК используется после передачи адреса данных имеем проблему - в случае когда на краю байта возвращаемых данных первым на выход стоит нулик.
Я под Си ту ошибку подправил и замечание в конспектики записал..., а до асмовских заготовок лапы не дошли...
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 15:28:11 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
BOB51, вы, как всегда, написали так, что я вообще не понял, что там "и..." и почему. в протоколе ведущего i2c нет вообще никакой сложности ни с чем. небольшие "нюансики" есть как раз в записи микросхем памяти - там морока со страницами... но, в общем, тоже проблема скорее техническая, и легко решаемая.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 16:17:47 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 227
Рейтинг сообщения: 0
Ну как бы после окончания записи идет условие STOP, то бишь завершаю работу с микросхемой. Все прежде переданные туда данные стали недействительные. В следующей части программы, где происходит чтение, я инициализирую микросхему (INIT и START), передаю аппаратный адрес с битом ЗАПИСИ, как того требует даташЫт (и тут затык происходит), и передаю старшие и младшие байты адреса. Далее, не завершая работу с микросхемой, снова выставляю условие START, после чего, передаю аппаратный адрес микрухи с битом ЧТЕНИЕ. После отправки адресов, если ACK прошел, сразу вызываю цикл чтения. Прочитав байт, отвечаю NAK и STOP, и все, досвидонья. Эта циклограмма составлена на основании даташита епромки.
По тдельности все это работает, не работает когда вместе. Значит, микруха "портится" (может зависает, может не проходит STOP) при записи.


Вложения:
rndread.PNG [21.18 KiB]
Скачиваний: 158
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 18:58:46 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Передача байта ...
затем в "хвосте"
Полная проверка АСК ->
ждем нуль,
подтверждаем стробом и
ждем освобождения шины слэйвом - т.е 1 на SDA.
:roll:
НО... при передаче байта с R/W=1 следующая операция со стороны слэйва не прием, а передача того, что мы заказали.
И не факт, что первый бит заказанного равен 1.
Слейв то сразу же после строба выставил на SDA первый битик заказанного нами байта.
Посему в "хвосте" алгоритма проверки необходимо учитывать, что ответной 1 в этом случае ( R/W=1 ) мы можем и не дождаться.
Тогда как в общем случае (при передаче байта с R/W=0) ожидание ответной 1 по завершении АСК ОБЯЗАТЕЛЬНО.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 19:17:57 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 227
Рейтинг сообщения: 0
все, разобрался. Видимо, после STOP записи микруха не сразу освобождается, а я ее почти сразу снова инициализирую на чтение. Несколько "нупиков" после STOP исправили ситуацию. МК быстрее епромки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 19:28:40 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Вот потому и делается контроль 1 в полном фрагменте программки передачи с R/W=0.
Прежде чем послать очередной (командный или данных) байт ждем готовности слэйва.
8)
В то же время этот "полный контроль" подложит свинтуса при передаче командного байта с R/W=1.
Посему или две прожки передачи в зависимости от назначения или "универсальный хвост" с единой подпрограммой передачи байта.
Кому чего понятнее - так и делаем.
Воть как-то так...
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 20:20:27 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Shuspano писал(а):
Видимо, после STOP записи микруха не сразу освобождается
все временнЫе параметры микросхемы указаны в даташите. "несколько нупиков" - это путь к следующей ошибке. сделайте сразу правильно - разве это трудно?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 21:19:00 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 227
Рейтинг сообщения: 0
В любом случае, других средств кроме нупов у меня нет. Не буду же я заводить таймер из-за нескольких микросекунд.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 21:21:25 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
речь не о таймере или чем-то еще, а о том, что вместо "несколько" вы должны делать "сколько НУЖНО". в документации четко написано, сколько делать можно, а сколько нельзя. из-за того, что вы делали паузу слишком маленькой, вы уже попали на проблему, не измените подход - попадете еще не раз.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 21:47:11 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 227
Рейтинг сообщения: 0
Четко написано 4,7 мкс. Ну это пять машинных циклов.
Кстати, вопрос. Пишет микруха очень медленно. Написано что 20 мс. И вот когда она запишет, мне от нее ждать ACK, или молотить пустой цикл и тупить 20 мс?
20 мс это очень долго. Это, прикидочно, ~10 000 инструкций. И вот, если линию SDA перевесить на один из INT-ов, завести прерывание, и пока она, допустим пишет, заниматься чем-то другим. Интересно, так можно?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 21:53:57 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
не надо гадать, читайте даташит. вроде припоминаю я, что занятая записью микросхема не выставляет ACK при каких-то условиях... но вот при каких - не помню. идея в том, что можно время от времени к ней обращаться и узнавать, дописала она или нет.

Добавлено after 3 minutes 49 seconds:
кстати, все микросхемы памяти и2ц пишут не только побайтно, но и постранично, т.е. сразу по несколько байт, а время тратится при этом то же самое. так что вам выгоднее использовать страничную запись, если надо писать много данных. если страница 32 байта, то за те же 20 мс вы их сразу и запишите, а побайтно потратите в 32 раза большевремени!

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 22:55:44 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 227
Рейтинг сообщения: 0
Если вообще говорить, мне не очень нужен этот епром, мне нужен рабочий I2C Решил использовать в учебно-тренировочных целях, вроде не такая сложная.
Все равно, было интересно. Но если понадобится епром, возьму чего нибудь типа AT25020, там SPI, работа с ней не намного сложнее чем с 74HC595, и она быстрее, чем МК может шевелить ногами, там о задержках (кроме записи) не надо думать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051 программный I2C. Не взлетело :(.
СообщениеДобавлено: Ср мар 04, 2020 23:04:00 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Помимо стандартных значений имеют место и отклонения, вызванные схемотехникой... Там шинка в клубок свернулась... там обратный проводок "не туда" лишний ток пустил...
Лучше таки проверять завершение активности слэйва по факту, а не по жестко заданному интервалу.
:roll:
Это именно протокола программного обмена касается.
А уж далее отлаженную библиотечку примитива можно цеплять к конкретной мелкосхемке - как та мелкосхемка работает - это уже следующий уровень прожки.
8)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y