Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Detektor DTMF i PIC16F84. Kto napisze prosty program?

tatala 20 Lut 2005 21:06 1853 7
  • #1 20 Lut 2005 21:06
    tatala
    Poziom 10  

    Witam.
    Nie znam się na programowaniu mikrokontrolerów i nie mam za bardzo czasu na wgłębianie się w tę problematykę. Troszkę czytałem o pic basicu.
    Potrzebuję kogoś kto napisze bardzo prosty program dla ukladu pic16f84.
    Chodzi o detektor DTMF mt8870.
    Założenie jest takie jezeli ktoś wciśnie 1 to na powiedzmy 1 lub 0,5 sek pojawia się stan wysoki na wyjściu1. Jezeli ktow wcisnie 2 to pojawia się stan wysoki na wyjsciu2 na 1 sek itd.
    Proszę o pomoc szanownych ekspertów.
    Dziękuję.

    0 7
  • #2 20 Lut 2005 23:16
    Panda02
    Poziom 32  

    Do tego nie ma potrzeby używania mikrokontrolera. Wystarczy dekoder 1z10, a 1-no sekundowy sygnał to STD z MT8870.

    0
  • #3 20 Lut 2005 23:22
    Jacu$
    Poziom 27  

    Cytat:
    Założenie jest takie jezeli ktoś wciśnie 1 to na powiedzmy 1 lub 0,5 sek pojawia się stan wysoki na wyjściu1. Jezeli ktow wcisnie 2 to pojawia się stan wysoki na wyjsciu2 na 1 sek itd.

    Najważniejsze przemilczałeś. Wyjaśnij to itd.
    PIC16F84 ma 13 linii portów. MT8870 wymaga wykorzystania 5 linii (dla uproszczenia przyjmijmy, że to cały port A. Pozostaje 8 linii portu B. Jak wciśniemy 9 to gdzie ma się pojawić ten stan wysoki?
    Na samym PIC-u to obsłużymy w ten sposób tylko 8 klawiszków z cyferkami. No, chyba że zmienimy założenie :wink:

    0
  • #4 20 Lut 2005 23:56
    tatala
    Poziom 10  

    Słuszna uwaga.
    Dobra zakłądamy ze 9 mnie nie interesuje. Wchdzą w gre tylko cyfry od1 do 8.
    Za podpowiedz serdeczne dzieki.
    Zaznaczam ja sie na tym nie znam.

    Dodano po 15 [minuty]:

    Panda02 napisał:
    Wystarczy dekoder 1z10, a 1-no sekundowy sygnał to STD z MT8870.

    Czy mógłbyś rozwinąć zagadnienie, jakiś link i rozjaśnić moje moroki niewiedzy. Kompletnie nie wiem o czym domnie rozmawiasz.
    :)
    pozdr.

    0
  • #5 21 Lut 2005 23:42
    Jacu$
    Poziom 27  

    Oto moja nieudolna próba napisania prostego programu, który ma spełniać następujące zadanie:
    1. odebrać dowolną cyfrę nadaną kodem DTMF
    2. wyświetlić cyfrę z zakresu 1-8 na pinach PB0 - PB7
    3. nie wyświetlać kombinacji 0, 9 - 15
    4. pozostawić zapaloną diodę do momentu odebrania następnego kodu DTMF
    Podłączenie:
    1. wyjście danych MT8870 do pinów PA0 - PA3
    2. StD do pinu PA4
    3. Anody diod LED (8 sztuk) do Ucc (+5V)
    4. Katody przez rezystorki 1k do kolejnych pinów portu B
    5. Rezonator kwarcowy 4 MHz lub inny (w zależności od możliwości PIC-a)
    6. Nóżka /MCLR połączona z + zasilania
    Jak o czymś zapomniałem to rusz głową i domyśl się sam :wink:
    Wybacz, że paczuszka jest w dziwnie spakowana ale ja używam Linuksa. Total Commander w Windows bez problemu to rozpakuje. Program pisałem w edytorze vi a kompilowałem programem gpasm. Masz gotowy plik dtmf.hex dla programatora (FUSE BITS są już ustawione). Jak coś, to wiesz, gdzie mnie szukać.

    0
  • #6 22 Lut 2005 07:50
    tatala
    Poziom 10  

    Jacu$ napisał:
    Oto moja nieudolna próba napisania prostego programu, który ma spełniać następujące zadanie:
    1. odebrać dowolną cyfrę nadaną kodem DTMF
    2. wyświetlić cyfrę z zakresu 1-8 na pinach PB0 - PB7
    3. nie wyświetlać kombinacji 0, 9 - 15
    4. pozostawić zapaloną diodę do momentu odebrania następnego kodu


    Dziekuje serdecznie.
    Nie ma problemu ja tez uzywam linuxa.
    Ale mam jescze jedna kwestie dotyczaca punktu 4.
    Przyznaje ze tego jeszcze nie zlozylem (to sa rozwazania czysto teoretyczne). NIe wiem czy dobrze rozumiem np. jesli wcisne 1 to na wyjsciu pojawia sie stan wysoki i pozostaje tam tak dlugo dopuki nie zostanie wcisnieta jakas inna cyfra rozna od 0,9...
    No przyznam, przepraszam nie chce byc upierdliwy , ale mnie chodzilo zeby stan wysoki pojawiall soe jedynie na 0,5 lub 1 sek w celu "prztykniecia" przekaznika, ktory by zalaczal inne uzadzenie.
    Dlatego mam pytanie czy ten uklad to realizuje?
    Dziekuje serdecznie i pozdawiam
    Darek

    0
  • Pomocny post
    #7 22 Lut 2005 17:20
    Panda02
    Poziom 32  

    Wyjścia Q1-Q4 MT8870 dołączasz do wejść A,B,C,D np. 4028 i masz już dekoder 1 z 10. Wyjściem STD MT8870 wyzwalasz przerzutnik monostabilny na 555 z czasem ustawionym na 1sek i masz to co chcesz. To jest chyba prostsze rozwiązanie niż z PIC-em

    0
  • Pomocny post
    #8 22 Lut 2005 22:17
    Jacu$
    Poziom 27  

    Tatala, na wszystkie swoje pytania miałeś odpowiedź w poprzednim poście.
    Stan na końcówce utrzymywał się do momentu odebrania następnej cyfry. Stanem aktywnym było zero a nie jedynka. Widać, przeczytałeś mój post "po łebkach".
    A oto masz następną wersję programu. Stanem aktywnym jest 1 logiczna i trwa przez około 0.5 sekundy. Po tym czasie mikrokontroler wyłącza stan aktywny na wyjściu (wszystkie piny w stanie zero) i sprawdza, czy ton DTMF już się skończył, czy trwa nadal. Dopiero, gdy na linii jest cisza, mikrokontroler jest gotowy do odebrania następnego sygnału za pośrednictwem MT8870.
    Tym razem wszystko robiłem pod Windows, ponieważ siedzę w pracy a tu nie ma pingwinów :sad:
    Przetestuj i napisz, co z tego wyszło.

    0