Curso Eletronica Digital



Alarme com o AT90S2313

Para desligar a bomba de gasolina do carro através de uma simples ligação de celular. Um software simples, onde pode-se ter idéia como faze-lo, ou seja, inicia-lo, fazer as devidas referencias, chamadas, etc. Aqui aprenderemos: - gerar interrupt Timer0 para fazer uma base de tempo, - utilizar o Amp Op Comparador, - gravar e ler na eeprom ; -- AlarCel.asm -- ; alarme com celular ; ; ENSAIO COM AT90S2313 ; alvaro luiz abril 2007 ; alvaroluiz@click21.com.br ; -------------------------------------------------------------------------------- ; ____ ___ ; ; 4k7 | |_| | ; ; vcc_/\/\/\->|~RST VCC|------5V ; ; x->|PD0 PB7|-- (SCK) \ ; ; x<-|PD1 PB6|-> (MISO) | UTILIZADA PARA GRAVAR ; ; 4MHz <-|XT2 PB5|<- (MOSI) | ; ; ->|XT1 PB4|-> / 2K2 P/ BASE BC547 E RELE MOTOR ; ; .--/\/\/\--|PD2 PB3|-----------/\/\/\---> Habilita sim/nao motor de gas ; ; | 470R X--|PD3 PB2|<--------------------------------/\/\/\---------. ; ; _|_ X--|PD4 -PB1|<-----0V7 (V REF DIODO 1N4148) 220R | ; ; \ / X--|PD5 +PB0|<------.---/\/\/\--.--------O(ENTRADA EXTERNA | ; ; --- .--|GND PD6|--X | 47K | 47K DE 1V5 CELULAR) |botão ; ; | led | |__________| ___ |_/\/\/\_ |rearme ; ; | | AT90S2313 /_\ | o | ; ; _|_ _|_ | 5V1 ZENER | |<- ; ; _|_ _|_ o | ; ; | ; ; _|_ ; ; cristal poderá ter 2 cap de 10 a 22pf a gnd ; ; o rele poderá ser 12VCC mas deverá ter um 7805 para fazer o VCC de 5V ; ; deve-se colocar cap plate de 100kpf na saida do 7805 e entre os pinos ; ; 20 e 10 do 2313. ; ; O Led em PD2 finalidade de ficar sempre piscando, sinal de vida, pode ser ; ; eliminado, sem problemas. ; ; -------------------------------------------------------------------------------- ; DESCRIÇÃO ; ========= ; O circuito tem como finalidade on/off na bomba de combustivel do seu auto, em muitos ; esta bomba fica dentro do tanque de combustivel, mas a função deste é fornecer os ; 12Volts para o motor. ; Quando o rele estiver desacionado C/NA, alimentam o motor PB3=0, tudo OK carro será ; alimentado, mas quando houver uma ligação para o celular que você escolheu, enviará ; 1v5 para alto falante interno, você ligará este fio p/ a entrada PB0 e gnd, PB0 está ; ligado a gnd por 47K. ; As entradas +PB0 e -PB1 fazem a entrada de +/- de um ampop operando como comparador, ; então este sente a presença do 1v5 do celular considerá como desligar o motor de ; combustivel fazendo ligar o rele com PB3=1, e esta informação será guardada em eeprom ; e não ligará mais o motor a não ser que a tecla "botão ReArme" seja acionada que faz ; PB2=0. Esta entrada PB2 internamente tem um resistor de aprox. 47K como pullup. ; Sempre que o sistema for ligado, haverá uma inibição do motor, ele faz por um tempo ; para normalizar as tensões do circuito, eliminando assim informações indesejadas. ; Então decorridos por volta de 2 segundos, ele assumirá o estado que tinha quando foi ; desligado na ultima vez. Espera-se que este aparelho nunca desligue o motor, a não ser ; em caso de emergencia, logo o estado de "repouso da maquina" será PB3=0 e sempre ligado ; com o VCC=5v, seu consumo neste estado é baixo menor que 3mA sem contar o LED em ; PD2, logo poderá sempre ficar ligado a espera do celular. ; --------------------------------------------------------------------------- .nolist .device AT90S2313 .include "2313def.inc" .list .def ra=r16 .def rb=r17 .def rc=r18 .def rd=r19 ; --------------------------------------------- .equ sram = 0x60 .equ down = sram+0 ;======================== .cseg .org 0x000 rjmp reset .org 0x006 rjmp isr0 ;======================== reset: ldi ra,$df out spl,ra ;stack pointer ldi yh,high(sram) ldi yl,low(sram) ; ini_tmr0: -------------------- ldi ra,0x02 ; 4MHZ/256/8=1953,125->512us out tccr0,ra ; prescaling timer0 in ra,timsk ori ra,0x02 out timsk,ra ; over flow timer0 ; ------------------------------ ldi ra,0b00000100 out ddrd,ra ldi ra,0b00001000 out ddrb,ra ldi ra,0b00000100 ;fazendo pullup em PB2 out portb,ra ldi ra,0x04 out acsr,ra ;hab analogico comparador sei ;hab global interrupt espera: sbi portb,3 tst r2 brne espera ;------------------------------------- loop: ldi rb,5 rcall e2pr tst ra breq releOn releOff: sbi portb,3 sbi portb,4 rjmp loop1 releOn: cbi portb,3 cbi portb,4 loop1: sbic acsr,aci ;bit 4=1 houve S1V5 rjmp alarme sbic pinb,2 ;pb2=0 liberar alarme rjmp loop libera: ldi rb,5 ldi ra,0 rcall e2pw rjmp loop alarme: sbi acsr,aci ldi rb,5 ldi ra,0xaa rcall e2pw rjmp loop ; ----------------------------------- e2pr: out eearl,rb sbi eecr,0 nop nop in ra,eedr ;get data ret ; ------------------------------------ e2pw: sbic eecr,eewe rjmp e2pw out eear,rb out eedr,ra sbi eecr,eemwe sbi eecr,eewe nop nop ret ;---------------------------------- ; ISR Tmr0 4MHZ/256/1024=15,258HZ->65,536 ms ; --------------------------------- isr0: push ra in ra,sreg ;salve flag push ra push rb ; --------------------------------- ldd ra,y+(down-sram) dec ra std y+(down-sram),ra brne intf ldi ra,80 std y+(down-sram),ra tst r2 breq intb dec r2 intb: in ra,pind ldi rb,0b00000100 eor ra,rb out portd,ra ; --------------------------------- intf: pop rb pop ra out sreg,ra pop ra reti ; End
1