A little DTMF help


Closed Thread
Results 1 to 40 of 49

Hybrid View

  1. #1
    Join Date
    May 2005
    Location
    San Diego, CA
    Posts
    8


    Did you find this post helpful? Yes | No

    Lightbulb A couple of things

    After your program senses the first button push, your isd25120 message plays, but you are not cycling out that button push, you are going straight to another loop (BEGIN).

    loop:
    iF dtmf_ready = 0 Then loop ' Check for DTMF present, if none loop again
    welcome:
    portc = %00000000
    pause 200
    ce = 0
    pause 200
    ce = 1
    begin:
    if dtmf_ready = 0 then begin 'waits for number to be depressed

    Try adding the following just after (ce = 1) and just before (begin:

    select_dtmf = 1 ' Enable the data output from the MT8870
    Pause 1 ' Pause 1 mS to let data settle
    dtmf_wait2:
    IF dtmf_ready = 1 Then dtmf_wait1 ' Loop here until DTMF signal stops
    select_dtmf = 0 ' Disable the MT8870 data output
    reset = 0
    pause 100
    reset = 1

    Also, lower down in the program you have a couple of times:

    reset = 0
    reset = 1

    That is a very fast blip to the GT pin. Try giving it a chance to see it!

    Add a PAUSE 100 between the trasistion.

    reset = 0
    pause 100
    reset = 1

    You probably notice I added this pause in the upper portion of the program too!

    I am still trying to figure out how the routines for the password work, that sure is some creative programming! Maybe some comments beside them would help others (and me) understand it. (Or is it just me?) It does compile, but not sure how it works, or even it it does?!

    Hope this helps

  2. #2
    Join Date
    Feb 2006
    Posts
    89


    Did you find this post helpful? Yes | No

    Default Password theory

    Here was my logic (if you can call it that) for the password:

    In the beginning, I make an array (password[8])
    After the welcome message plays, the pic waits for a tone. Once it sees the tone, it is decoded and placed in "password[c]=dtmf", where c is initially "0".
    The program then advances c ( c = c + 1) and compares it to this statement "if c <= 7 then begin". Since c is only at 1, the program goes back up to wait for another tone. Once that tone is decoded, it places it in password[c], which this time is password[1] since c = 1. This goes on until all eight sections of the array are filled, in other words "c = 8". The program then goes to the next part of the program:

    if password [0] <> "1" then error
    if password [1] <> "2" then error
    if password [2] <> "3" then error
    if password [3] <> "4" then error
    if password [4] <> "5" then error
    if password [5] <> "6" then error
    if password [6] <> "7" then error
    if password [7] <> "8" then
    goto error
    else
    goto play_menu_message
    endif

    each section of the array is compared to a hard coded value. If any of the single sections of the array fail the comparison, the program skips to the error routine. That is how it is supposed to work, however, at this point it doesn't work yet. Thanks for the advice.

    Travin

  3. #3
    Join Date
    May 2005
    Location
    San Diego, CA
    Posts
    8


    Did you find this post helpful? Yes | No

    Cool To pinpoint

    So I understand, does the following section play a sound for each number that is pressed? If so, does it work? Or is the problem before this section of code?

    Select case dtmf
    case "1"
    portc = %10010111
    case "2"
    portc = %10011001
    case "3"
    portc = %10011011
    case "4"
    portc = %10011101
    case "5"
    portc = %10011111
    case "6"
    portc = %10100001
    case "7"
    portc = %10100011
    case "8"
    portc = %10100101
    case "9"
    portc = %10100111
    case "0"
    portc = %10101001
    end select
    pause 200
    ce = 0
    pause 200
    ce = 1

  4. #4
    Join Date
    Feb 2006
    Posts
    89


    Did you find this post helpful? Yes | No

    Default Sorta

    Yes, those are the addresses for the individual number sounds on the isd25120.
    This section works sometimes, allow me to explain.

    I call the pic and the phone answers.
    I press any button and the welcome message plays.
    I start entering my password (1,2,3,4,5,6,7,8)
    On the first try, I do not have a verbal reply until after the number 5 is decoded. Everytime after it works like a champ. Then randomly, the welcome menu message plays. Once it plays, I enter the password again, this time I have a verbal response everytime. Once all eight numbers are entered, the program should play the menu message, but it doesn't happen. I just press a few more numbers and then we start all over at the welcome message. I am boggled. I thought it may be the power supply, but I have caps on the pic, the op amp (lm 741), and the dtmf decoder. I know all the sound recordings work as I wrote a program to verify that. I know the decode sequence works as well as I have checked this out as well. It is this damn password and array that seems to be the problem. Thanks.

    Travin

  5. #5
    Join Date
    May 2005
    Location
    San Diego, CA
    Posts
    8


    Did you find this post helpful? Yes | No

    Cool Array format

    Remove the spaces in your arrays and see if this changes anything.

    For example, change this (and others). . .

    if password [0] <> "1" then user_password
    if password [1] <> "2" then error
    if password [2] <> "3" then error
    if password [3] <> "4" then error
    if password [4] <> "5" then error
    if password [5] <> "6" then error
    if password [6] <> "7" then error
    if password [7] <> "8" then
    goto error


    to this. . .

    if password[0] <> "1" then user_password
    if password[1] <> "2" then error
    if password[2] <> "3" then error
    if password[3] <> "4" then error
    if password[4] <> "5" then error
    if password[5] <> "6" then error
    if password[6] <> "7" then error
    if password[7] <> "8" then
    goto error

    and also change this (and others). . .

    password var byte [8]
    codeword var byte [8]
    codeword1 var byte [8]


    to this . . .

    password var byte[8]
    codeword var byte[8]
    codeword1 var byte[8]

    I always thought that they had to be together without a space, but I could be wrong. Doesn’t hurt to try it.

    Let me know.

  6. #6
    Join Date
    Oct 2004
    Location
    Hangover, Germany
    Posts
    289


    Did you find this post helpful? Yes | No

    Arrow

    Just do some debugging !


    1. Put the speaking of the single digits in a subroutine.

    2. After collecting 8 digits, play each digit (with a pause!) through this subroutine in order to check the collected password.

    3. put some LEDs to the PIC in order to see the handshakes from your chips.

    4. fill the password by hardcoding:
    After collecting 8 digits insert:
    Password[0]="1"
    Password[1]="2"...

    I think, you are loosing digits, or there is some noise, so you get whorse digits.
    PBP 2.50C, MCS+ 3.0.0.5, MPLAB 8, MPASM 5.14, ASIX Presto, PoScope, mE mikroBasic V7.2, PICKIT2

  7. #7
    Join Date
    May 2005
    Location
    San Diego, CA
    Posts
    8


    Did you find this post helpful? Yes | No

    Cool Had a thought

    I had a thought, but over looked the lookup command
    Last edited by Wink; - 27th May 2006 at 16:42.

Similar Threads

  1. DTMF on a 12V car system
    By Jumper in forum Schematics
    Replies: 1
    Last Post: - 7th December 2008, 15:41
  2. DTMF output
    By din_kt in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 28th February 2008, 15:24
  3. DTMF Decoding?
    By muddy0409 in forum General
    Replies: 1
    Last Post: - 19th December 2007, 16:28
  4. Replies: 2
    Last Post: - 31st July 2006, 17:06
  5. Problems with DTMF Generatiom
    By Angus Anderson in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 30th May 2006, 22:12

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts