![]() |
![]() |
|||||||||||||||
Мяукалка
Автор: Flasher Первым делом, конечно, самолеты, усы, лапы и хвост, но пора подумать и о Кисах. Лучший подарок своей Кисе - это Я (Кот). И совсем не плохо было бы признаться Кисе в любви по-человечески. Так-так…. Что для этого нужно? Вот!!! Придумал. Лапкой быстренько нажимаем на ярлычек Sound Forge. Давим на кнопку запись, выбираем частоту дискретизации 8 кГц, разрядность 8 бит и моно. А теперь, готовимся, и громко, закрыв лапами глаза, промяукиваем в микрофон признание в любви. Главное красноречиво и от всего сердца!!! Теперь его немного редактируем, придавая ему нотки томной нежности и убирая шумы и паузы. Сохраняем в формате raw с такими же параметрами. Самое главное - сделано. Теперь можно спокойно полакомиться сметанкой. Ой!!!! А как же Кисе передать свое признание? Не нести же компьютер к ней, да и самому неловко заявляться. Ааааа!!!! Срочно в сундук!!! Фантики, резиновые мышки, клубок….блин, не то… Вот оно- на самом дне валяется покусанный AT90S8515 -8PI. Ничего, он нам еще послужит. Теперь сохраненный raw файл с помощью утилиты BIN2C и громкого мяуканья превращаем в массив цифирек, понятный обгрызанному кусочку пластика с обломанными ножками. Запускаем наш удобный котовижен v2.05.05 и копируем получившиеся цифирки, весело настукивая лапками небольшую программку для вывода нашего признания в любви с помощью ШИМа. Вот что удалось настучать, вылакав две кружки молока, закусывая рыбкой. /***************************************************** Chip type : AT90S8515 AVR Core Clock frequency: 8,000000 MHz *****************************************************/ #include <90s8515.h> #include volatile unsigned char wait; #define MIAU_LEN 6837 // Полная версия в приложении __flash unsigned char miau_wave[]= { }; // Timer1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { if(wait)wait--; } void main(void) { unsigned int buffer_counter; unsigned char prohod=0; // Input/Output Ports initialization PORTA=0x00; DDRA=0x00;
PORTB=0x00; DDRB=0x00;
PORTC=0x00; DDRC=0x00;
PORTD=0x00; DDRD=0x00;
TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; TCCR1A=(1<
// Разрешаем глобальные прерывания #asm("sei")
while (1) {
buffer_counter=0; // начинаем с нулевого сэмпла
TCCR1B=(1< TIFR =(1< TIMSK=(1<
while (buffer_counter { while(wait); // ожидаем дважды прерывание переполнения таймера 1 - на один сэмпл держим 2 выборки ШИМа if (prohod&0x01)OCR1B = miau_wave[buffer_counter++]>>1; // загружаем очередной сэмпл в ШИМ и уменьшаем громкость в 2 раза каждый нечетный раз else OCR1B = miau_wave[buffer_counter++]; // загружаем очередной сэмпл в ШИМ wait = 2; // установка флага ожидания для нового сэмла } while(wait); // дожидаемся завершения вывода последнего сэмпла TIMSK = 0x00; // запрещаем все прерывания TCCR1B = 0x00; // останавливаем счётчик 1 prohod++; // Увеличиваем число мяуканий delay_ms(1700); } } Компилируем это чудо котоинженерной мысли, достаем из сундучка любимый AVR Dragon и начинаем злобно шипеть: «Пшшшшш…» Какие нехорошие индийские мусорные коты!!! Это же надо было додуматься убрать из него поддержку моего единственного погрызенного 90s8515. Пришлось из ниток и проводочков собирать адаптер для LPT. К погрызенному кусочку пластика нужно прикошачить кварц с конденсаторами и динамик через котоденсатор.
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |