Stránka 1 z 1

Úprava programu (přidat desetinou tečku na 3 místném led dis

Napsal: 22 led 2013, 20:32
od Aligues
Dobrý den,
Potřeboval bych poradit s tímto projektem na odkazu:

Kód: Vybrat vše

http://www.andremiller.net/content/lm75-temperature-sensor-with-7-segment-display-output

Jde o teploměr s LM75 a 3x sedmi segmentovým led displejem, kde je desetinná tečka řízena hw ne sw. Tedy napevno připojena se zemí. Já chci ale použít 3 místný led displej se společnou anodou a potřebuju tam tu tečku přidat do programu, jinak by se mi zobrazovala všude. Poradil by někdo jak na to? Je tam *.jal soubor a v něm:


include f628_4i
include jlib
include lm75

var volatile byte CMCON at 0x1F = 0x07 -- disable port a analog functions


pin_a0_direction = output
pin_a1_direction = output
pin_a2_direction = output

-- LED ports

pin_b0_direction = output
pin_b1_direction = output
pin_b2_direction = output
pin_b3_direction = output
pin_b4_direction = output
pin_b5_direction = output
pin_b6_direction = output
pin_b7_direction = output

var byte disp_val = 0
var byte disp_dec = 0

procedure disp_write is begin

var byte dnum1 = disp_val / 10
var byte dnum2 = disp_val % 10

var byte number = seven_from_digit( dnum1 )
port_b = number ^ 0x0FF
pin_a0 = low
delay_1ms (1)
pin_a0 = high


number = seven_from_digit( dnum2 )
port_b = number ^ 0x0FF
pin_a1 = low
delay_1ms (1)
pin_a1 = high

number = seven_from_digit( disp_dec )
port_b = number ^ 0x0FF
pin_a2 = low
delay_1ms (1)
pin_a2 = high


end procedure

procedure write_display (byte in bignum) is begin

var byte dnum1 = bignum / 100
var byte dnum2 = (bignum % 100 ) / 10
var byte dnum3 = bignum % 10

var byte number = seven_from_digit( dnum1 )
port_b = number ^ 0x0FF
pin_a0 = low
delay_1ms (1)
pin_a0 = high


number = seven_from_digit( dnum2 )
port_b = number ^ 0x0FF
pin_a1 = low
delay_1ms (1)
pin_a1 = high

number = seven_from_digit( dnum3 )
port_b = number ^ 0x0FF
pin_a2 = low
delay_1ms (1)
pin_a2 = high


end procedure


var byte val_to_print = 123
var bit r_freezing
var byte r_degrees
var byte r_tenth

forever loop


for 255 loop
disp_write ()
end loop

-- disp_val = 12
-- disp_dec = 3

for 50 loop
disp_write ()
end loop
lm75_read_fdt (0, r_freezing, r_degrees, r_tenth)
disp_val = r_degrees
disp_dec = r_tenth
disp_write ()



end loop


Díky všem...

Napsal: 22 led 2013, 21:45
od Atlan
A co odpisal autor ? neurobi to ?

Napsal: 22 led 2013, 22:05
od procesor
Na to stačí hw. DP nažhaviť pri nabudení príslušnej číslice. Odpor z katód do báze pridaného tranzistora, ktorý spína cez prudový odpor DP.

sw takto

Kód: Vybrat vše

number = seven_from_digit( dnum3 )
port_b = number ^ 0x0FF
pin_b7 = low
pin_a2 = low
delay_1ms (1)
pin_b7 = high
pin_a2 = high


end procedure


Napsal: 22 led 2013, 22:20
od Panda38
Jestli je možnost změnit program (přeložit), tak to by jistě nebyl problém přepojit R14 na RB7 a jen upravit 3 řádky pro výstup:

port_b = (number ^ 0x0FF) | 0x80
...
port_b = (number ^ 0x0FF) & 0x7F
....
port_b = (number ^ 0x0FF) | 0x80

Napsal: 23 led 2013, 17:25
od Aligues
Díky za rady, nakonec jsem to vyřešil nejjednodušeji, tedy tím tranzistorem :) a šlape to. Díky :)