SMS remote control HW: v3.0, SW: v7b01
Designed at Decembar 2010 by Vujackov Branko
Testing Demo at Januar 2011 by Vujackov Branko
Ovaj projekat ima za cilj izradu sms daljinskog upravljaca. Uredjaj koristi telefone nokia 3310 kojih ima u izobilju po vrlo pristupacnoj ceni. SMS daljinski upravljac ima mogucnost da pali 8 uredjaja. Izabrao sam 4 od 10A i 4 od 16A. Takodje ima mogucnost primanja podataka sa 8 ulaza. Ostavljena je opcija prosirenja uredjaja sa dodatnim plocama za paljenje i preko 32 releja, kao i plocica za povecanje ulaznih linija.
Sta moze uredjaj u praksi? Pali i gasi dosta elektricnih uredjaja u domacinstvu: Bojlere, pumpe, garazna vrata, svetla. A preko rid relea mointiranih na vratima i prozorima predstavlja mocan alarm sa mogucnoscu dojave o kradji primanjem poruke. Uredjaj se napaja sa 12v pa ga je moguce ugraditi i u automobil ali sve je jos u fazi testiranja.
Centralni mozak uredjaja je microchip 16f628a ali se moze prilagoditi i drugim mikroprocesorima 16f88....
Uredjaj je napravljen klasicnim integrisanim kolima sa DIP kucistem. U sledecim HW verzijama upotrebicu smd elemente i smanjiti jos velicinu uredjaja koji ni sada nije nesto glomazan, napravljen je na plocici 100x160mm.
schematic:
pcb:
software demo only testing led diodes:
SOFTWARE v1.0
;v1.0 testing leds. Bug in software...
LIST P=16F628a, R=DEC
#include "P16F628a.INC"
__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC & _LVP_OFF & _BODEN_OFF
;---------------------------------------------------------------------
;
#define STRB PORTB, 7
#define SPDAT PORTB, 6
#define CLKK PORTB, 5
;---------------------------------------------------------------------
;
#define PL PORTB, 4
#define PSDAT PORTB, 3
;;; Bits du Port A :
;PA4 equ 4
;PB3 equ 3; (sur lequel se trouve SCL).
;PB7 equ 7 ; (sur lequel se trouve SDA).
;;; Entrees / sorties :
;LED equ PA4 ; Broche sur laquelle est connectee une Led.
;SCL equ PB7 ; Broche 'Serial CLock' du bus I2C.
;SDA equ PB3 ; Broche 'Serial DAta' du bus I2C.
;;; BOOLEEN :
;I2CACK equ 0 ; le bit '0' de l'adresse BOOLEEN, qui sert a
; verifier si l'acces a la memoire I2C est correct.
;;; Constantes :
;I2C_WR equ b'00000000'
;I2C_RD equ b'00000001'
;I2C_EEPROM equ b'10100000'
cblock 0x20 ;registar za rele privremeno prebaciti u eeprom kasnije
Rele1
Key_Bufer
SP_counter
PS_counter
counter2
temp
cdsend
;smspoz
count1
counta
countb
endc
org 0x0000 ;org sets the origin, 0x0000 for the 16F628,
goto SystemSetup
;Delays
Delay:
; movlw d'250' ;delay 250 ms (4 MHz clock)
; movwf count1
;d1 movlw 0xC7
; movwf counta
; movlw 0x01
; movwf countb
;Delay_0
; decfsz counta, f
; goto $+2
; decfsz countb, f
; goto Delay_0
; decfsz count1 ,f
; goto d1
; retlw 0x00
; Delay = 0.25 seconds
; Clock frequency = 14.7456 MHz
; Actual delay = 0.25 seconds = 921600 cycles
; Error = 0 %
;921597 cycles
movlw 0x48
movwf count1
movlw 0x03
movwf counta
movlw 0x03
movwf countb
Delay_0
decfsz count1, f
goto $+2
decfsz counta, f
goto $+2
decfsz countb, f
goto Delay_0
;3 cycles
goto $+1
nop
return
Delay1:
call Delay
call Delay
return
SystemSetup:
;---------------------------------------------------------------------
;comparators
movlw 0x07
movwf CMCON ;turn comparators off (make it like a 16F84)
;---------------------------------------------------------------------
;Eprom
bsf STATUS, RP0 ;select bank 1
BSF EECON1,WREN ;Enable Write
bcf STATUS, RP0 ;select bank 0
;---------------------------------------------------------------------
;Ports
movlw b'00010000' ; set up portA
movwf PORTA
movlw b'00000100' ; RB2(TX)=1 others are 0
movwf PORTB
bsf STATUS, RP0 ;select bank 1
movlw b'00000011' ;set PortB inputs and outputs
movwf TRISA ;0-out, 1-in
movlw b'00001111' ;set PortB inputs and outputs
movwf TRISB ;0-out, 1-in
bcf STATUS, RP0 ;select bank 0
;---------------------------------------------------------------------
;call EEPROM_READ_RELE_PORT ;cita iz eproma sa pozicije 0 rele port
;call cd4094_send ;salje ga na cd4094
;---------------------------------------------------------------------
goto test
loop22:
movlw B'00000000'
movwf Rele1
call cd4094_send
call Delay1
movlw B'00000001'
movwf Rele1
call cd4094_send
call Delay1
movlw B'00000010'
movwf Rele1
call cd4094_send
call Delay1
movlw B'00000100'
movwf Rele1
call cd4094_send
call Delay1
movlw B'00001000'
movwf Rele1
call cd4094_send
call Delay1
movlw B'00010000'
movwf Rele1
call cd4094_send
call Delay1
movlw B'00100000'
movwf Rele1
call cd4094_send
call Delay1
movlw B'01000000'
movwf Rele1
call cd4094_send
call Delay1
movlw B'10000000'
movwf Rele1
call cd4094_send
call Delay1
movlw B'00010000' ;test led blink ra4
xorwf PORTA
goto loop22
;******************************************************************************
;******************************************************************************
cd4094_sende:
bcf STR ;str=0 primao podatke
MOVF Rele1,W ;iz rele u W pomeri
movwf cdsend ;upisi u cdsend
call cd4094
bsf STR ; str=1 da lecuje podatke
return
cd4094:
bcf STATUS,0 setovan
movlw 0x08 ;8 puta rotiraj pa zato upisi u brojac
movwf SP_counter
SP_loop:
rlf cdsend, F ;(rrf cdsend, F) rotiraj
bcf SP_DAT ;setuj DAT=0
btfsc STATUS,0 ;proverava da li je podatak 1 ili 0 u C statusa
bsf SP_DAT ;setuj DAT=1
bcf CLK ;klok 1 pa 0 da bi cd4094 primio sledeci podatak
bcf CLK
decfsz SP_counter, F ;da li se 8 smanjilo na 0
goto SP_loop ;ako ne skoci
bcf STATUS,0 ;zato sto rotira kroz status C bit ocisti ga da nije setovan
return
;******************************************************************************
;******************************************************************************
test
call cd4021
movf Key_Bufer,W
movwf Rele1
call cd4094_send
call Delay1
call Delay1
movlw B'00010000' ;test led blink ra4
xorwf PORTA
goto test
cd4021:
movlw D'8'
movwf PS_counter
bsf CLK ;CLK=0
bcf PL ;PL=1 da bi primio podatke paralelno to serial
bcf PL ;PL=0 da se podaci ne menjaju(da stalno ne prima podatke)
PS_loop:
bcf STATUS,0
btfsc PS_DAT
bsf STATUS,0
rlf Key_Bufer, F
bcf CLK
bcf CLK
decfsz PS_counter, F
goto PS_loop
bcf STATUS,0
return
;******************************************************************************
;******************************************************************************
END