роботы робототехника микроконтроллеры


 Страниц (17): В начало « ... 9 10 11 12 [13] 14 15 16 17 »   

> Без описания
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



mihail пишет:
Думаю, звук проще получить чисто аппаратными средствами. Посмотрите режим работы таймера/счетчика CTC (Clear Timer on Compare Match).
а я у себя в Коллибри UART-ом пикал Улыбка
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Оригинальнинько Улыбка
 
 Top
zatmenie Post Id



Генерал


Сообщений всего: 97
Дата рег-ции: Май 2009  



mihail пишет:
Если программа компилируется, то работать она будет. Но, это вовсе не означает, что программа будет работать так как Вы хотите.

Если Вы не меняли Fuse Bits и не ставили кварцевый резонатор и т.д. т.п., то с данной программой МК работает на частоте 8 MHz, а не 4 MHz. Это важно. Компилятор должен знать на какой частоте МК будет выполнять программу.

Думаю, звук проще получить чисто аппаратными средствами. Посмотрите режим работы таймера/счетчика CTC (Clear Timer on Compare Match).

PS У меня такое чувство, что где-то в сети, я такое уже видел. Это я про извлечение звука из МК с помощью СТС.

PPS Звук слышимый человеком это колебания с частотой 20 - 20000 Hz. Лучше всего воспринимаются 3000 - 8000 Hz.

fuse биты я выставил так: CKSEL3-0 = 1101; SUT1-0 = 10; остальные биты установлены в 1. Программа работает но как Вы сказали не так как надо. По идеи должно быть так: пока OCR0A меньше 240 то каждые 50 мсек значение прибавляется на 1. т.е. за все это время частота меняется, потом как только OCR0A становится больше 240 то частота резко меняется. А на практике частота остается одной и той же. Кстати кварц у меня на 4433619 герц
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



zatmenie
В программе написанной Вами много лишнего. Это затрудняет чтение кода.

Есть ошибки.
CODE:
for (OCR0A=0x0A; OCR0A<0xF0; OCR0A++);
{
if(OCR0A<0xF0)
{
TCCR0B=0x03;
delay_ms(50);
}
else TCCR0B=0x02; // Никогда не выполнится. См. пояснения.
}

Выполнить эту строчку не даст цикл. Он завершится когда OCR0A станет больше или равно 0xF0. Следовательно этот цикл не является бесконечным.

Вот эквивалент написанного Вами. Призван пояснить мои слова и помочь разобраться.
OCR0A = 0x0A;
while( OCR0A < 0xF0 )
{
if( OCR0A < 0xF0 )
{
TCCR0B = 0x03;
delay_ms(50);
}
else
{
TCCR0B = 0x02; // Никогда не выполнится.
}
OCR0A = OCR0A + 1;
}


Получение звука с помощью ШИМ скорее терминологическое извращение. Для получения звука может использоваться ряд режимов работы таймера/счетчика. В том числе и тех, которые используются для создания ШИМ. Звуковые колебания можно получить без ШИМ и даже без использования таймера/счетчика.

(Отредактировано автором: 25 Декабря, 2010 - 17:40:56)

 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



/*****************************************************
Program : sound frequensy
Compiler : CVAVR
Chip type : ATtiny2313
AVR Core Clock frequency: 4 MHz
*****************************************************/

#include <tiny2313.h>
#include <delay.h>

void main(void)
{

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Port A initialization
PORTA=0x00;
DDRA=0x00;

// Port B initialization
PORTB=0x00;
DDRB=0x00;

// Port D initialization
PORTD=0x00;
DDRD=0x02; // PD1 выход

while (1)
{
//delay_us(500); // задержка (( 1000000 / 1000 ) / 2) для 1000 Hz
//delay_us(250); // задержка (( 1000000 / 2000 ) / 2) для 2000 Hz
//delay_us(125); // задержка (( 1000000 / 4000 ) / 2) для 4000 Hz
//delay_us(100); // задержка (( 1000000 / 5000 ) / 2) для 5000 Hz
delay_us(50); // задержка (( 1000000 / 10000 ) / 2) для 10000 Hz
PORTD ^= 0x02; // инвертировать PD1
}
}

Изображение того, что должно получится на PD1 в идеале (на картинке звуковая волна). Реально будет более квадратная кривая Улыбка
Прикреплено изображение
sound-frequency-1.gif

(Отредактировано автором: 25 Декабря, 2010 - 21:38:52)

 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Михаил, я издавал вполне себе слышимые и мелодичные звуки просто дергая ногой МК на нужной частоте, так как у Вас (правда, я таймером генерил). Диффузор динамической головки все равно синусоиду выдаст в итоге.
Да будет звук! Улыбка
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



ОЛЕГ пишет:
Диффузор динамической головки все равно синусоиду выдаст в итоге
не обязательно.
разная форма сигнала имеет свой ... харрактер звучания,
частота то одна, да заучит не одинаково.
 
 Top
Белый Волк Супермодератор Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  



mihail, ОЛЕГ,
Соглашусь с nest: при подаче прямоугольных импульсов на какую либо нагрузку крайне маловероятно получить чистую синусоиду, равно как и чистый меандр. Прямоугольный импульс состоит из множества (в общем случае из бесконечного) числа синусоидальных гармоник.
Синусоида будет звучать для человека мягко, а меандр - резко. Если необходимо получить звук синусоиды, то ШИМ - вполне неплохой вариант.
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  




не выдержал
если честно то и гитарная струна синусоиду не выдает Подшучивать, дразнить
думаю речь тут о напруге на процессор , а не о чистоте звука
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



cjA пишет:
и гитарная струна синусоиду не выдает
а вот тут позвольте усомниться :)
в природе вообще мало где есть НЕсинусоидальные колебания.
 
 Top
sound Post Id


Полковник


Сообщений всего: 70
Дата рег-ции: Нояб. 2008  



Всем привет! помогите плиз что-то с фьюзами накрутил и теперь программатор контроллер не видит, что делать?(Mega16)
на картинки показано где примерно крутил
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



sound, вы скорее всего поставили фузы на внешний источник тактирования.
подсоедините генератор с частотой 0,5-1 МГц к ножке XTAL1 и прошейте фузы правильно.
 
 Top
sound Post Id


Полковник


Сообщений всего: 70
Дата рег-ции: Нояб. 2008  



завтра куплю кварц и попробую. спасибо!
 
 Top
Белый Волк Супермодератор Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  



sound
Внешний источник тактирования - это отдельно собранный генератор, а не кварцевый резонатор.
Каким программатором Вы пользуетесь?
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



Белый Волк

лучьше бы схемку дал, там всего-то одну микросхемку еще купить. Подмигивающий
 
 Top
Страниц (17): В начало « ... 9 10 11 12 [13] 14 15 16 17 »
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru