formula simples

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

formula simples

Mensagempor juarezbazzo » 04 Dez 2006 00:33

Por mais que tentei entender as formulas ditas por colegas e outro meio achado na internet para transformar um numero inteiro em unidade, dezena e centena, não tive êxito
Consegui fazer isso com quatro registradores, o primeiro incrementa até se igualar ao numero inteiro, os outro registradores também incrementam do modo padrão, com isso consegui extrair a unidade, dezena e centenas.
No meu caso, usei o A/D do PIC12F675 mostrando o resultado num LCD através de Shift Register Serie/Paralelo . 74LS164
Depois de quase “fundir” os poucos “Neurônios” tentando traduzir os números decimais (já extraídos ) ou seja 1,49 volts no pino analógico, já mostrava no LCD 76 (bits), 1,49x0,0196=76, só faltava transformar os “76” em 1,49 no visor, me veio a mente algo que tinha gravado em algum lugar uma formula de um colega (proex ) do fórum, ali dizia pra multiplicar o valor do passo (no caso, 0,019 arredondado) por 1000 que se tornaria =19, depois era multiplicado pelo números de passos, que no caso era “76” e depois dividir por 100.
Que sufoco, deslocar pra esquerda, depois pra direita os bit (multiplica e divisão no Pic), pra os novatos como eu é praticamente impossível de conseguir isso, pois quando estava quase conseguindo se perdia no emaranhado de contas, como no livro dizia que podia multiplicar fazendo soma sucessivamente, como no caso atual era multiplicar o numero “Mágico” 19 por o numero de passos 76 que seria =1444, então agora é dividir por mil (no meu caso), depois de “meditar” muito, pensei, porque ter tanto trabalho (isso é se conseguisse) para dividir, se eu poderia só deslocar a virgula três casa pra esquerda?, dito e feito aí esta: 1,444, deu uma diferença de 5 centésimo mais baixo, isso não é nada .
Usei quase toda formula para extrair os und, dez, centena nessa nova.
Um registrador conta o números de passos (76) 19 vezes, cada vez que completa o numero (76), incrementa um contador até completar as 19 vezes, fácil.
OBS, só usei oito bit do A/D, pois o 74LS164 só possui 8 saída
Se alguém já tem essa formula, desculpe por ter dito aqui, ou se alguém tiver outra mais fácil que diga, vai as formulas a baixo 100+; um abraço; Juarez Bazzo NH-RS
;###### EXTRAIR AS CENT. DEZ. UNID. ############
;"GERAL" É O Nº INTEIRO QUE SE QUER EXTRAIR AS CENT. DEZ. UNID.
XXXX:
CLRF CENTENATER
CLRF DEZENATER
CLRF UNIDADETER
CLRF SOMATORIO
VOLTAINCTER:
MOVF SOMATORIO,W
SUBWF GERAL,W
BTFSS STATUS,Z ;SÃO IGUAIS?
GOTO INCMENTATER ;NÃO, INCREMENTA
CALL LERTABELA
RETURN
INCMENTATER:
INCF SOMATORIO
INCF UNIDADETER,F ;INCREMENTA
MOVLW .10
SUBWF UNIDADETER,W
BTFSS STATUS,Z
GOTO TERMOZINHO
CLRF UNIDADETER ;ZERA UNIDADE

INCF DEZENATER,F ;INCREMENTA
MOVLW .10
SUBWF DEZENATER,W
BTFSS STATUS,Z
GOTO TERMOZINHO
CLRF DEZENATER

INCF CENTENATER,F ;INCREMENTA
MOVLW .10
SUBWF CENTENATER,W
BTFSS STATUS,Z
GOTO TERMOZINHO
CLRF CENTENATER ;ZERA UNIDADE
TERMOZINHO:
GOTO VOLTAINCTER

;###############################################
;@@@@@@@@@@ TRANSFORMA O Nº DE PASSOS EM VALOR REAL DO ANALOGICO @@@@@@@@@@@@@@@@
;###############################################

LERTABELA:
CLRF CENTENA
CLRF DEZENA
CLRF UNIDADE
CLRF MILHAR
CLRF GERAL2
RERECONTA:
CLRF SOMATORIO2
VOLTAINCTER2:
MOVF SOMATORIO2,W
SUBWF GERAL,W ;SUBTRAI O VALOR DE W DO REG F
BTFSS STATUS,Z ;SÃO IGUAIS?
GOTO INCMENTATER2
GOTO RECONTA
INCMENTATER2:
INCF SOMATORIO2
INCF UNIDADE,F ;INCREMENTA UNIDADE
MOVLW .10
SUBWF UNIDADE,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF UNIDADE ;ZERA UNIDADE

INCF DEZENA,F ;INCREMENTA DEZENA
MOVLW .10
SUBWF DEZENA,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF DEZENA

INCF CENTENA,F ;INCREMENTA CENTENA
MOVLW .10
SUBWF CENTENA,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF CENTENA ;ZERA CENTENA

INCF MILHAR,F ;INCREMENTA MILHAR
MOVLW .10
SUBWF MILHAR,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF MILHAR ;ZERA MILHAR

TERMOZINHO2:
GOTO VOLTAINCTER2
RECONTA:
MOVLW .18 ;0,019*1000=19
SUBWF GERAL2,W
BTFSS STATUS,Z
GOTO SATURNO
RETURN
SATURNO:
INCF GERAL2,F
GOTO RERECONTA
juarezbazzo
Bit
 
Mensagens: 25
Registrado em: 25 Nov 2006 21:58

Mensagempor MOR_AL » 04 Dez 2006 13:12

Olá juarezbazzo. Tudo bem?

Eu faço assim:

1 – Em vez de 5,0 V corresponderem a 255 unidades, 5 V correspondem a 250 unidades. Com isso, cada unidade vale 20 mV e tudo fica fácil.
2 – Exemplo. V(a ser convertido) = 3,64 V. O que corresponde a 3,64 x 250 / 5 = 182 unidades ao final da conversão (182 x 20 mV = 3,64 V).
3 – Este 182 encontra-se no registro Result. Agora vou fazer a conversão binário-BCD.
4 – Retiro quantas centenas puder de Result sem torná-lo negativo. Guardo o número de centenas retiradas no registro Cen, no caso Cen = 1.
5 – Retiro quantas dezenas puder de Result sem torná-lo negativo. Guardo o número de dezenas retiradas no registro Dez, no caso Dez = 8.
6 – Transfiro o que restou no registro Result para o registro Unid, no caso Unid = 2. Agora vou multiplicar por 2 e ajustar o resultado.

7 – Multiplico o valor dos registros Cen, Dez e Unid por 2 (RLF Cen, RLF Dez e RLF Unid ). Agora tenho Cen = 2, Dez = 16 e Unid = 4. Note que 16 dezenas valem 160 = 100 + 60. Agora vou fazer o ajuste para que cada algarismo seja menor que 10.

8 – Subtraio de 10 o registro Unid (W = Unid – 10). Se W for negativo não faço nada, o registro Unid já está com seu valor final (W = 4 – 10 = - 6). Se W for positivo, faço Unid = W e somo uma unidade ao registro Dez.

No caso permanece: Unid = 4 e Dez = 16

9 – Subtraio de 10 o registro Dez (W = Dez – 10). Se W for negativo não faço nada, o registro Dez já está com seu valor final (W = 16 – 10 = + 6). Se W for positivo, faço Dez = W e somo uma unidade ao registro Cen.

No caso fica: Dez = 6 e Cen = 3

10 – Obtenho Cen = 3, Dez = 6 e Unid = 4.

11 – Faço a conversão BCD para 7 segmentos e envio aos mostradores das centenas, dezenas e unidades. Lembrando que o ponto decimal vai ficar localizado entre o algarismo das centenas e das dezenas. 3,64 V

Parece trabalhoso, mas até que é simples. Verifique para confirmar. Talvez posso ter cometido algum engano.
Espero ter ajudado.

MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x