произнесите цвет, основанный на значениях битов, с помощью картинки 18f4550 - PullRequest
0 голосов
/ 02 мая 2011

обновление 2

Я хочу создать программу, которая может воспроизводить звук (например, красный, зеленый и синий) на моем изображении 18f4550, есть динамик, подключенный к Picdem, эта часть работает нормальнонаписал следующую программу с версией 6.83 микрочипа с компилятором C.

Мне нужно получить значение битов файла .wav, когда я говорю красный (это имеет битовую комбинацию).Мой правильный вопрос, как получить битовое значение моего WAV-файла.

void main (void)
{   

    TRISD = 0x00;               // PORTD  als uitgang
    TRISB = 0b00110000;         // RB4 en RB5 als ingang
    TRISA = 0x00;               // RA output

    RCONbits.IPEN = 0;  // interrupts
    INTCONbits.GIE = 1; 
    INTCONbits.RBIE = 1;

    while(1)
    {   
        _asm sleep _endasm  
    }
}

#pragma interrupt ISR
void ISR (void)
{
    int red[] = {bit values off sound red???};
    int blue[] = {bit values off sound green???};
    int green[] = {bit values off sound blue???};


    if (INTCONbits.RBIF==1)
    {
        if(PORTBbits.RB5==0)        // S3 pressed?
        {
            int i = 0;
            int b;
            do {
                LATAbits.LATA2 = rood[i];
                LATDbits.LATD1 ^= 1;
                b = 0;

                //do-while voor de frequentie (1500 is de freq)
                do {
                    b++;
                }while(b <= 2000);

                i++;
            }while(rood[i] <= 50);

            //LATDbits.LATD1 ^= 1;      // D2 togglen

        }

    }   
    INTCONbits.RBIF = 0;
}

Ответы [ 3 ]

2 голосов
/ 03 мая 2011

Ответ на оригинальный вопрос: Запрашиваемая вами «частота красного цвета в битах» составляет от 480 до 405 ТГц, поэтому в битах это от 111100000 до 110010101. Но вы также сказали «определено в нанометрах», то есть от 630 до 740 нм, то есть от 1001110110 до 1011100100 в двоичном Если вы хотите управлять громкоговорителем с помощью сигнала, вам потребуется либо образец звукового сигнала, либо микросхема синтеза речи. В любом случае, двоичные значения, которые я дал вам, не имеют ничего общего со звуком слова «красный», для которого понадобится намного больше битов для представления любого слышимого звука (например, минимум 0,5 секунды при PCM 16 кбит / с будет 8 кбит / с). = 1 кбайт).

Другим способом представления цвета в двоичном виде является система RGB, где красный будет 0xFF0000, а в двоичном виде - 111111110000000000000000.

Ответ на вопрос о том, как получить биты в wav-файле Сначала мы должны определить, где хранится файл WAV. Он может быть сохранен в виде константного массива в PIC или на внешнем запоминающем устройстве, где вы должны прочитать его по какой-либо последовательной или параллельной шине. Поскольку PIC18F4550 имеет 32 Кбайт флэш-памяти, если ваша программа довольно мала, может быть достаточно места для 3 файлов wav.

Затем мы должны определить, как оборудование будет воспроизводить звук. Похоже, вы пытаетесь отправить значение байта из битового порта, сдвигая его. Но чтобы сделать это правильно, нам нужно больше узнать об оборудовании, потому что вы не можете подключить динамик к битовому порту и ожидать звука (не без дальнейшей обработки сигнала PCM в любом случае - вы пытаетесь использовать 1 битный ЦАП дизайн? Если да, то здесь есть дополнительные примечания , но это довольно амбициозно).

Кроме того, значения битов в файле wav будут получены путем получения каждой выборки (8 бит?) В файле и сдвига значения маски 0x01 с помощью операции И для определения, какие биты были установлены.

1 голос
/ 02 мая 2011

Нет абсолютно никакой корреляции между двоичными значениями, составляющими кодировку для некоторых букв английского языка, и значениями PCM, которые составляют выборочную версию звука того, кто произносит закодированное слово.

Если вы хотите воспроизвести звук кого-то, говорящего «красный», вам сначала нужно будет сэмплировать его и где-то сохранить полученные биты, а затем подать их на ваш выход с соответствующей скоростью передачи битов.Сэмплированный звук, вероятно, будет намного больше, чем просто представление ASCII «красного» (24 бита).

Существуют интегрированные микросхемы, содержащие такие сэмплы, которые фактически могут генерировать звук при наличии ASCII-закодированное слово, один пример - это .Если у вас нет такого чипа, подключенного к MCU, ваш вопрос не имеет большого смысла.

1 голос
/ 02 мая 2011

Исходя из того, что вы сказали в своих комментариях, похоже, что вы хотите получить поток битов из ASCII-представления строки, такой как "red".Вы можете сделать это, зацикливаясь на каждом символе строки, а затем зацикливая на каждой битовой позиции:

const char *str = "I hate programming";

// Loop over each character
for (i = 0; i < strlen(str); i++)
{
    // Loop over each bit
    for (j = 0; j < 8; j++)
    {
        // Extract bit #j of character i, using bit-shift and mask
        bit = (str[i] >> j) & 1;

        // bit will be 0 or 1, so do something with it here
    }
}

Если вы хотите, чтобы биты в каждом символе были в противоположном порядке, то просто измените порядоквнутренний (j) цикл.

Обратите внимание, что, как говорит @unwind в своем ответе, это не имеет ничего общего с фактическим генерированием формы звукового сигнала для произнесенных слов.

...