bom, o sistema de injeção via microcontrolador está pronto
ele analisa se o led de mistura pobre está apagado ou aceso - caso esteja apagado então ha uma falta de combustável (esse led pode ser um led verde até, para prevenir que chegue a entrar em mistura realmente pobre).
nesse caso ele começa a pulsar o bico injetor até que o led de mistura pobre acenda novamente, feito isto ele ainda fica pulsando mais algum tempo antes de parar - pois senão o hallmeter já secaria denovo. se ele secar novamente o bico pulsa novamente.
o tempo de injeção dos bicos pode ser controlado aumentando ou diminuindo por
dentro do carro em tempo real atravṍs de 2 botões
até que não foi muito difácil já que sou programador de computador 
no fim de semana eu devo fazer essa configuração de pulsos ser armazenada na
memória permanente (para ela não sumir quando desliga o carro), fazer um timer para só entrar em ação depois de 30s que o carro está ligado (para a sonda esquentar) e até fazer com um sensor tps - assim eu posso até analisar se eu dei um pisão rápido no acelerador e injetar combustável antes de receber o sinal da sonda… hehehehheheheh vai ficar bão
hoje a noite vou no meu preparador pegar um preostato ou um bico phudido mesmo pra testar em casa, e amanhã cedo vou correr atrás de um rel? que consiga ser ativado por um chip desses da atmel - ou tentar descobrir como usar um transistor de potência que eu não faão a mínima idéia de qual ou de como usar...
segue o código se alguém se interessar: para o chip atmel at90s1200 a 4mhz:
.nolist
.include 1200def.inc
.list
.def temp=r17 ;registrador de uso geral (seu conte?do pode ser mudado a qualquer hora)
.def temp2=r18 ;registrador de uso geral (seu conte?do pode ser mudado a qualquer hora)
.def time=r19 ;usado em sleep2 para saber por quanto tempo parar
.def nropulsos=r20 ;serve para armazenar por quantas vezes o bico ir? pulsar mesmo a mistura não estando mais pobre
.def bico_time=r21 ;tempo que o bico fica fechado/aberto
rjmp main
main:
ldi temp, 0xff
out ddrb, temp ;portb = tudo saida 0=entrada, 1=saida
cbi ddrd, 2 ;portd, pd2 = entrada
cbi ddrd, 3 ;portd, pd3 = entrada (+, aumenta tempo pulsos)
cbi ddrd, 4 ;portd, pd3 = entrada (-, aumenta tempo pulsos)
ldi bico_time, 1 ;por padrao o tempo de injeção é 1
loop:
sbis pind, 2 ;se não houver tensão no pd2 (led de mistura apagado)
rcall pulsa_bico ;então a mistura está pobre e faz o bico pulsar
rcall analisa_botoes;
rjmp loop ;senão novamente para analisar se deve-se pulsar o bico
;-- ------------------------------------------------------------
; rotina que pulsa o bico
; obs: ela faz 0x2f pulsos pelo menos - mesmo a mistura já não
; estando mais pobre, pois senão o motor ficaria pobre
; novamente depois que parasse de pulsar, e neste caso é
; melhor jogar um pouco de combustável fora do que ter falhas
;--------------------------------------------------------------
pulsa_bico:
ldi nropulsos, 0x2f
pulse_it:
rcall abre_bico ;abre o bico injetor
mov time, bico_time
rcall slw2 ;aguarda por 2 instantes enquanto o bico está aberto
rcall fecha_bico ;fecha o bico injetor
mov time, bico_time
rcall slw2 ;espera por mais 2 instantes enquanto o bico está fechado
rcall analisa_botoes ;com o bico fechado, vê se o usuario quer mudar o tempo injeção
dec nropulsos ;ok, fiz 1 ciclo, diminuia 1 de 0x2f
brne pulse_it ;se nropulsos for diferente de 0 volte e pulse novamente
sbis pind, 2 ;acabamos de pulsar as 0x2f vezes, mesmo assim a mistura ainda está pobre?
rjmp pulsa_bico ;sim então volte e pulse mais 0x2f vezes
ret ;não então volte para a rotina principal
;--------------------------------------------------------------
; rotina que simplesmente abre o bico injetor
; manda uma tensão para o pino pb0 e volta. esta tensão aciona
; um rel? que aciona o bico
;--------------------------------------------------------------
abre_bico:
ldi temp, 0x00000001
out portb, temp
ret
;--------------------------------------------------------------
; rotina que simplesmente fecha o bico injetor
; corta a entergia do pino pb0 e volta. isto faz o rel? cortar
; a energia do bico injetor e esse se fecha.
;--------------------------------------------------------------
fecha_bico:
ldi temp, 0x00000000
out portb, temp
ret
analisa_botoes:
sbic pind, 3
rcall aumenta_tempo_injecao
sbic pind, 4
rcall diminui_tempo_injecao
ret
;--------------------------------------------------------------
; aumenta o tempo de injeção que o bico fica aberto/fechado
;--------------------------------------------------------------
aumenta_tempo_injecao:
cpi bico_time, 0xff ;ainda pode aumentar?
breq aumenta_volta ;nao... estao volta e nao faz nada
inc bico_time ;sim aumenta o tempo de injeção em 1
aumenta_volta:
sbic pind, 3 ;espera o usuário soltar o bot?o
rjmp aumenta_volta
ret
;--------------------------------------------------------------
; diminui o tempo de injeção que o bico fica aberto
;--------------------------------------------------------------
diminui_tempo_injecao:
cpi bico_time, 0x01 ;ainda pode diminuir? (note que o tempo de injeção mínimo é 1)
breq diminui_volta ;nao... pois ja esta no tempo de injecao minimo que é 1
dec bico_time ;sim diminui em 1
diminui_volta:
sbic pind, 4 ;espera o usuário soltar o bot?o
rjmp diminui_volta
ret
;--------------------------------------------------------------
; sleep2:
; simplesmente perde tempo (tempo usado para deixar o bico
; aberto/fechado).
; coloque em time o tempo de espera
;--------------------------------------------------------------
slw2:
rcall slw
dec time
brne slw2
ret
;--------------------------------------------------------------
; rotina de sleep 1
; simplesmente perde um pouco de tempo
;--------------------------------------------------------------
slw:
ldi temp , 0xff
ldi temp2, 0x15
dec_temp:
nop
dec temp
brne dec_temp
wdr; ;watch dog reset
ldi temp, 0xff
dec temp2
brne dec_temp
ret