Автор Тема: Какво е KC-1206  (Прочетена 30600 пъти)

INF1n1t

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 139
    • Профил
Какво е KC-1206
« -: Август 28, 2007, 04:03:28 pm »
http://www.deltron-euroind.it/pdf/avvisatori_acustici/buzzer_circuito_stampato/senza_driver_elettro.pdf

Тук има и информация за това, но все още не съм сигурен точно какво е. Казват, че е magnetic transducer. От уикипедия проверих, ама не пише точно.

Да кажа само, че намерих елемента на една модемна платка...
Иван Занев - град София

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
Какво е KC-1206
« Отговор #1 -: Август 28, 2007, 05:54:57 pm »
ми аз мился , че е пиезо зумер

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Какво е KC-1206
« Отговор #2 -: Август 28, 2007, 06:22:10 pm »
Цитат на: "tommyboy"
ми аз мился , че е пиезо зумер


На мен ми прилича на някакъв магнетрон (измерващ магнитното поле)... Вероятно в модема е бил някъде до изхода? :)
Поздрави!
Роботиката не е хоби - тя е начин на живот!

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
Какво е KC-1206
« Отговор #3 -: Август 28, 2007, 06:40:10 pm »
май братле си прав ама за какво да измерва магнитното поле , че не разбирам мн от модеми  :D

INF1n1t

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 139
    • Профил
Какво е KC-1206
« Отговор #4 -: Август 28, 2007, 07:19:33 pm »
Амм не. Всъщност ти какво разбираш под изход? Ако разбираш мястото, където се включват кабелите, значи не е близо до изхода а точно обратното - възможно най-далече е.
Иван Занев - град София

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Какво е KC-1206
« Отговор #5 -: Август 28, 2007, 08:40:52 pm »
Това си е чист пиезоизлъчвател... Видях думата "magnetic transducer", а на чертежите - "frequency" и съм се подвел. :) А и в заглавието на линка пише buzzer - а тази дума значи високоговорител, пиезоизлъчвател.. :) Така че няма нищо интересно в това - има го и в китайските будилници! Аз си го отрязах от един будилник, може да направя робот, който да пищи при определена команда... :) Поздрави!
Роботиката не е хоби - тя е начин на живот!

INF1n1t

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 139
    • Профил
Какво е KC-1206
« Отговор #6 -: Август 28, 2007, 08:42:22 pm »
Ааа това ли било! :) Сигурно може да се вгради някъде за бъзик..
Иван Занев - град София

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
Какво е KC-1206
« Отговор #7 -: Август 28, 2007, 09:31:08 pm »
Бе и аз гледам има показана честота и сила на звука , ама винаги има несигурност  :D  :D

INF1n1t

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 139
    • Профил
Какво е KC-1206
« Отговор #8 -: Август 28, 2007, 09:33:53 pm »
Еми тия дни мисля да хвана поялника, защото имам три платки с доза елементи на тях. Ако успея да го разпоя този елемент, може да го сложа някъде другаде и да го опитам (трябва да изуча и начинът му на работа)
Иван Занев - град София

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
Какво е KC-1206
« Отговор #9 -: Август 28, 2007, 09:46:12 pm »
ами батка ако му подаваш  правоъгълни импуси с ралична честота , може да мениш честотата на издавания звук  ;) . Аз не съм го прабвал , но го четох в една книга .

INF1n1t

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 139
    • Профил
Какво е KC-1206
« Отговор #10 -: Август 28, 2007, 10:36:19 pm »
Мдам, благодаря, че ме улесни :)
Иван Занев - град София

INF1n1t

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 139
    • Профил
Какво е KC-1206
« Отговор #11 -: Септември 30, 2007, 11:49:10 pm »
Такам, точно така. Значи това си е пиезоговорителче (писукче, buzzer-че, пищялка, абе там както и да е - издава звук). За да можете да го управлявате се оказа, че просто трябва да му давате, както tommyboy каза, правоъгълни импулси с определена честота.

 400 Hz звук, означава да има 400 изменения в секунда. Значи трябва да подадеме 400 импулса. За да ги подадеме толкова импулси, трябва да правиме два пъти повече промени, за което ме подсети datamatrix. Тоест, трябва да имаме 800 изменения в секунда за 400 Hz звук. Дотук всичко е добре, а ето малко C код за подкарване на buzzer:


counter=250;
  while (counter)
  {
   output_high(PIN_B1);
   delay=5000;
   delay_us(delay);
   output_low(PIN_B1);
   counter--;
  }


Програмата работи за 4 MHz PIC 16F84A. delay_us ще забави с x ултрасекунди. Всъщност, логиката е следната - за една секунда имаме 4 милиона изменения (4Mhz). Колко трябва да ни е забавянето, ако искаме 800 изменения. Ами 4 000 000 / 800, и ни се получава 5000. Нагласяме delay_us(5000) и сме напълно готови - имаме 800 изменения в секунда, а всъщност 400 Hz звук.

 Честотата на звука е добре, но силата му? Последователно на buzzer-а, сме свързали някакъв резистор (според каталога на елемента). Според съпротивлението протича даден ток x. Колкото е по-голям този ток, толкова по-силен звук имаме. Най-хубаво е това да се проследи с потенциометър.

 Ами общо взето това е. Имах някакви проблеми с пиезоговорителя, затова реших, че може да е от полза и да улесни тези, които тепърва ще се занимават с такъв елемент.
Иван Занев - град София

spookyboy

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 103
    • Профил
Какво е KC-1206
« Отговор #12 -: Октомври 01, 2007, 01:58:25 pm »
Ултрасекунди? Може би микросекунди :)
Много хубаво си го направил, но работи ли :)
Защото според мен ако искаш сигнала да е правоъгълен трябва да има забавяне между всяко "изменение", а ти си направил забавяне само между high и low (трябва и между low и high, тоест след low)

Освен това, delay_us работи с микросекунди, а не трептенията на процесора, за това няма значение каква е неговата скорост, delay_us(1000000) винаги ще забавя с една секунда -> в твоя случай ако искаш честота 400 Hz ти трябват 1000000/400 = 2500 us дължина на вълната (от low до low или от high до high), т.е. две забавяния от по 1250 us.

*Също така не е хубаво да правиш забавянето с delay функция, защото какво става: правиш 800 забавяния от по 1250 us -> 1000000 us = 1 s ти е общо забавянето, но всяка операция отнема време на процесора, включително и output_high(), =, output_low(), --, затова времето за тези 400 трептения които искаш да създадеш ще е 1 s + 250 * (O(output_high()) + O(=) + O(output_low()) + O(--) + O(==)). По е добре да се ползват таймери, уви при микроконтролерите нзн как стоят нещата с тях, така че ето код с delay:
#define OUTPUT_TIME 2
#define FREQUENCY 400
...
int delay = 500000 / FREQUENCY;
for (int i = 0; i < OUTPUT_TIME * FREQUENCY; ++i) {
   output_high (PIN_B1);
   delay_us (delay);
   Output_low (PIN_B1);
   delay_us (delay);
}


*EDIT: sv_shady ме светна че това не е точно така, така че се извинявам по тази точка. Другите обаче си остават :)
Станьо - 20г. - извън чужбина

INF1n1t

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 139
    • Профил
Какво е KC-1206
« Отговор #13 -: Октомври 02, 2007, 10:18:30 am »
Цитат на: "spookyboy"
Ултрасекунди? Може би микросекунди :)
Много хубаво си го направил, но работи ли :)
Защото според мен ако искаш сигнала да е правоъгълен трябва да има забавяне между всяко "изменение", а ти си направил забавяне само между high и low (трябва и между low и high, тоест след low)

Освен това, delay_us работи с микросекунди, а не трептенията на процесора, за това няма значение каква е неговата скорост, delay_us(1000000) винаги ще забавя с една секунда -> в твоя случай ако искаш честота 400 Hz ти трябват 1000000/400 = 2500 us дължина на вълната (от low до low или от high до high), т.е. две забавяния от по 1250 us.

*Също така не е хубаво да правиш забавянето с delay функция, защото какво става: правиш 800 забавяния от по 1250 us -> 1000000 us = 1 s ти е общо забавянето, но всяка операция отнема време на процесора, включително и output_high(), =, output_low(), --, затова времето за тези 400 трептения които искаш да създадеш ще е 1 s + 250 * (O(output_high()) + O(=) + O(output_low()) + O(--) + O(==)). По е добре да се ползват таймери, уви при микроконтролерите нзн как стоят нещата с тях, така че ето код с delay:
#define OUTPUT_TIME 2
#define FREQUENCY 400
...
int delay = 500000 / FREQUENCY;
for (int i = 0; i < OUTPUT_TIME * FREQUENCY; ++i) {
   output_high (PIN_B1);
   delay_us (delay);
   Output_low (PIN_B1);
   delay_us (delay);
}


*EDIT: sv_shady ме светна че това не е точно така, така че се извинявам по тази точка. Другите обаче си остават :)


 Здравей, благодаря за допълненията. Първо да кажа, моят код работи. Поне при мен. Проблемът всъщност е че аз не ви дадох целият код. Ето я цялата програма:


#include <16F84A.h>
#fuses XT, NOWDT, NOPROTECT, PUT
#use delay(clock=4000000)

void main()
{
 int counter;
 int delay;

 while (1)
 {
  output_high(PIN_B2);
  delay_ms(500);
  output_low(PIN_B2);
  output_high(PIN_B3);
  delay_ms(500);
  output_low(PIN_B3);
  counter=250;
  while (counter)
  {
   output_high(PIN_B1);
   delay=10000;
   delay_us(delay);
   output_low(PIN_B1);
   counter--;
  }
   counter=250;
  while (counter)
  {
   output_high(PIN_B1);
   delay=5000;
   delay_us(delay);
   output_low(PIN_B1);
   counter--;
  }
    counter=250;
  while (counter)
  {
   output_high(PIN_B1);
   delay=5000;
   delay_us(delay);
   output_low(PIN_B1);
   counter--;
  }

 }
}


 Тук всичко работи само единствения проблем, е че както ти казваш трябва да има забавяне между трите цикъла, защото иначе онова изговаря тоновете прекалено бързо.

Ултрасекунди е равно на микросекунди по моему :)

 Дам, това не го знаех за delay_us() и ги бях сметнал през тактовата честота.
Иван Занев - град София

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
Какво е KC-1206
« Отговор #14 -: Октомври 02, 2007, 11:14:13 am »
няма ли да ви е по лесно с един 555 вместо да пишете програми  ;)