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

 
 
> Программный I2C Atmega 8, Не могу считать.
ikm
сообщение Aug 14 2017, 15:26
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Пытаюсь считать данные из регистров устройства. Но не получается.
Возникло много вопросов:
1. Вопрос и самый главный где CAVR можно выставить частоту I2C. У меня версия 2.05 -вкладки I2C в свойствах проекта нет, но при этом есть в визарде, но там не указана частота, только назначение выводов.
Пытался сменой частоты МК, но тут тоже странности. По дефолту стоит на 8 МГц, когда меняю на 16 МГц, CAVR пишет, что SCL будет увеличен до 430 кГц, но по факту (смотрю осцилографом частота становится меньше), соответственно ставлю 1 МГц, прога предупреждает что SCL снизится до 200 кГц, но по факту она возрастает.
2. Запустил проверку кода в Протеусе, анализатор показывает последовательность верную. Запускаю в железе, ответа не получаю. При этом запись проходит успешно.
Несколько раз проходило считывание. Но не систематически и повторить не удалось.

Код использовал стандартный, по идее 100% рабочий
Код
unsigned char TDA_read(unsigned char address) //Функция чтения из TDA
{
i2c_start();                                    // "Cтарт" на шину I2C
i2c_write(TDA_5414_Adr);             // адрес TDA
i2c_write(address);                       //Регистр откуда считываем ошибки
i2c_start();                                  //RE "старт" в шину
i2c_write(TDA_5414_Adr | 1);     //Обращаемся к TDA в режиме чтения, т.е. по адресу 11011001
data=i2c_read(0);                       //Принимаем данные с шины и сохраняем в переменную
i2c_stop();                                 //Посылаем команду "Cтоп"
return data;                              //Возвращаем значение прочитанного
}

.....
Вызов функции для проверки что получен правильный ответ.:
TDA_read(0x00);                        //Считываем ошибки по адресу 0х00
Data_call = data;
if (Data_call == 0x30) led1_on(), led2_on();


подключение сейчас на небольших ~5см, проводах.
Ниже скрины осциллограмм команды считывания через переходник USART-I2C, через него проходит исправно, а так же с Atmega, на "пониженной" скорости (кристалл на 16МГц). На скринах разное разрешение по горизонтали.
У же даже не знаю куда копать.

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post



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

 


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


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