Mega8 - dekoder kodu-melodii

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
bartoszw
-
Posty: 9
Rejestracja: 01 lut 2007, 20:18

Mega8 - dekoder kodu-melodii

Post autor: bartoszw » 05 lut 2007, 15:52

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.

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 05 lut 2007, 20:03

w ostatnim EDW było coś podobnego na tiny2313

ZbeeGin

Post autor: ZbeeGin » 05 lut 2007, 20:09

michal17 pisze:w ostatnim EDW było coś podobnego na tiny2313
Tak tylko kolega pyta do DEKODOWANIE melodii nie odgrywanie.

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ą.

bartoszw
-
Posty: 9
Rejestracja: 01 lut 2007, 20:18

Post autor: bartoszw » 06 lut 2007, 18:57

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!

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 06 lut 2007, 20:25

bartoszw pisze:kodu
znaczy głosu :?:
będzie troche trudne. morze jakiś specjalizowany układ lub po prostu przetwornik ADC z mikrofonem :?:

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 06 lut 2007, 20:43

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.

Awatar użytkownika
Brzozza93
Użytkownik
Posty: 474
Rejestracja: 26 cze 2006, 17:35
Lokalizacja: Gdynia
Kontakt:

Post autor: Brzozza93 » 06 lut 2007, 21:08

A... czy Koledze nie chodzi przypadkiem o coś jakby DTMF?? :roll:

bartoszw
-
Posty: 9
Rejestracja: 01 lut 2007, 20:18

Post autor: bartoszw » 06 lut 2007, 21:14

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 =]

teedd
-
Posty: 1
Rejestracja: 25 sty 2007, 20:59

Post autor: teedd » 07 lut 2007, 0:33

Witam.
Kolego - nie dziw się, że jesteś źle rozumiany. Źle opisujesz problem i tyle. Najpierw melodyjka, potem alfabet Morse'a. Myślę, że wiem o co Ci chodzi, ale sprecyzuj problem dokładniej - nie każdy może wie, co to jest alfabet Morse'a.
Pozdrowienia - teedd
- . . -.. -..

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 07 lut 2007, 15:07

Jak tak to nie będzie zbytniego problemu, tylko opisz dokładnie jak to ma wyglądac ze strony mechanicznej, tzn. ile przycisków, jaki mniej więcej kod.

bartoszw
-
Posty: 9
Rejestracja: 01 lut 2007, 20:18

Post autor: bartoszw » 08 lut 2007, 20:36

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 :wink:
można to przeprowadzić z np. czterema liczbami przypuśćmy 2431 (naciskasz najpierw 2x potem 4x, 3x 1x) " <elektor84>

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 08 lut 2007, 20:55

Może byc program w C albo w bascom? Bo najpierw proponowałeś atmegę i na niej układ będzie prostszy i będziesz mógł zmienic ten kod. Jak chcesz to ci jutro taki napisze.

bartoszw
-
Posty: 9
Rejestracja: 01 lut 2007, 20:18

Post autor: bartoszw » 08 lut 2007, 21:35

Aro nie ma problemu wybierz w którym ci wygodniej, ustaw dowolny kod odrazu jak możesz i napiszesz mi tylko jaki jest . Dziekuje ci z góry
Pozdrawiam!

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 09 lut 2007, 19:33

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.

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.

ODPOWIEDZ