Ладно...мне нужно подключить к МК (к любому фирмы Атмел) флэшку и динамик...и заставить это все играть какую нибудь мелодию....в формате wav,я так понимаю,колонки мне надо подсоеденять к двум потам ШИМ да?,но вот я не знаю где они находятся у мк,так же ,куда подсоеденять флэшку я тож незнаю)...кто может,помогите,...Заране спасибо)
Хочу сделать чтото типа мигалки со звуком
46. beam - 17 Апреля, 2010 - 13:46:44 - перейти к сообщению
47. ОЛЕГ - 17 Апреля, 2010 - 16:06:43 - перейти к сообщению
Это не подошло?
Сирену на каком-нибудь пьезоизлучателе (какжется, так они называются, поправьте, если не прав) можно сделать и без флешки. И с любой ножки МК. Через транзисторный ключ.
Нужно выводить сигнал, скажем, от 500 до 5000 Гц. Сделать это можно циклом, где от переменной, определяющей время паузы/ сигнала, сначала будет отниматься единица, а по достижении частоты 500 Гц- добавляться.
Вы знаете, что такое звук и как его сделать?
Можете записать звук сирены на диктофон, открыть его в любом редакторе в виде синусоиды, посмотреть временные интервалы и, описанным мной способом, вывести точно такой же звук на любую из ножек МК.
Сирену на каком-нибудь пьезоизлучателе (какжется, так они называются, поправьте, если не прав) можно сделать и без флешки. И с любой ножки МК. Через транзисторный ключ.
Нужно выводить сигнал, скажем, от 500 до 5000 Гц. Сделать это можно циклом, где от переменной, определяющей время паузы/ сигнала, сначала будет отниматься единица, а по достижении частоты 500 Гц- добавляться.
Вы знаете, что такое звук и как его сделать?
Можете записать звук сирены на диктофон, открыть его в любом редакторе в виде синусоиды, посмотреть временные интервалы и, описанным мной способом, вывести точно такой же звук на любую из ножек МК.
48. beam - 17 Апреля, 2010 - 17:51:45 - перейти к сообщению
ОЛЕГ пишет: Вы знаете, что такое звук и как его сделать?
Честно сказать нет,незнаю,если можете обьясните)
Честно сказать нет,незнаю,если можете обьясните)
49. ОЛЕГ - 17 Апреля, 2010 - 18:45:53 - перейти к сообщению
Посмотрите это. Этого должно быть достаточно для понимания.
50. beam - 17 Апреля, 2010 - 18:46:51 - перейти к сообщению
А на обычной колонке от детских игрушек и тд,можно добится звука,?
51. ОЛЕГ - 17 Апреля, 2010 - 19:09:12 - перейти к сообщению
Да.
Чтобы получить звук определенной частоты из колонки нужно подать на ее входы электрический сигнал такой же частоты.
Чтобы получить звук определенной частоты из колонки нужно подать на ее входы электрический сигнал такой же частоты.
52. beam - 10 Июля, 2010 - 20:31:43 - перейти к сообщению
Обьясните как привести в действие сдвиговой регистр 74HC164 .....подсоеденил его к МК(правильно подсоеденил),но не доходит как подавать на него ток от мк,...читал вот тут,но всеравно по нолям))) http://easyelectronics.ru/sdvigovyj-registr.html
(Добавление)
инными словами .....как его наполнить
(Добавление)
Я использую МК Атмега8,PD2-Reset...,PD1-Data...,PD0-тактовый,....если можете,то программно как записать,для наполнения регистра.
(Добавление)
инными словами .....как его наполнить
(Добавление)
Я использую МК Атмега8,PD2-Reset...,PD1-Data...,PD0-тактовый,....если можете,то программно как записать,для наполнения регистра.
53. nest - 11 Июля, 2010 - 00:06:43 - перейти к сообщению
beam, схему покажите (в PNG или GIF формате).
54. beam - 11 Июля, 2010 - 00:11:44 - перейти к сообщению
да схема у меня только в Спринт лайоуте (лэй,бак.....форматы),...вы просто если знаете,обьясните как наполнить регистр...
(Добавление)
а сделал точно так как показано тут,..http://easyelectronics.ru/sdvigovyj-registr.html
(Добавление)
......Вот из статьи.....
Наполнять регистр просто:
1) Поднимаем и держим RESET в 1
2) Выдаем первый (старший) бит на Data.
3) Опускаем в 0 и поднимаем в 1 тактовый выход. На восходящем фронте происходит занос в регистр и сдвиг всей цепочки на один шаг.
4) Повторить со второго пункта пока все биты не выдадим.
А для сброса достаточно уронить Reset в ноль на пару микросекунд.
Все просто
вот что мне не понятно из вышенаписанного
.......1)подаю на ресет ..1..
2)это понять немогу(какой старший бит?=)
3)подаю на тактовый вход ..1..потом ..0..
(Добавление)
МК Атмега8,PD2-Reset...,PD1-Data...,PD0-тактовый,....если,несложно,напишите хоть немного программы,без обьявлений и тд,только главное...Заранее благодарен
(Добавление)
а сделал точно так как показано тут,..http://easyelectronics.ru/sdvigovyj-registr.html
(Добавление)
......Вот из статьи.....
Наполнять регистр просто:
1) Поднимаем и держим RESET в 1
2) Выдаем первый (старший) бит на Data.
3) Опускаем в 0 и поднимаем в 1 тактовый выход. На восходящем фронте происходит занос в регистр и сдвиг всей цепочки на один шаг.
4) Повторить со второго пункта пока все биты не выдадим.
А для сброса достаточно уронить Reset в ноль на пару микросекунд.
Все просто
вот что мне не понятно из вышенаписанного
.......1)подаю на ресет ..1..
2)это понять немогу(какой старший бит?=)
3)подаю на тактовый вход ..1..потом ..0..
(Добавление)
МК Атмега8,PD2-Reset...,PD1-Data...,PD0-тактовый,....если,несложно,напишите хоть немного программы,без обьявлений и тд,только главное...Заранее благодарен
55. nest - 11 Июля, 2010 - 00:57:54 - перейти к сообщению
beam пишет:
не вижу преграды. сделайте скриншот, обрежте и вставте тут.схема у меня только в Спринт лайоуте
в след раз нет схемы - не будет бубликов. :confused:
Описание работы D-триггера.
(на этой картинки входы R и S не показаны)
При переходе с низкого лог. уровня на высокий ("фронт" сигнала) логическое состояние со входа D передаётся на выход Q. В остальных случаях лог. состояние на входе D не имеет значения.
Можно сказать, что D-триггер работает как "защёлка". При фронте на входе C сигнал со входа C защёлкивается на выход Q. Среди электронщиков название "защёлка" применяется часто. (существует ещё и "прозрачная защёлка").
Описание строения 74хх164.
Сдвиговой регистр 74хх164 состоит из цепочки D-триггеров. Каждый выход триггера не только выведен наружу, но и соединён с информационным входом D (D- от Data) последующего. Вход первого триггера выведен наружу.
Все тактовые входа триггеров соединены вместе и тоже выведены наружу.
Все вроды сброса R (R - от Reset) соединены вместе и выведены наружу.
(работа выведеных наружу сигналов, какой фронт или какое лог. состояние является активным - описана в даташите.)
Описание алгоритма "заполнения" регистра 74хх164.
Вместо термина "заполение" говорят "вдвинуть" (иногда "задвинуть". Напр: "вдвинуть" байт в регистр). Так как дело имеем с регистром "сдвига", то байт мы в него вдвигаем снаружи.
Вход и А1 и А2 (они объеденены внутри по 2-И) соединяем с выходом Data.
Вход CLOCK соединяем с выходом тактового сигнала.
Внутри МК (програмный метод):
заводим переменную f и делаем её равной 7
а) -- на выход D выводим первый бит вашего байта.
б) -- на выходе такта С делаем спад (переход с высокого лог. состояния в низкое. ... или с "1" в "0")
в) -- пару микросекунд ждём (если частота работы МК меньше 10-20 МГц то ждать не надо) и возвращаем ногу С в состояние "1".
г) -- сдвигаем наш байт вправо (делим на два)
д) -- уменьшаем на один переменную f
е) -- если переменная f не стала нулём, то...
... переходим опять на пункт а)
в г) можно сдвигать влево (умножать на два), тогда на выходах 74хх164 порядок наших битов будет обратный
beam пишет:
2) Выдаем первый (старший) бит на Data.
2)это понять немогу. какой старший бит?=)
2)это понять немогу. какой старший бит?=)
:) мне тоже эти названия не очень нравятся, но такова судьба :)
старший - это самый большой, самый старый, самый толстый по значению - седьмой бит.
младший - самый маленький, самый хлипкий, самый незаметный по значению - нулевой бит.
56. beam - 11 Июля, 2010 - 01:15:01 - перейти к сообщению
Самый старший бит-как его подать?просто даем..1..?
вот схемка,но плата у меня двухстороняя,так што схемка перевернута.
(Добавление)
мега в смд корпусе
вот схемка,но плата у меня двухстороняя,так што схемка перевернута.
(Добавление)
мега в смд корпусе
57. nest - 11 Июля, 2010 - 01:30:13 - перейти к сообщению
вроде бы договаривались, что б было в PNG/GIF...
58. beam - 11 Июля, 2010 - 01:31:54 - перейти к сообщению
И nest всетаки можете начать программу?,ато у меня невыходит ничего=)
59. nest - 11 Июля, 2010 - 01:42:42 - перейти к сообщению
beam пишет:
я не знаю, на чём вы пишите, но на асм можно так:Самый старший бит-как его подать?просто даем..1..?
CODE:
sbrs our_byte,7 ; если бит 7 в нашем байте установлен...
sbi PORTx,0 ; ... то устанавливаем и ногу PORTx.0
sbrc our_byte,7 ; если бит 7 в нашем байте сброшен...
cbi PORTx,0 ; ... то сбрасываем и ногу PORTx.0
sbrs our_byte,7 ; если бит 7 в нашем байте установлен...
sbi PORTx,0 ; ... то устанавливаем и ногу PORTx.0
sbrc our_byte,7 ; если бит 7 в нашем байте сброшен...
cbi PORTx,0 ; ... то сбрасываем и ногу PORTx.0
а как там в других языках так называемого "высокого (гы-гы) уровня" вывести один бит на одну ногу - это уж ... сами.
но вы бы лучше всё аппаратно организовали через SPI.
У атмела специально для этого есть код и объяснения .
60. mihail - 11 Июля, 2010 - 02:24:05 - перейти к сообщению
nest пишет:
а как там в других языках так называемого "высокого (гы-гы) уровня" вывести один бит на одну ногу - это уж ... сами
CODE:
/***************************************************************
Реализация алгоритма "заполнения" регистра 74HC164 для WinAVR
Частота работы МК меньше 10 МГц
***************************************************************/
#include <avr/io.h>
#include <util/delay.h>
int main(void) /* основная программа */
{
char var_1 = 0b11111111; /* переменная определяет содержимое регистра */
int k; /* переменная для цикла */
DDRD |= (1<<0); /* PD0 сконфигурировать как выход, тактовый выход */
DDRD |= (1<<1); /* PD1 сконфигурировать как выход, Data выход */
DDRD |= (1<<2); /* PD2 сконфигурировать как выход, RESET выход */
PORTD |= (1<<0); /* установить "1" на линии 0 порта D */
PORTD &= (~(1<<1)); /* установить "0" на линии 1 порта D */
PORTD &= (~(1<<2)); /* установить "0" на линии 2 порта D */
while(1) /* бесконечный цикл */
{
PORTD |= (1<<2); /* поднимаем и держим RESET в 1 */
for(k=7; k>=0; k--)
{
if( var_1 & (1<<k) )
{
PORTD |= (1<<1); /* установить "1" на линии 1 порта D */
}
else
{
PORTD &= (~(1<<1)); /* установить "0" на линии 1 порта D */
}
PORTD &= (~(1<<0)); /* опускаем в 0 тактовый выход */
PORTD |= (1<<0); /* поднимаем в 1 тактовый выход */
}
_delay_ms(1000); /* задержка 1 c. */
PORTD &= (~(1<<2)); /* опускаем в 0 RESET */
} /* закрывающая скобка бесконечного цикла */
} /* закрывающая скобка основной программы */
/***************************************************************
Реализация алгоритма "заполнения" регистра 74HC164 для WinAVR
Частота работы МК меньше 10 МГц
***************************************************************/
#include <avr/io.h>
#include <util/delay.h>
int main(void) /* основная программа */
{
char var_1 = 0b11111111; /* переменная определяет содержимое регистра */
int k; /* переменная для цикла */
DDRD |= (1<<0); /* PD0 сконфигурировать как выход, тактовый выход */
DDRD |= (1<<1); /* PD1 сконфигурировать как выход, Data выход */
DDRD |= (1<<2); /* PD2 сконфигурировать как выход, RESET выход */
PORTD |= (1<<0); /* установить "1" на линии 0 порта D */
PORTD &= (~(1<<1)); /* установить "0" на линии 1 порта D */
PORTD &= (~(1<<2)); /* установить "0" на линии 2 порта D */
while(1) /* бесконечный цикл */
{
PORTD |= (1<<2); /* поднимаем и держим RESET в 1 */
for(k=7; k>=0; k--)
{
if( var_1 & (1<<k) )
{
PORTD |= (1<<1); /* установить "1" на линии 1 порта D */
}
else
{
PORTD &= (~(1<<1)); /* установить "0" на линии 1 порта D */
}
PORTD &= (~(1<<0)); /* опускаем в 0 тактовый выход */
PORTD |= (1<<0); /* поднимаем в 1 тактовый выход */
}
_delay_ms(1000); /* задержка 1 c. */
PORTD &= (~(1<<2)); /* опускаем в 0 RESET */
} /* закрывающая скобка бесконечного цикла */
} /* закрывающая скобка основной программы */
Теоретически должно работать