Intereting Posts
Как изменить файл DTB ядра Почему обязательное объявление функции обязательное в C ++, а не в C? Чтение значения регистра в переменной C Перемещение байтов и оставшихся значений, переданных в int (интересующихся дополнением двух) while (foo) vs while (foo! = NULL) Доступ к членам структуры, как если бы они были одним массивом? Предоставляет ли C возможность объявить внешнюю переменную как «только для чтения», но определить ее как записываемую? создание streamа внутри дочернего процесса Нет math.h include – значение возвращаемой функции sqrt? Как заставить эту функцию принимать произвольные строки? Получить скорость вращения диска Пример кода Конструктор типа Fortran, определенный с помощью функции C Расчет PI с использованием метода Монте-Карло дает неточный ответ Инициализация структуры C с помощью массива char getc () vs fgetc () – Каковы основные отличия?

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

обновление 2

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

Мне нужно получить значение бита WAV-файла, когда я говорю red (у этого есть бит-шаблон). Мой правильный вопрос, как можно получить значение бита моего .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; } 

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

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

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

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

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

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

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

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

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