How do I detect a polarity change on an input?


Closed Thread
Results 1 to 22 of 22

Hybrid View

  1. #1
    Join Date
    Oct 2004
    Posts
    448


    Did you find this post helpful? Yes | No

    Default

    Forgot to add, there are readymade basic snippets on the web that directly let a stamp drive an X10 firecracker as well; would achieve the same objective you seek.

    Regards,

    Anand

  2. #2
    jessey's Avatar
    jessey Guest


    Did you find this post helpful? Yes | No

    Default Interesting idea

    Thanks Anand,

    I've been away visiting with a friend without a computer (hard to believe now a days). Now that's something that I'd definitely be interested in investigating. I surely would appericate receiving the URL's if you could please send them to me.

    Thanks Again
    jessey

  3. #3
    Join Date
    Oct 2004
    Posts
    448


    Did you find this post helpful? Yes | No

    Default

    Hi Jessey,

    To begin with, here's Dave excellent page on the X10 RF protocol http://www.arkis.net/rf_protocol.htm.

    This would give you a pretty good starting point.

    The other approach would be to use a CM17A (Firecracker) module; this would eliminate the need for a separate RF transmitter. Theres loads of basic software available to drive it; one such page is at http://www.awce.com/firecracker.htm

    Hope this helps!

    Regards,

    Anand

  4. #4
    jessey's Avatar
    jessey Guest


    Did you find this post helpful? Yes | No

    Default Thanks for the links

    Hello Anand,

    Thanks for the links, I've had some time now to ponder over the firecracker stamp code and have some questions if anyone can help me. I've never had any experience using the Stamp so it'll definitely be a learning experience for me. I ordered a firecracker and expect to have it in a week or so. It sure would be nice to be able to get rid of all the reed relays and transistors that I'm using now on my modified X10 remote control.

    I've checked the archives for any conversion tips for converting Stamp code to PBP and I did manage to find someone quoting that there are no NIB's in PBP so I changed all the NIB's to BYTE variables as the thread recommended.

    I also found that the stamp code didn't declare the port pins for the push buttons so I declared them as well. Another thing I did was to change the rts & dtr from CON statements to declaring them as port variables to enable setting them high and low in the PBP code for the transmitter (firecracker) and I'm also assuming that all I have to do for the ground of the transmitter is to tie it to the VSS of my 16F877.

    What I don't understand is that when I try to compile the code I get 3 errors:
    "error.macro and?bbl not found in macro file", is this some sort of an include file that I'm missing or something that I have to add or declare somewhere?

    Also I get two bad expressions, one for "READ housetbl+house,byt" and the other for "READ unittbl+(unit//8),tmp", is there a conversion for these two that will work for PBP? Could it be that the Data statement is wrong for PBP and possibly it needs an @ sign in there?

    Any help in understanding this code will be greatly appreciated.

    Thanks
    jessey

    Code:
    '************************************************************
    '*  Name    : FIRECRACKER.BAS                               *
    '*  Author  : Jessey Montgomery                             *
    '*  Date    : Feb. 2nd, 2008                                *
    '*  Version : PBP ver 2.45, MicroCode Studio 2.1.0.7        *
    '*          : MPASM v03.60, EPIC Version 2.46 beta          *
    '*          : 16F877                                        *
    '*  Notes   :                                               *
    '*          :                                               *
    '************************************************************
    
    '                          --------------                     
    '                          |   16F877   |                     
    '         MCLR/Vpp ------> |1         40| <-----> RB7/PGD     
    '          RA0/AN0 <-----> |2         39| <-----> RB6/PGC     
    '          RA1/AN1 <-----> |3         38| <-----> RB5         
    '    RA2/AN2/Vref- <-----> |4         37| <-----> RB4         
    '    RA3/AN3/Vref+ <-----> |5         36| <-----> RB3/PGM     
    '        RA4/TOCK1 <-----> |6         35| <-----> RB2         
    '       RA5/AN4/SS <-----> |7         34| <-----> RB1         
    '       RE0/RD/AN5 <-----> |8         33| <-----> RB0/INT0    
    '       RE1/WR/AN6 <-----> |9         32| <-----  Vdd +       
    '       RE2/CS/AN7 <-----> |10        31| <-----  Vss -       
    '            + Vdd  -----> |11        30| <-----> RD7/PSP7    
    '            _ VSS  -----> |12        29| <-----> RD6/PSP6    
    '        OSC/CLKIN  -----> |13        28| <-----> RD5/PSP5    
    '      OSC2/CLKOUT <------ |14        27| <-----> RD4/PSP4    
    '  RC0/T1OSO/TICK1 <-----> |15        26| <-----> RC7/RX/DT   
    '   RC1/T1OSI/CCP2 <-----> |16        25| <-----> RC6/TX/CK   
    '         RC2/CPP1 <-----> |17        24| <-----> RC5/SDO     
    '      RC3/SCK/SCL <-----> |18        23| <-----> RC4/SD1/SDA 
    '         RD0/PSP0 <-----> |19        22| <-----> RD3/PSP3    
    '         RD1/PSP1 <-----> |20        21| <-----> RD2/PSP2    
    '                          --------------              
    
    '-----------------------------------------'
    '-- Clear All The Variables And Each Port '
    '-- Before Setting The TRIS Registers     '
    '-----------------------------------------'
     
      Clear     ' Set all ram registers to zero
      PORTA = 0
      PORTB = 0                           
      PORTC = 0   
      PORTD = 0
      PORTE = 0
     
    '-----------VSS VDD MCLR Ect. Pins -----------'
     
    ' MCLR         (Pin 1)
    ' VDD          (Pin 11)
    ' VSS          (Pin 12)
    ' OSC/CLKIN    (Pin 13)
    ' OSC2/CLKOUT  (Pin 14)
    ' VSS          (Pin 31)
    ' Vdd          (Pin 32)
     
     '-----------SET THE TRIS PINS BEING USED-----------'         
     
     '-------------------- PORTA PINS --------------------'
                 
      TRISA.0 = 1 '(pin 2) NOT USED  
      TRISA.1 = 1 '(pin 3) NOT USED 
      TRISA.2 = 1 '(pin 4) NOT USED 
      TRISA.3 = 1 '(pin 5) NOT USED 
      TRISA.4 = 1 '(pin 6) NOT USED  
      TRISA.5 = 1 '(pin 7) NOT USED  
     
     '-------------------- PORTB PINS --------------------'
     
      TRISB.0 = 1 '(pin 33) NOT USED   
      TRISB.1 = 1 '(pin 34) NOT USED   
      TRISB.2 = 1 '(pin 35) NOT USED   
      TRISB.3 = 1 '(pin 36) NOT USED  
      TRISB.4 = 1 '(pin 37) NOT USED 
      TRISB.5 = 1 '(pin 38) NOT USED    
      TRISB.6 = 1 '(pin 39) NOT USED  
      TRISB.7 = 1 '(pin 40) NOT USED 
     
     '-------------------- PORTC PINS --------------------'
    
      TRISC.0 = 1 '(pin 15) NOT USED
      TRISC.1 = 1 '(pin 16) NOT USED
      TRISC.2 = 1 '(pin 17) NOT USED 
      TRISC.3 = 1 '(pin 18) NOT USED  
      TRISC.4 = 1 '(pin 23) .......Pushbutton or input from LabXT 
      TRISC.5 = 1 '(pin 24) .......Pushbutton or input from LabXT  
      TRISC.6 = 1 '(pin 25) .......Pushbutton or input from LabXT 
      TRISC.7 = 1 '(pin 26) .......Pushbutton or input from LabXT     
     
     '-------------------- PORTD PINS --------------------'
     
      TRISD.0 = 0 '(pin 19) ........used to power the firecracker   
      TRISD.1 = 0 '(pin 20) ........used to power the firecracker    
      TRISD.2 = 1 '(pin 21) NOT USED    
      TRISD.3 = 1 '(pin 22) NOT USED  
      TRISD.4 = 1 '(pin 27) NOT USED   
      TRISD.5 = 1 '(pin 28) NOT USED   
      TRISD.6 = 1 '(pin 29) NOT USED   
      TRISD.7 = 1 '(pin 30) NOT USED  
     
     '-------------------- PORTE PINS --------------------'
     
      TRISE.0 = 1 '(pin 8)  NOT USED   
      TRISE.1 = 1 '(pin 9)  NOT USED   
      TRISE.2 = 1 '(pin 10) NOT USED
    
    
    DEFINE OSC 4         ' 4MHz crystal
     
    @ __CONFIG _HS_OSC &_BODEN_OFF &_PWRTE_ON &_WDT_ON &_CP_OFF 
    &_LVP_OFF
    ' turn off the Crossing page boundary warnings
    @ errorlevel -306 
    
     ADCON1 = 7   ' Set PORTA and PORTE to digital
    
    ' This is a link to the orginal code below, 
    ' http://www.awce.com/firecracker.htm
    
    ' Define Variables Here
    ' ---------------------
    ' byte to send
     byt var byte
     tmp var byte
     i var BYTE 'was a nib
     x var BYTE 'was a nib
     state var bit(4)
     house var byte '0=A 1=B...
     unit var BYTE  ' 0-15  (must be 0 for bright/dim) 'was a nib
     cmd var BYTE  ' 0=off 1=on 2=bright 3=dim 'was a nib
    
    'these push buttons weren't declared 
     in11 VAR PORTC.4 ' (pin 23)..Pushbutton or input from LabXT
     in10 VAR PORTC.5 ' (pin 24)..Pushbutton or input from LabXT
     in9  VAR PORTC.6 ' (pin 25)..Pushbutton or input from LabXT
     in8  VAR PORTC.7 ' (pin 26)..Pushbutton or input from LabXT
    
    
    ' Firecracker Interface (Al Williams)
    ' http://www.al-williams.com/awce
    ' Wire Ground (DB9 pin 5)
    ' DTR (DB9 pin 4)
    ' RTS (DB9 pin 7)
    'rts con 1
    'dtr con 0
    rts VAR PORTD.0 ' pin 19 
    dtr VAR PORTD.1 ' pin 20 
    
    ' The Firecracker header (2 bytes)
    h1 con $D5
    h2 con $AA
    
    ' the Firecracker footer (1 byte)
    foot con $AD
    
    gosub resetfirecracker
    
    ' Sample program
    main:
    ' all off
      for x=0 to 3
        house=0
        unit=x
        cmd=0
        gosub sendcmd
        pause 20
        state(x)=0
      next
    
    mainloop:
      if in11=0 then c0  ' look for buttons on p8-11
      if in10=0 then c1
      if in9=0 then c2
      if in8=0 then c3
      goto mainloop
    
    c0:
      x=0
      goto ccmd
    c1:
      x=1
      goto ccmd
    c2:
      x=2
      goto ccmd
    c3:
      x=3
    ccmd:
      unit=x
      cmd=state(x)+1
      if cmd=1 then gocmd
      cmd=0
    gocmd:
       gosub sendcmd
       pause 250
       state(x)=cmd
       goto mainloop
    
    ' End of example program
    
    ' Send command
    sendcmd:
      byt=h1
      gosub sendbyte
      byt=h2
      gosub sendbyte
      read housetbl+house,byt
      if unit<9 then lowunit
      byt=byt+4
    lowunit:
      gosub sendbyte
      byt=$20
      if cmd=0 then addunit
      byt=0
      if cmd=1 then addunit
      byt=$88
      if cmd=2 then nounit
      byt=$98
      if cmd=3 then nounit
    ' huh???
    
    addunit:
      read unittbl+(unit//8),tmp
      byt=byt+tmp
    nounit:
      gosub sendbyte
      byt=foot
      gosub sendbyte
    return
    
    ' Send 1 raw byte
    sendbyte:
      debug hex byt," "
      for i=0 to 7
       if byt & $80 = $80 then xmit1
       gosub send0
    nextbit:
       pause 1
       byt=byt*2
       next
       return
    
    
    ' Send a 1
    xmit1:
      gosub send1
      goto nextbit
    
    
    ' Send bits (0 or 1)
    send0:
      low rts
      pause 1
      high rts
      return
    
    send1:
      low dtr
      pause 1
      high dtr
      return
    
    
    ' Always reset firecracker first
    resetfirecracker:
    low rts
    low dtr
    pause 50  ' reset
    high rts
    high dtr
    pause 50
    return
    
    ' Data for house and unit codes
    ' should there be an @ somewhere below for pbp?
    housetbl data $60,$70,$40,$50,$80,$90,$A0,$B0,$E0,$F0,$C0,$D0
          data $00,$10,$20,$30
    unittbl data 0,$10,$8,$18,$40,$50,$48,$58

  5. #5
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Hi Jessey,

    Can't comment on the FireCracker thingy, but I beleive the and?bbl problem is in the
    &nbsp; &nbsp; if byt & $80 = $80 then xmit1
    Statement.

    Putting parenthesis around the bitwise AND should fix it.
    &nbsp; &nbsp; if (byt & $80) = $80 then xmit1
    <br>
    DT

  6. #6
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Oh, and putting the EEPROM Data at the top of the program instead of the bottom, should fix the other error.

    hth,
    DT

  7. #7
    jessey's Avatar
    jessey Guest


    Did you find this post helpful? Yes | No

    Default Compiles like a good thing now

    Thanks Darrel,

    That worked out great, now the boring part is that I have to wait until my firecracker makes it here to see how it works as is before I start modifying the program to interface to my LabXT telephone board.

    Thanks Again
    jessey

Similar Threads

  1. Sony LanC Program
    By l_gaminde in forum Code Examples
    Replies: 2
    Last Post: - 25th September 2009, 18:51
  2. Replies: 1
    Last Post: - 7th November 2007, 20:36
  3. Timing input pulses and re-outputting them
    By jamie_s in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 28th February 2007, 01:50
  4. Using LEDs as light sensors
    By skimask in forum Code Examples
    Replies: 3
    Last Post: - 30th December 2006, 22:19
  5. detect oscillating input
    By fester addams in forum General
    Replies: 1
    Last Post: - 22nd November 2004, 18:08

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