Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

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

 
Опции темы

Управление TEA6320 по I2C, CodeVision AVR

Непрочитано 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.RUN
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 883
Сказал спасибо: 119
Сказали Спасибо 1,108 раз(а) в 175 сообщении(ях)
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.RUN
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 883
Сказал спасибо: 119
Сказали Спасибо 1,108 раз(а) в 175 сообщении(ях)
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.RUN
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 883
Сказал спасибо: 119
Сказали Спасибо 1,108 раз(а) в 175 сообщении(ях)
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, время: 05:34.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.