Atmega32+Tda1543

5-11-2014, 14:40 От: admin Посмотрели: 394
Здравствуйте. Подключил цап к мк, по даташиту написал процедуру передачи данных по I2S (синус, пила), прошил, запустил, пила работает а синус нет. Таблица синуса 100% рабочая.

Может кто работал с TDA1543 и протоколом I2S посмотрите код где ошибка:


#include <mega32.h>
#include <delay.h>
#define _XTAL_FREQ 16000000

#define DDRX DDRA
#define PORTX PORTA // Настройка порта (порт A)
#define WS 1 // Выход переключения канала (1 пин)
#define BCK 0 // Выход тактового сигнала (0 пин)
#define DATA 2 // Выход данных (2 пин)
#define Set_0_DATA PORTX &= ~(1 << DATA) // Установка "0" на линии данных
#define Set_1_DATA PORTX |= (1 << DATA) // Установка "1" на линии данных
#define BeginTakt PORTX &= ~(1 << BCK) // Установка "0" на линии тактирования
#define EndTakt PORTX |= (1 << BCK) // Установка "1" на линии тактирования
#define Select_A PORTX &= ~(1 << WS) // Установка "0" на линии выбора канала
#define Select_B PORTX |= (1 << WS) // Установка "1" на линии выбора канала
#define Init_I2S DDRX |= (1 << WS)|(1 << BCK)|(1 << DATA); PORTX &= ~((1 << WS)|(1 << BCK)|(1 << DATA)); // Настройка порта
const unsigned char sin_table[256] = { // Таблица синуса
0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, 5, 6, 7, 8,
9, 10, 12, 13, 15, 16, 18, 19, 21, 23, 25, 27, 29, 31, 33, 35,
37, 39, 42, 44, 46, 49, 51, 54, 56, 59, 62, 64, 67, 70, 73, 76,
79, 81, 84, 87, 90, 93, 96, 99, 103,106,109,112,115,118,121,124,
128,131,134,137,140,143,146,149,152,156,159,162,165,168,171,174,
176,179,182,185,188,191,193,196,199,201,204,206,209,211,213,216,
218,220,222,224,226,228,230,232,234,236,237,239,240,242,243,245,
246,247,248,249,250,251,252,252,253,254,254,255,255,255,255,255,
255,255,255,255,255,255,254,254,253,252,252,251,250,249,248,247,
246,245,243,242,240,239,237,236,234,232,230,228,226,224,222,220,
218,216,213,211,209,206,204,201,199,196,193,191,188,185,182,179,
176,174,171,168,165,162,159,156,152,149,146,143,140,137,134,131,
128,124,121,118,115,112,109,106,103,99, 96, 93, 90, 87, 84, 81,
79, 76, 73, 70, 67, 64, 62, 59, 56, 54, 51, 49, 46, 44, 42, 39,
37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 18, 16, 15, 13, 12, 10,
9, 8, 7, 6, 5, 4, 3, 3, 2, 1, 1, 0, 0, 0, 0, 0};
void Write_Data_I2S(unsigned char DataR, unsigned char DataL) // Процедура передачи двух байт TDA1543 по протоколу I2S
{
unsigned char i;
for (i = 0; i < 8; i++) //Цикл передачи 8 бит от старшего к младшему биту
{
BeginTakt; // Начало такта (0 -> BCK)
if (DataR & 0x80) Set_1_DATA; else Set_0_DATA; // Установка i-ого бита DataR на линии DATA
DataR = DataR << 1; // Переход к следующему биту
EndTakt; // Конец такта (1 -> BCK)
if (i == 6) Select_A; // По окончанию передачи предпоследнего бита меняем канал. (по даташиту)
}
for (i = 0; i < 8; i++) // То же самое для второго канала.
{
BeginTakt;
if (DataL & 0x80) Set_1_DATA; else Set_0_DATA;
DataL = DataL << 1;
EndTakt;
if (i == 6) Select_B;
}
}

void main(void)
{
unsigned char j = 0;
Init_I2S;
while(1)
{
j++;
Write_Data_I2S(sin_table[j], j); // Передаем в первый канал синус, второй - пила.
delay_us(5);
}
}

Сигналы на выходе цап:

Прикрепленные файлы:





  • Прикрепленный файл
     Signal.rar   13,12 Кб
      5 раз скачано




Раздел: AVR

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

Обсудить на форуме


На момент добавления Atmega32+Tda1543 все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031