...

Tutaj będą przenoszone tematy, którymi dalej nie warto się zajmować, co jakiś czas zawartość tego forum jest kasowana.
Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 15 paź 2012, 14:10

Ja na razie jestem w stadium kompletowania części do detektora przejścia przez zero, ale LM358 juz znalazłem w szpargalach, teraz tylko zrobić PCB i znaleźć złącze chinch do druku. Jak już mam coś sklecać niech przynajmniej jest to na przyszłość.

SQ8
-
Posty: 44
Rejestracja: 30 paź 2011, 14:11
Lokalizacja: ---

Post autor: SQ8 » 21 paź 2012, 14:39

...
Ostatnio zmieniony 31 gru 2012, 17:11 przez SQ8, łącznie zmieniany 1 raz.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 21 paź 2012, 17:29

O.. widzę kolega ma konkretny sprzęt do testów, ja niestety takiej wygody nie mam. Ogólnie próbowałem dzisiaj zrobić PCB do tego LM358 w eaglu, ale jakoś mi nie szło.

SQ8
-
Posty: 44
Rejestracja: 30 paź 2011, 14:11
Lokalizacja: ---

Post autor: SQ8 » 21 paź 2012, 19:52

...
Ostatnio zmieniony 31 gru 2012, 17:11 przez SQ8, łącznie zmieniany 1 raz.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 21 paź 2012, 21:06

Tzn. TAk. Jeżeli metoda i układ pomiaru czasu impulsu jest niezawodny, tzn. zawsze czas impulsu jest mierzony dokładnie, to nie ma sensu dalej w tym grzebać, bład tkwi w programowej interpretacji tych wyników, i na tym należy się skupić.

SQ8
-
Posty: 44
Rejestracja: 30 paź 2011, 14:11
Lokalizacja: ---

Post autor: SQ8 » 21 paź 2012, 21:44

...
Ostatnio zmieniony 31 gru 2012, 17:11 przez SQ8, łącznie zmieniany 1 raz.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 22 paź 2012, 7:50

Tu trzeba będzie chyba stworzyć system czasu rzeczywistego, tzn. Jeden Timer będzie musiał odmierzać czas w systemie, z potrzebną dokładnością, a w zadanym czasie gdzieś trzeba będzie zbierać próbki i po jego upływie dopiero analizować. Ale też trzeba przeanalizować standard DTMF, aby wiedzieć jaki jest czas trwania tonu, oraz przerwy między nimi. ogólnie pomysł bym na to miał ale na razie nie bardzo mam czas za tym siąść.

SQ8
-
Posty: 44
Rejestracja: 30 paź 2011, 14:11
Lokalizacja: ---

Post autor: SQ8 » 22 paź 2012, 11:33

...
Ostatnio zmieniony 31 gru 2012, 17:11 przez SQ8, łącznie zmieniany 1 raz.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 22 paź 2012, 14:57

Jeżeli masz znany czas trwania tonu to nie ma problemu, robisz tabilcę, zawierającą liczniki dla każdego z tonów. I tak jeżeli wykryjesz dany ton do zwiększasz odpowiadający mu licznik w tablicy, po czasie pomiaru / trwania tonu, sortujesz tą tablicę, i sprawdzasz które tony w niej wystąpiły i ile razy.
Ogólnie cały program będzie dosyć mocno statystycznym analizatorem.
PS. po gubiłem się trochę, jakie tony trzeba szukać, bo nic o tej 5-tonowej modulacji nie wiem ? wymień może wszystkie szukane częstotliwości, będzie łatwiej. wiem że to zwiazane z CB-Radio ale nic nie umiem na ten temat odnaleźć.
PS. Na razie uskrobałem coś takiego. To bardziej idea niż gotowy program ale powinno zadziałać.

Kod: Zaznacz cały

$regfile = "m32def.dat"
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
$crystal = 16000000
Config Lcd = 16 * 2
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising , Noise Cancel = 1
Config Aci = On , Compare = On , Trigger = Rising
On Icp1 Przerwanie
Enable Icp1
 Cls
Enable Interrupts
Dim Countcycles As Word
Dim Icr_new As Word
Dim Icr_old As Word
Dim B12 As Bit
Dim Temp As Word
Dim Tony(16) As Byte
Dim I As Byte

Do
'Algorytm sortujacy
If B12 = 1 Then               ' jeżeli pomiar zakończony to:
  Reset B12                   ' restartuj znacznik pomiaru
  Restore Szukane             ' restartuj wskaźnik do tablicy szukanych wzorców
  For I = 1 To 16             ' rozpocznij sortowanie
     Read Temp                ' odczytaj wzorzec (kolejny dla kolejnych przebiegów pętli)
     If Icr_new = Temp Then   ' jeżeli wzorzec zgodny z pomiarem
        Incr Tony(i) ,        ' to - Zwieksz Licznik Dla Danego Wzorca W Tablicy Pomiarów
        Exit For              ' zakończ sortowanie
     End If
  Next I
End If                        ' i czekaj na kolejny pomiar
Loop



Przerwanie:
   Countcycles = Timer1
   Icr_new = Countcycles - Icr_old
   Icr_old = Countcycles
   Set B12
Return

Szukane:
Data 1981                     '0
Data 1124                     '1
Data 1197                     '2
Data 1275                     '3
Data 1358                     '4
Data 1446                     '5
Data 1540                     '6
Data 1640                     '7
Data 1747                     '8
Data 1860                     '9
Data 2110                     'E < przeniesiono go tutaj bo może występować częściej niż inne znaki, a to skraca czas sortowania.
Data 930                      'B
Data 2247                     'C
Data 991                      'D
Data 2400                     'A
Data 1055                     'F
Opcjonalny słownik dla szukania, zoptymalizowany pod katem szybkości szukania i histerezy +/- 1Hz, wymaga lekkiej zmiany w algorytmie sortowania. Dla standardu EEA.

Kod: Zaznacz cały

Szukane:
'Wer 1.1, słownik zoptymalizowany pod katem szybkości szukania i histerezy.
Data 2399                     'C (2400Hz),Najkrótszy impuls, najkrótszy czas wyszukania
Data 2246                     'F (2247Hz)
Data 2109                     'E (2110HZ)
Data 1980                     '0 (1981Hz)
Data 1859                     '9 (1860Hz)
Data 1746                     '8 (1747Hz)
Data 1639                     '7 (1640Hz)
Data 1539                     '6 (1540Hz)
Data 1445                     '5 (1446Hz)
Data 1349                     '4 (1350Hz)    '
Data 1274                     '3 (1275Hz)
Data 1196                     '2 (1197Hz)
Data 1123                     '1 (1124Hz)
Data 1054                     'A (1055Hz)
Data 990                      'D (990Hz)
Data 929                      'B (930Hz), najdłuższy impuls, najdłuższy czas szukania
WAŻNE !! Potrzebowałbym paru dodatkowych informacji. Otóż wg. opisu z Wiki, ton może trwać od 20 do 100ms, czyli cala ramka może mieć czas od 100 (20msx5) do 500ms(100ms x 5). na pewno jest jakaś przerwa między kolejnymi ramkami, jaka ona jest ?

SQ8
-
Posty: 44
Rejestracja: 30 paź 2011, 14:11
Lokalizacja: ---

Post autor: SQ8 » 26 paź 2012, 11:14

...
Ostatnio zmieniony 31 gru 2012, 17:12 przez SQ8, łącznie zmieniany 1 raz.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 26 paź 2012, 12:38

Ja na razie walczę z moim ATTINY681. Trochę to zajmuje bo to procesor projektowany do budowy sterowników silników BLCD i falowników, wiec jego Timery mają trochę za dużo funkcji, i ich konfiguracja, to ustawienie tuzina rejestrów. Dopiero doszedłem do testu stabilności 0 (GND), bo chce spróbować wykorzystać wewnętrzny komparator. Wynik jest taki, jak na filmiku niżej, ale dużo zależy od źródła zasilania, na zasilaczu jest max 15mV wahania, dla zasilania z programatora USB 50mV wahania.

http://www.youtube.com/watch?v=Arl3JAcj ... detailpage

Co do samego programu, twoje wyjaśnienia rzucają dużo światła na same podejście do projektowania algorytmu. Algorytm wykrywania musi łapać tylko częstotliwość która trwa minimum 20ms, ale nie dłużej niż 120ms (max standardu + 20% na ewentualny rozrzut).
Co do metody pomiaru. Ja założyłem że Timer mierzący czas impulsu zwraca od razu gotowy wynik, więc jest taktowany 2MHz, co powoduje że w czasie pomiaru półokresu, bo to mierzymy między przejściami przez zero, uzyskujemy z niego od razu wynik w Hz, i nie są konieczne już żadne inne operacje do obliczenia złapanej częstotliwości poza, uwzględnieniem histerezy.
Ogólnie powoli (w miarę czasu) nad tym pracuję. Ogólnie całość będzie wymagać, wymyślenia jakieś sprytnej i szybkiej metody, najlepiej takiej która max, wykorzysta właściwości sprzętowe Timerów, aby jak najmniej liczyć, a co najwyżej porównywać ze sobą i sortować dane.

SQ8
-
Posty: 44
Rejestracja: 30 paź 2011, 14:11
Lokalizacja: ---

Post autor: SQ8 » 26 paź 2012, 20:30

...
Ostatnio zmieniony 31 gru 2012, 17:12 przez SQ8, łącznie zmieniany 1 raz.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 27 paź 2012, 10:21

BASCOM, bo C na AVRy nie znam za dobrze. Jedynie C, na PICi jako tako znam. ogólnie musi się dać zrobić w BASCOM na procku taktowanym max 16MHz.
Ja z racji posiadanej bazy jestem skazany na ATTINY681 taktowanej wewnętrznym oscylatorem 8MHz, ale to nie powinno być wielkim ograniczeniem, poza stabilnością pomiaru.

SQ8
-
Posty: 44
Rejestracja: 30 paź 2011, 14:11
Lokalizacja: ---

Post autor: SQ8 » 27 paź 2012, 20:58

....
Ostatnio zmieniony 31 gru 2012, 17:12 przez SQ8, łącznie zmieniany 1 raz.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 28 paź 2012, 8:09

Sam rozrzut pomiaru wynika, z kilku przyczyn. Eksperymentując z komparatorem, jak już pisałem zauważyłem że "ZERO" pływa, i to nawet o 50-60mV, to powoduje, że detekcja przez zero też pływa, w tym zakresie wahań, czyli dla tej samej częstotliwości będziemy uzyskiwać, minimalnie różniące się wyniki, ale im ta częstotliwość, będzie wyższa, tym wyższy będzie rozrzut pomiaru, co pokazują pańskie wyniki dla 1KHz i dla 6KHz.
Załączniki
Komparator_tiny.JPG
Moje doświadczenia z ZEREM

Zablokowany