Произнести цвет, основанный на значениях битов, с помощью картинки 18f4550

обновление 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 ответа

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

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

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

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

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

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

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

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

Исходя из того, что вы сказали в ваших комментариях, звучит так, как будто вы хотите получить поток битов из 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 в своем ответе, это не имеет ничего общего с созданием звукового сигнала для произнесенных слов.

Другие вопросы по тегам