Sonsivri
 
*
Welcome, Guest. Please login or register.
Did you miss your activation email?
April 23, 2024, 02:17:58 14:17


Login with username, password and session length


Pages: [1]
Print
Author Topic: caller id "fsk"  (Read 6859 times)
0 Members and 1 Guest are viewing this topic.
arash
Active Member
***
Offline Offline

Posts: 111

Thank You
-Given: 2
-Receive: 0


« on: December 04, 2005, 09:00:57 21:00 »

Hi all.
I want to make a caller id but in fsk format.
I heard about XR2211 for decoding it.
Is that right?
How to use it.
thanks
Logged
tasosstr
Junior Member
**
Offline Offline

Posts: 75

Thank You
-Given: 95
-Receive: 14


« Reply #1 on: December 05, 2005, 08:00:29 20:00 »

Hello ,

Have a look

http://www.melabs.com/resources/callerid.htm

http://www.melabs.com/products/labxt.htm

The datasheet for the ic is also there,

and look also the samples

Best Regards,
Tasosstr
Logged
max
Senior Member
****
Offline Offline

Posts: 315

Thank You
-Given: 1601
-Receive: 52


« Reply #2 on: December 05, 2005, 09:04:03 21:04 »

Hi,
Try the zarlink caller id chips MT8841 or MT8843, compact circuit and easier
to interface with uC, better performance than xr2211.
Logged

Fate arrived and made the conscious unconscious It silenced the activity of life.
arash
Active Member
***
Offline Offline

Posts: 111

Thank You
-Given: 2
-Receive: 0


« Reply #3 on: December 05, 2005, 09:09:29 21:09 »

Hi max
is  MT8841 or MT8843 for fsk?
Logged
arash
Active Member
***
Offline Offline

Posts: 111

Thank You
-Given: 2
-Receive: 0


« Reply #4 on: December 05, 2005, 09:11:56 21:11 »

Hi tasosstr
Where can i finde the schematic?
Logged
max
Senior Member
****
Offline Offline

Posts: 315

Thank You
-Given: 1601
-Receive: 52


« Reply #5 on: December 05, 2005, 09:41:17 21:41 »

Hi,
Both zarlink chips are for fsk decoding, also you do'nt need a serial
port to retrieve the data, simple spi interface.
Logged

Fate arrived and made the conscious unconscious It silenced the activity of life.
tasosstr
Junior Member
**
Offline Offline

Posts: 75

Thank You
-Given: 95
-Receive: 14


« Reply #6 on: December 10, 2005, 10:04:57 10:04 »

Hi arash

The pdf file with sch is on :

http://www.melabs.com/downloads/LABXTSCH.PDF

and some samples ...

' PicBasic Pro 2.42 or later, LAB-XT Experimenter Board, PIC16F877-20

' Displays Caller ID information on LCD.  Connect either jack on the
' LAB-XT to a telephone line.  Caller ID service must be provided
' by your local phone company.  This code only reads Multiple Data
' Message Format.  LED4 lights when ring is present.


DEFINE    LOADER_USED    1        ' Only required for melabs Loader

DEFINE OSC 20                ' Match the crystal on the board

' Define LCD registers and bits
DEFINE  LCD_DREG        PORTD
DEFINE  LCD_DBIT        4
DEFINE  LCD_RSREG       PORTE
DEFINE  LCD_RSBIT       0
DEFINE  LCD_EREG        PORTE
DEFINE  LCD_EBIT        1

ring_detect        VAR    PORTA.2    ' Define the ring-detect input pin
cid_serial_data    VAR    PORTA.0    ' Define the Caller-ID serial input pin
led4            VAR    PORTC.1    ' Define LED output

idstring    VAR    BYTE[96]    ' Array variable for recording the CID data
h            VAR BYTE        ' Variable for loop count and timing
i            VAR    BYTE        ' Variable for loop count
length        VAR    BYTE        ' Variable stores the length of CID data string

ADCON1 = 7                  ' Set PORTA and PORTE to digital
Pause 200                   ' Wait for LCD to start up

LCDOut $fe,1, "Caller ID for LAB-XT"    ' Vanity display

loop:
    IF ring_detect = 1 Then loop    ' Wait here until ring detected
   
    High led4                        ' Light LED to indicate incoming ring

time_after:    
    IF ring_detect = 0 Then i = 0    ' Clear timer variable if still ringing
    i = i + 1                        ' Increment timer variable
    Pause 1                            ' Pause 1mS
    IF i < 250 Then time_after        ' Loop here until 250mS after ring stops
   
    Low led4                        ' Ring finished, kill LED

    ' Look for CID data, abort if no data for 500mS
    SerIn2 cid_serial_data, 813, 500, loop, [wait($80),length,STR idstring\length]


    LCDOut $fe,1                    ' Clear the display
   
    For i = 0 TO length                ' Begin loop, each count represents a character
                                    ' in the recorded CID data string.

        Select Case idstring        ' For each character, check for known parameter types
       
            Case $01                ' Parameter type 01 (hex) is date and time.
                i = i + 1            ' Move index pointer to parameter length character.
                                    ' This avoids the length character being mistaken for
                                    ' a parameter-type code.

                LCDOut $fe,$80,idstring[i+1],idstring[i+2],_    ' Display date and time
                $FE,$C0, idstring[i+3],idstring[i+4], " ",_
                $FE,$83, idstring[i+5],idstring[i+6],":",_
                idstring[i+7],idstring[i+8]
               
            Case $02, $04            ' Parameter type 02 is the phone number.
                                    ' Parameter type 04 is the reason, if there is no number
                LCDOut $FE,$89        ' Move the LCD cursor to position 9 on line 1
                GoSub disp_string    ' Display the number string

            Case $07, $08            ' Parameter type 07 is the caller's name.
                                    ' Parameter type 08 is the reason, if there is no name
                LCDOut $FE,$C3        ' Move the LCD cursor to position 4, line 2
                GoSub disp_string    ' Display the name string
           
        End Select

    Next i                            ' Loop to the next character in the array
   
GoTo loop                            ' Return and wait for next ring
   
' Subroutine to display text string. This routine is called when a variable length CID parameter
' type is read from the array. The number of characters to display is stored in the next array
' location after the parameter type.

disp_string:                    

    i = i + 1                        ' Move the index pointer to the parameter-length byte

    IF idstring=1 Then            ' If the parameter is only 1 character long, then display a reason

        IF idstring[i+1] = "O" Then LCDOut "Out Of Area"    ' "O" is Out Of Area
        IF idstring[i+1] = "P" Then LCDOut "Blocked"        ' "P" is Private Caller

    Else                            ' If the parameter is longer than 1 character

        For h = 1 TO idstring    ' Loop from 1 to the length of the parameter
            LCDOut idstring[i+h]    ' Display each character in the parameter
        Next h                        ' Do it for the next character

    EndIF



.....
Logged
tasosstr
Junior Member
**
Offline Offline

Posts: 75

Thank You
-Given: 95
-Receive: 14


« Reply #7 on: December 10, 2005, 10:20:30 10:20 »

------------------------------------------
  Another one
  ------------------------------------------
 
 
  ' PicBasic Pro 2.42 or later, LAB-XT Experimenter Board, PIC16F877-20
 
  ' Demonstrates remote control using DTMF over a phone line.  The
  ' LAB-XT will answer an incoming call on the third ring and sound
  ' a short tone to the caller.  The caller can then control 2 leds
  ' by pressing keys on his telephone.
 
  ' Press 1 for LED4 ON
  ' Press 2 for LED3 ON
  ' Press 4 for LED4 OFF
  ' Press 5 for LED3 OFF
  ' Press 0 to disconnect
 
 
  DEFINE    LOADER_USED    1        ' Only required for melabs Loader
  DEFINE OSC 20                ' 20MHz crystal on the LAB-XT
 
  ' Define LCD registers and bits
  DEFINE  LCD_DREG        PORTD
  DEFINE  LCD_DBIT        4
  DEFINE  LCD_RSREG       PORTE
  DEFINE  LCD_RSBIT       0
  DEFINE  LCD_EREG        PORTE
  DEFINE  LCD_EBIT        1
 
  seize            VAR PORTD.1    ' Alias the line seize control pin
  loop_current    VAR PORTA.3    ' alias the loop current detect input pin
  ring_detect        VAR    PORTA.2    ' Alias the ring-detect input pin
  dtmf_ready        VAR    PORTA.4    ' Alias the dtmf data-ready pin
  select_dtmf        VAR PORTD.3    ' Alias the dtmf enable pin
  DTMF_out        VAR PORTE.2    ' Alias pin for remote user prompts
  led3            VAR PORTC.0    ' Alias pin for LED3
  led4            VAR PORTC.1    ' Alias pin for LED4
 
 
  TRISD = 0        ' Set PORTD to output
  PORTD = 0        ' Initialize PORTD, all zero
  ADCON1 = 7      ' Set PORTA and PORTE to digital
  Pause 200       ' Wait for LCD to start up
  LCDOut $fe,1    ' Clear display
 
 
 
  i            VAR    WORD        ' Variable for loop count
  rings        VAR    BYTE        ' Stores number of rings
  dtmf_digit    VAR BYTE        ' Stores dtmf received digit
 
 
  initialize:
      LCDOut $fe,1, "Waiting for call"    ' Display user prompt
      Low seize                ' Release the line
      rings = 0                ' Reset ring count to 0
      i = 0
      Low led3                ' Shut off LED3
      Low led4                ' Shut off LED4
     
 
  loop:
      Pause 1                    ' Pause 1mS
      i = i + 1                ' Increment counter
      IF i > 5000 Then initialize        ' If 5 seconds have elapsed without ring, re-initialize
      IF ring_detect Then loop        ' Loop here until ring detected
     
     
 
  ringing:    
      IF ring_detect = 0 Then i = 0    ' Clear timer variable if still ringing
      i = i + 1                        ' Increment timer variable
      Pause 1                            ' Pause 1mS
      IF i < 250 Then ringing            ' Return to loop until 250mS after ring stops
     
      rings = rings + 1                ' Increment ring counter
      LCDOut $fe,1, DEC rings," rings detected"    ' Display user prompt
 
      IF rings < 3 Then loop            ' If less than 3 rings, wait for more
     
      seize = 1                        ' If ring 5, answer the call
      Pause 250                        ' Wait 250mS for the line to settle
     
      FreqOut DTMF_out, 500, 800        ' Play a short tone to prompt the caller
      LCDOut $fe,1, "Waiting for DTMF"    ' Display user prompt
     
     
  listen:
      IF (seize = 1) AND (loop_current = 1) Then initialize    ' Re-initialize if the call is dropped remotely
     
      IF dtmf_ready = 0 Then listen    ' Check for DTMF present, if none loop again
 
      ' If DTMF present, continue
 
      select_dtmf = 1            ' Enable the data output from the MT8870
      Pause 1                    ' Pause 1 mS to let data settle
      dtmf_digit = (PORTB >> 4)    ' Read the top nibble of PORTB for DTMF data
 
      ' Use LOOKUP to change the DTMF data to an ASCII character
      LookUp dtmf_digit, ["_1234567890*#ABCD"], dtmf_digit
 
  dtmf_wait:                    
      IF dtmf_ready Then dtmf_wait    ' Loop here until DTMF signal stops
      select_dtmf = 0            ' Disable the MT8870 data output
 
      Select Case dtmf_digit    ' Take action based on the dtmf digit
     
          Case "1"            ' DTMF "1" lights LED3
              High led3
             
          Case "2"            ' DTMF "2" lights LED4
              High led4
             
          Case "4"            ' DTMF "4" kills LED3
              Low led3
             
          Case "5"            ' DTMF "5" kills LED4
              Low led4
             
          Case "0"            ' DTMF "0" hangs up and re-initializes
              GoTo initialize
                         
      End Select
     
  GoTo listen                ' Listen for next DTMF digit
         
     
     
 
 
  ------------------------------------------------
  Another one
  ------------------------------------------------
 
 
 
  ' PicBasic Pro 2.42 or later, LAB-XT Experimenter Board, PIC16F877-20
 
  ' Telemarketing stopper.  Reads caller id and plays Special Information Tones (SIT)
  ' when CID information has been blocked.
 
 
  DEFINE    LOADER_USED    1            ' Only required for melabs Loader
  DEFINE OSC 20                    ' Define for 20MHz crystal on LAB-XT
 
  led4            VAR PORTC.1        ' LED4 output pin
  sieze            VAR    PORTD.1        ' Relay control pin (sieze line)
  loop_current    VAR PORTA.3        ' Loop current present (active low)
  ring_detect        VAR    PORTA.2        ' Ring detect pin (active low, square wave)
  dtmf_out        VAR    PORTE.2        ' DTMF signal output pin
  cid_serial_data    VAR    PORTA.0        ' Caller ID data from FSK chip
 
 
  ADCON1 = 7      ' Set PORTA and PORTE to digital
  TRISD = 0        ' Set PORTD to output
  PORTD = 0        ' Initialize PORTD, all low
 
  ' Define program variables
  j        VAR        BYTE            ' Loop counter, misc
  ring_freq    VAR    WORD            ' Frequency of ring signal (speaker PWM)
  cid_code    VAR BYTE            ' Stores reason code from CID string
 
  initialize:
     
      sieze = 0                    ' Deactivate the line-sieze relay (Hang Up)
      Pause 250                    ' Wait 250mS for things to settle
 
  loop:
 
      ' If Off Hook and the loop_current drops, the caller has hung up. Drop the line
      IF (sieze = 1) AND (loop_current = 1) Then initialize    
 
     
      IF (ring_detect = 0) Then    ' Check for ring-detect (incoming call, active low)
          j = 0                    ' Clear j variable (time elapsed since last ring-detect)
  ring_cycle:
          High led4                ' Light LED to indicate incoming call
          Pause 1                    ' Pause 1mS so we can time this loop
          j = j + 1                ' Each count of j represents 1mS of time
          IF (j > 60) Then stop_ringing        ' If no ring_detect for 60mS, ring has ended
          IF ring_detect = 1 Then ring_cycle    ' Stay in this loop until ring_detect
          Pause 30                ' Pause 30mS. (Low period of ring-detect)        
          j = 30                    ' Set j to 30 (30mS)
          GoTo ring_cycle            ' Loop to keep monitoring the ring-detect
  stop_ringing:                    ' Jump here at end of ring or to answer call
 
          Low led4                ' Shut off the LED
          Pause 250                ' Wait 250mS for line to settle
 
          ' Look for CID data, abort if no data for 500mS
          SerIn2 cid_serial_data, 813, 500, loop,    [wait($80),wait($04,$01), cid_code]
          IF cid_code = "P" Then block_call    ' Check for "Private" code
      EndIF    
         
  GoTo loop               ' Repeat main loop
 
 
  block_call:                        ' Jumps here if turned on and the caller id is blocked
      sieze = 1                    ' Sieze line (Off Hook)
      Pause 500                    ' Wait 500mS to establish loop current
      FreqOut dtmf_out,330,950    ' Send 950Hz tone for 330mS
      Pause 25                    ' 25mS of silence
      FreqOut dtmf_out,330,1400    ' Send 1400Hz tone for 330mS
      Pause 25                    ' 25mS of silence
      FreqOut dtmf_out,330,1800    ' Send 1800Hz tone for 330mS
      Pause 1000                    ' 1 second of silence
  GoTo loop                        ' Back to main loop
 
 
  Other samples (and that sample for  caller id) you can find on :
 
  http://www.melabs.com/resources/samples.htm#xtpbp
 
  I hope to help ...
 
  Best Regards,
  Tasosstr
Logged
Pages: [1]
Print
Jump to:  


DISCLAIMER
WE DONT HOST ANY ILLEGAL FILES ON THE SERVER
USE CONTACT US TO REPORT ILLEGAL FILES
ADMINISTRATORS CANNOT BE HELD RESPONSIBLE FOR USERS POSTS AND LINKS

... Copyright © 2003-2999 Sonsivri.to ...
Powered by SMF 1.1.18 | SMF © 2006-2009, Simple Machines LLC | HarzeM Dilber MC