Прелесть какая демонстрашка ! Долго игрался, завернул синус 7Гц, кот под стол спряталсяGudd-Head писал(а): Вот генератор, можешь послушать
пищалка на ATmega8
Re: пищалка на ATmega8
- Реклама
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: пищалка на ATmega8
Может DruidCat имеет в виду частоту дискретности звука, в принципе при дискретности звука 8кГц можно сгенерировать вполне разборчивый голос и при качестве 8 бит он занимает аж 8 kB памяти на 1 секунду, но это если без сжатия обычный WAV PCM формат.jordan писал(а):Друзья, к сожалению мы не можем услышать звуковые колебания на такой частоте - 36036 Гц... это уже ультра звук....
для пищалки 1000 Гц, больше уже не приятно для уха, режит слух
Re: пищалка на ATmega8
он хотел с помощью таймера с генерировать частоту и подать её на ножку мк, ну и на бузер соответственно...
задумка в том что б не использовать прерывание, задумка не плохая, так как экономится процессорное время, за счет того что ему не нужно обрабатывать прерывание, но эту экономию в таком проекте не заметить.... просто частота выбрана за пределами слышимого человеком
диапазона
задумка в том что б не использовать прерывание, задумка не плохая, так как экономится процессорное время, за счет того что ему не нужно обрабатывать прерывание, но эту экономию в таком проекте не заметить.... просто частота выбрана за пределами слышимого человеком
Re: пищалка на ATmega8
Вариантов куча, так как и в случае с генерированием, вариант решение выбирать разработчику программы, ну уж если вы решили генерировать с помощью задержки, хотя это не самый лучший вариант так как МК в это время больше ни чего делать не может а занят функцией задержки...
как теперь сделать чтобы пыщалка пол минуты пищала а пол молчала ?
завести счетчик который подсчитывает время ?
в вашем случае наверно легче всего с помощью цикла for
Код: Выделить всё
for( unsigned int=0; i<30000; i++)
{
PORTC|=(1<<1);
delay_us(500);
PORTC&=~(1<<1);
delay_us(500);
}
30000 это для 30 сек...
это самый простой вариант, но не самый оптимальный
Re: пищалка на ATmega8
лучше заюзать таймер ?jordan писал(а):хотя это не самый лучший вариант так как МК в это время больше ни чего делать не может а занят функцией задержки...
8 или 16 битный ?
Tell Me The Truth
- Реклама
Re: пищалка на ATmega8
ну вообще конечно лучше таймер, зависит от задачи, если от МК нужно что б он только пищал, то и так прокатит, а если нужно что б он в это время что то делал, например проверял какие то датчики или выводил изображение или текст или следил за чем то, то конечно нужно скинуть эту задачу на таймер и освободить ядро
Re: пищалка на ATmega8
у меня, в моей проге часов, уже задействован таймер Т2 по переполнению раз в 2мс и по сравнению, а также есть прерывание раз в 1с
Tell Me The Truth
Re: пищалка на ATmega8
веду расчет по данному калькулятору http://eugenemcu.ru/publ/5-1-0-49#auto_t1,t3
только для 0,5мс никакой таймер не подходит....., помогите, пожалуйста
только для 0,5мс никакой таймер не подходит....., помогите, пожалуйста
Tell Me The Truth
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: пищалка на ATmega8
Тактовая какая?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: пищалка на ATmega8
4 такта таймера с кварцем (или RC генератором) на 8 МГц и предделителем на 1024 дадут 0,512 мс.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: пищалка на ATmega8
Используй свободные регистры как собственные прескалеры.
Re: пищалка на ATmega8
Gudd-Head, спасибо !
zero648, раскажите по подробнгей о вашем методе, плиз
zero648, раскажите по подробнгей о вашем методе, плиз
Tell Me The Truth
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: пищалка на ATmega8
Подозреваю, в прерывании по переполнению таймера инкрементируешь какой-нибудь регистр, например R4. В основной программе его не трогаешь. Когда значение R4 достигнет опр. числа, значит время пришло.FreshMan писал(а):раскажите по подробнгей о вашем методе, плиз
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: пищалка на ATmega8
вот , сваял....., запищало
Спойлер
Код: Выделить всё
include <mega8.h>
#define BuzzerOn (PORTC|=(1<<1))
#define BuzzerOff (PORTC&=~(1<<1))
bit beep;
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
beep=~beep;
if (beep==1) BuzzerOn; else BuzzerOff;
}
void main(void)
{
PORTC=0x00;
DDRC=0x7F;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x04;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
Tell Me The Truth
Re: пищалка на ATmega8
а как теперь сделать чтобы биск был только первые пол секунды ? тоисть прерывистый 
Tell Me The Truth
Re: пищалка на ATmega8
вод сделал, чтобы пищалка пищала пол секунды
может кто-либо из МНОГОУВАЖАЕМОЙ публики подскажет более изощренный вариант, плиз 
Спойлер
Код: Выделить всё
#include <mega8.h>
#define BuzzerOn (PORTC|=(1<<1))
#define BuzzerOff (PORTC&=~(1<<1))
bit beep;
unsigned int counter;
interrupt [TIM1_COMPA] void timer1_compa_isr(void) // Timer срабатывает по совпадению через 0,512мс
{
beep=~beep;
if (++counter>=2000) counter=0; // считаем время до 1с
if ((beep==1)&&(counter<=1000)) BuzzerOn; else BuzzerOff;
//if (beep==1) BuzzerOn; else BuzzerOff;
}
void main(void)
{
PORTC=0x00;
DDRC=0x7F;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x04;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
Tell Me The Truth
Re: пищалка на ATmega8
все господа, с Божьей помощью, я справился и получил такой долгожданный звук пи-пи..., пи-пи.....,
эх...., знать бы еще как 7 симфонию Баха забабахать......, это был бы вообще высший пилотаж

Спойлер
Код: Выделить всё
#include <mega8.h>
#define BuzzerOn (PORTC|=(1<<1))
#define BuzzerOff (PORTC&=~(1<<1))
bit beep;
unsigned int counter;
interrupt [TIM1_COMPA] void timer1_compa_isr(void) // Timer ñðàáàòûâàåò ïî ñîâïàäåíèþ ÷åðåç 0,512ìñ
{
beep=~beep;
if (++counter>=2000) counter=0; // ñ÷èòàåì âðåìÿ äî 1ñ
if ((beep==1)&&((counter<=400)||((counter>=600)&&(counter<=1000)))) BuzzerOn; else BuzzerOff;
}
void main(void)
{
PORTC=0x00;
DDRC=0x7F;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x04;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
Tell Me The Truth
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: пищалка на ATmega8
В общем тоже не сильно сложно, но повозиться есть с чем, для ентого нужно один таймер настроить в режим СТС таким образом, чтобы он задавал частоту дискретности нот, длительность дискреты должна быть примерно равна или в несколько крат меньше длительности самой короткой ноты, второй таймер нужен с выходом OCx, его настраиваем тоже в режим СТС, а выход на "toggle on compare match", этим таймером изменяешь высоту нот или частоту, к этой же ноге подключаешь матюкальник.FreshMan писал(а):эх...., знать бы еще как 7 симфонию Баха забабахать......, это был бы вообще высший пилотаж![]()
![]()


