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

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Aligues
Příspěvky: 143
Registrován: 19 lis 2009, 00:00

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

#1 Příspěvek 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...
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#2 Příspěvek od Atlan »

A co odpisal autor ? neurobi to ?
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#3 Příspěvek 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

Přílohy
Display3SCA.JPG
(55.41 KiB) Staženo 114 x
Naposledy upravil(a) procesor dne 22 led 2013, 22:31, celkem upraveno 1 x.
Uživatelský avatar
Panda38
Příspěvky: 725
Registrován: 21 lis 2012, 00:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#4 Příspěvek 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
Uživatelský avatar
Aligues
Příspěvky: 143
Registrován: 19 lis 2009, 00:00

#5 Příspěvek od Aligues »

Díky za rady, nakonec jsem to vyřešil nejjednodušeji, tedy tím tranzistorem :) a šlape to. Díky :)
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“