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




Bookmarks