Mega8 - dekoder kodu-melodii
Mega8 - dekoder kodu-melodii
Witam. Wie ktoś czy mozna zastosować mikrokontroler atmega8 aby wykrywał jakiś kod-melodyjkę ?
Ostatnio zmieniony 05 lut 2007, 20:14 przez bartoszw, łącznie zmieniany 1 raz.
-
ZbeeGin
Tak tylko kolega pyta do DEKODOWANIE melodii nie odgrywanie.michal17 pisze:w ostatnim EDW było coś podobnego na tiny2313
Myślę, że moc obliczeniowa Mega8 pozwoli na takie zdekodowanie - z tym, że mają to być pojedyncze i stałe czasowo tony. Wystarczy wtedy z dość dużą tolerancją mierzyć okres impulsów łapanych przez mikrofon i przetworzonych do postaci przebiegu prostokątnego oraz porównywać z tabelą wzorcową.
Witam. Generalnie chodzi mi o to co już było w sumie poruszane na tym forum ale nie było żadnej konkretnej odpowiedzi. Mam na myśli domofon który po odebraniu kodu zamknął by obwód który jest odpowiedzialny za dostarczenie prądu do elektromagnesu który w efekcie umożliwi otwarcie drzwi... Rozumiecie o co mi chodzi ?
Pozdrawiam!
Pozdrawiam!
- Aro
- Użytkownik
- Posty: 677
- Rejestracja: 30 paź 2006, 18:49
- Lokalizacja: Świerczyniec | Wrocław
- Kontakt:
O ATMEDZE jekiejkolwiek możesz zapomniec. Takie fabryczne urządzenia nie są zbyt drogie, więc może za tym się porozglądaj. Układy specjalizowane też można zdobyc, ale symbolów nie znam. Do głosu to raczej coś w rodzaju demodulatora+ dekoder składowych wyższych+odpowiedni procesor, który dokończy zadanie. Ogólnie reakcja na głos nie jest skomplikowana, ale z rozpoznaniem komendy od konkretnej osoby to lepiej skorzystac z gotowych modułów.
Panowie ponownie zostałem źle zrozumiany. Tu nie chodzi o rozpoznawanie dźwięku, to ma być coś co bedzie działało tak : stojac przy domofonie guzikiem mozna nadać kod coś w stylu alfabetu Morse'a mikrokontroler odczytuje te sygnały i jeśli sie zgadzaja z zaprogramowanymi
to wtedy mozna otworzyć drzwi. Czyli nie musi być żadnego mikrofonu itp... Może teraz ktos rozumie =]
to wtedy mozna otworzyć drzwi. Czyli nie musi być żadnego mikrofonu itp... Może teraz ktos rozumie =]
Witam.
To może to wam coś podpowie...
"moja pierwsza myśl:
- podchodzisz do domofonu i naciskasz przypuśćmy 2 razy dzwonek do swojego mieszkania.
- tam układ odbiera sygnał z brzęczyka i podaje na licznik (licznik robi co swoje i zapodaje na przerzutnik np. D)
- przerzutnik "zapamiętuje" swój stan i licznik po tej operacji szybciutko resetuje się i czeka na kolejne impulsy.
- ponownie wprowadzasz przypuśćmy 3 sygnały naciskając szybko 3x na przycisk do siebie na domofonie.
- licznik znów wysterowuje przerzutnik tym razem drugi
- w momencie pojawienia się sygnału z drugiego przerzutnika (i z zapamiętanego pierwszego) dopiero wtedy one zezwalają domofonowi na "naciśnięcie" przycisku otwórz drzwi
można to przeprowadzić z np. czterema liczbami przypuśćmy 2431 (naciskasz najpierw 2x potem 4x, 3x 1x) " <elektor84>
To może to wam coś podpowie...
"moja pierwsza myśl:
- podchodzisz do domofonu i naciskasz przypuśćmy 2 razy dzwonek do swojego mieszkania.
- tam układ odbiera sygnał z brzęczyka i podaje na licznik (licznik robi co swoje i zapodaje na przerzutnik np. D)
- przerzutnik "zapamiętuje" swój stan i licznik po tej operacji szybciutko resetuje się i czeka na kolejne impulsy.
- ponownie wprowadzasz przypuśćmy 3 sygnały naciskając szybko 3x na przycisk do siebie na domofonie.
- licznik znów wysterowuje przerzutnik tym razem drugi
- w momencie pojawienia się sygnału z drugiego przerzutnika (i z zapamiętanego pierwszego) dopiero wtedy one zezwalają domofonowi na "naciśnięcie" przycisku otwórz drzwi
można to przeprowadzić z np. czterema liczbami przypuśćmy 2431 (naciskasz najpierw 2x potem 4x, 3x 1x) " <elektor84>
- Aro
- Użytkownik
- Posty: 677
- Rejestracja: 30 paź 2006, 18:49
- Lokalizacja: Świerczyniec | Wrocław
- Kontakt:
Pare godzin roboty, no ale program jest przynajmniej uniwersalny. Można wszystko poustawiac od kodu do końcówek wyjścia i wejścia. A teraz w skrócie działanie: Naciskasz szybo pare razy guzik(może to byc np. sygnał z dzwonka po filtracji) , potem przerwa około sekundy i znowu następna seria o ile tak ustawisz ilości naciśnięc i powtórzeń. Po wykonaniu całego kodu czekasz sekunde na skasowanie portu wyjściowego, który obsł. np. przekaźnik. Wszyskie ustawienia opisałem więc nie powinno byc z tym problemu , a jak co to pytaj. Ze względu na możliwośc ustawienia swojego kodu przedstawiam plik źródłowy na forum.
[ Dodano: 2007-02-09, 20:41 ]
Jeszcze pare uwag:
przed wpsaniem kodu najlepiej zresetowac procek(chyba że jest wtedy włączane zasilanie), no i żeby znowu ustawic port po jego skasowaniu. Można było inaczej napisac program, ale nie widziałem takiej potrzeby, bo tak też jest dobrze. Do resetu będzie podpięty przycisk "otwórz drzwi" (o ile nie masz na celu wykorzystac tego układu dodatkowo do innego celu gdzie by musiał chodzic bez przerwy, jak tak to zawsze można troche zmodyfikowac program)
układ działa tak samo jak normalna centralka, tylko zamiast klawiatury 10-cio przyciskowej posiada jeden, którym przez szybkie naciskanie tak jakby wybiera się cyfry z tym że mogą miec wartośc do 255 a nie do 9. W przykładzie powyżej taki kod to 2-2 czyli dwa szybkie naciśnięcia(<1sekund, w przecinym razie ukł. startuje na nowo) - przerwa(1-10sekund w przeciwnym razie układ startuje od nowa)- i znowu dwa szybkie nacisniecia, sekunda przerwy i port zostaje skasowany.
Teoretycznie kombinacji jest 4,65x10^613 !!!, ale w praktyce nikomu nie będzie się chciało wprowadzac zbyt dużych liczb.
Jak jeszcze jest coś niejasnego to pytac.
Kod: Zaznacz cały
#include<avr/io.h>
#include<util/delay.h>
#include<avr/pgmspace.h>
#define PORT PORTD //port wyjściowy
#define DDR DDRD //rejestr kierunkowy
#define PIN 5 //pin wyj.
#define PORTP PIND //wejściowe na przycisk
#define PINP 0 //pin
#define cal 2 //ile powtórzeń z dużą przerwą
#define KLUCZ (0<<5) //pin wyjściowy
prog_char powt[cal]={2,2}; //ile szybkich naciśnięc pomiędzy długimi przerwami
int main(void)
{
uint8_t i=0;
uint8_t n;
uint8_t c;
DDRD=1<<PIN;
PORT=0xff;
while(1)
{
if(!(PORTP &(1<<PINP)))
{
for(c=0;c<cal;c++)
{
for(n=0;n<pgm_read_byte(&powt[c]);++n)
{
i=0;
while(PORTP &(1<<PINP))
{
if(++i>20)
{
goto koniec;
}
_delay_loop_2 (10000);
}
_delay_loop_2(10000);
loop_until_bit_is_set(PORTP,PINP);
_delay_loop_2(10000);
}
while(PORTP &(1<<PINP))
{
if(++i>20)
{
goto nast;
}
_delay_loop_2 (10000);
}
goto koniec;
nast:
_delay_loop_2(10000);
while(PORTP &(1<<PINP) && (c<cal-1))
{
if(++i>200)
{
goto koniec;
}
_delay_loop_2 (10000);
}
}
PORT=KLUCZ;
}
koniec:
i=0;
}
}[ Dodano: 2007-02-09, 20:41 ]
Jeszcze pare uwag:
przed wpsaniem kodu najlepiej zresetowac procek(chyba że jest wtedy włączane zasilanie), no i żeby znowu ustawic port po jego skasowaniu. Można było inaczej napisac program, ale nie widziałem takiej potrzeby, bo tak też jest dobrze. Do resetu będzie podpięty przycisk "otwórz drzwi" (o ile nie masz na celu wykorzystac tego układu dodatkowo do innego celu gdzie by musiał chodzic bez przerwy, jak tak to zawsze można troche zmodyfikowac program)
układ działa tak samo jak normalna centralka, tylko zamiast klawiatury 10-cio przyciskowej posiada jeden, którym przez szybkie naciskanie tak jakby wybiera się cyfry z tym że mogą miec wartośc do 255 a nie do 9. W przykładzie powyżej taki kod to 2-2 czyli dwa szybkie naciśnięcia(<1sekund, w przecinym razie ukł. startuje na nowo) - przerwa(1-10sekund w przeciwnym razie układ startuje od nowa)- i znowu dwa szybkie nacisniecia, sekunda przerwy i port zostaje skasowany.
Teoretycznie kombinacji jest 4,65x10^613 !!!, ale w praktyce nikomu nie będzie się chciało wprowadzac zbyt dużych liczb.
Jak jeszcze jest coś niejasnego to pytac.