Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 20.11.2008, 06:12  
elcreator
Прописка
 
Регистрация: 27.12.2005
Сообщений: 134
Сказал спасибо: 6
Сказали Спасибо 15 раз(а) в 7 сообщении(ях)
elcreator на пути к лучшему
По умолчанию Управление TEA6320 по I2C, CodeVision AVR

Управляю регулятором громкости TEA6320 при помощи меги16, в даташите описана последовательность:

1-2-3-4-3-5-3-6, где

1. S = START condition.
2. SLAVE ADDRESS (MAD) = 1000 0000.
3. A = acknowledge, generated by the slave.
4. SUBADDRESS (в моем случае 0000 0000)
5. DATA (в моем случае 0011 1111)
6. P = STOP condition.

Пишу вот как:
(шина висит на 2 и 3 бите порта D, оба подтянуты резисторами 1к к VCC)

#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=2
.equ __scl_bit=3
#endasm
#include ‹i2c.h›

//===//

i2c_init();

//===//

i2c_start();
i2c_write(0b10000000);
i2c_read(1);
i2c_write(0b00000000);
i2c_read(1);
i2c_write(0b00111111);
i2c_read(1);
i2c_stop();

Странно, что нигде не задается частота шины.
Код не работает, в чем может быть ошибка, подскажите пожалуйста. Может быть, у кого-то есть примеры работы? все что гуглится - это в основном память и микросхемы, для которых код и так отлично генерируется КодВижном.
Реклама:
elcreator вне форума  
Непрочитано 20.11.2008, 15:55  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию

C CVAVR не работал, но с I2C - много раз. Первое что бросается в глаза в вашем коде - это операции чтения после записи. Вроде как прием подверждающих сигналов ACK/NACK является частью функции i2c_write, поэтому чтение не нужно (по крайней мере так было везде, где я использовал I2C функции). Да, перепроверьте адрес чипа (0b10000000), как-то он подозрительно прост

i2c_start();
i2c_write(0b10000000);
i2c_write(0b00000000);
i2c_write(0b00111111);
i2c_stop();
alexgap вне форума  
Непрочитано 20.11.2008, 16:03  
elcreator
Прописка
 
Регистрация: 27.12.2005
Сообщений: 134
Сказал спасибо: 6
Сказали Спасибо 15 раз(а) в 7 сообщении(ях)
elcreator на пути к лучшему
По умолчанию

Перепроверил, так и есть посмотрел табличку - повезло чипу этому с адресом.
elcreator вне форума  
Непрочитано 20.11.2008, 16:26  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию

Вот еще, вспомнил, не забудьте подергать селекторы входов и фэйдеры, а то может просто работать, но в тихую
Посмотрел даташит. Хороший чип. Пологая характеристика у регулятора низких, довольно низкий уровень шумов и все это при демократичной цене. Наверное следующее "сердце" домашнего усилилителя буду делать на нем.
alexgap вне форума  
Непрочитано 20.11.2008, 16:41  
elcreator
Прописка
 
Регистрация: 27.12.2005
Сообщений: 134
Сказал спасибо: 6
Сказали Спасибо 15 раз(а) в 7 сообщении(ях)
elcreator на пути к лучшему
По умолчанию

Попробую конечно, как домой прийду - еще бы как-то отслеживать, передаются ли на чип команды по I2C или нет без осциллографа. Для начала программно проверю успех i2c_write(), но вот есть сомнения по поводу резисторов - не переборщил ли с подтяжкой (1кОм).
elcreator вне форума  
Непрочитано 20.11.2008, 20:22  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию

Подтяжка 1 кОм - вполне нормально. Если устройств на шине мало и провода не длинные, то можно увеличить до 4.7 кОм в целях экономии энергии
alexgap вне форума  
Непрочитано 21.11.2008, 15:24  
Matroskin22
Прохожий
 
Регистрация: 04.12.2007
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Matroskin22 на пути к лучшему
По умолчанию

Подключал часы реального времени DS3231 с интерфейсом I2C к микроконтроллеру ATmega16. Код писал в CodeVision, пользовался программным I2C, вот кусок кода:
#asm
.equ __i2c_port=0x18 ;PORTB
.equ __sda_bit=6
.equ __scl_bit=7
#endasm
#include ‹i2c.h›

//-----------------------------//
i2c_init();
//----------------------------//

void write_data(char adr, char data)
{ //функция записи
i2c_start(); //формируем состояние СТАРТ на шине
i2c_write(0xD0); //пишем адрес устройства(часов) + состояние “запись”
i2c_write(adr); //пишем адрес регистра внутри устройства(часов)
i2c_write(data); //пишем данные в выбранный регистр
i2c_stop(); //формируем состояние СТОП на шине
}
unsigned char read (char adr) //функция чтения
{
unsigned char data;
i2c_start(); //формируем состояние СТАРТ на шине
i2c_write(0xD0); //пишем адрес устройства(часов)
i2c_write(adr); //пишем адрес регистра внутри устройства(часов)
i2c_start(); //формируем состояние ПОВСТАРТ на шине
i2c_write(0xD1); //пишем адрес устройства(часов) + состояние “чтение”
data = i2c_read(0); //считываем данные из выбранного регистра
return data;
}
Получилось довольно удобно , а главное работоспособно.
По поводу резисторов подтяжки, использовал по 200 кОм, работа с микротоками, экономим батарейки.
Matroskin22 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
mRTOS - кооперативная ОС для AVR. Порт CodeVision. LVII Микроконтроллеры, АЦП, память и т.д 5 29.11.2008 14:44
Меню AVR Codevision theonebug Микроконтроллеры, АЦП, память и т.д 2 09.06.2008 21:48
Proteus пример TWI (I2C) для двух AVR EXIS Микроконтроллеры, АЦП, память и т.д 0 14.05.2008 21:43
Знатоки AVR и I2C нужна помощь Vlad68 Микроконтроллеры, АЦП, память и т.д 0 23.05.2007 17:51
Как работать с AT89C5131 в CodeVision AVR? lom771 Микроконтроллеры, АЦП, память и т.д 2 29.08.2006 16:51


Часовой пояс GMT +4, время: 19:12.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot