 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Profesor Einstein Član


Pridružen-a: Ned 24 Sep 2006 0:13 Prispevkov: 1437 Aktiv.: 6.30 Kraj: Rogaška Sl.
|
Objavljeno: Sre Jun 25, 2008 10:59 am Naslov sporočila: Izpis temperature na eno decimalko na LCD 2*16 |
|
|
Pozdrav
Mene pa zanima kako bi izpisal temperaturo na LCD 2*16 v bascom avr-ju da bi imel le eno decimalko. Termometer mi vrne integer vrednost naprimer 486, ki jo moram pomnožiti s konstanto 0.0625 da dobim pravo temperaturo potem pa ko dam to izpisat se mi vidijo vse decimalke rad bi pa imel izpis le na eno decimalko.
V kolikor to pokalkuliramo dobimo 30,375°C; izpisal bi le 30,3°C.
Hvala za pomoč.
Lp.
Darko _________________ --
"Če bi volitve kaj pomagale, bi jih prepovedali." (Mark Twain) |
|
Nazaj na vrh |
|
 |
madzi Član

Pridružen-a: Sre 24 Sep 2003 10:46 Prispevkov: 315 Aktiv.: 1.33 Kraj: Pragersko, Dragonja vas, Maribor
|
Objavljeno: Sre Jun 25, 2008 11:06 am Naslov sporočila: |
|
|
V katerem jeziku pišeš kodo? Objavi del kjer izpisuješ.
To ziher deluje
Koda: |
sprintf(lcd_buffer,"%-.1f",temperatura);
lcd_puts(lcd_buffer); |
|
|
Nazaj na vrh |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Sre Jun 25, 2008 11:16 am Naslov sporočila: |
|
|
Bascom-AVR uporablja Basic programski jezik, tako, da pomoje programira v Basicu.
Jaz sem to rešil z uporabo ukaza Mod, samo se ne spomnim zdaj, bom pogledal in napišem za tvoj primer. _________________ Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
|
|
Nazaj na vrh |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Sre Jun 25, 2008 11:34 am Naslov sporočila: |
|
|
Probaj nekaj takega (malo popravi, ker jaz pišem na pamet):
Koda: |
Dim Rezultat As Integer , Stopinje As Word , Desetinke As Word
'Termometer ti vrne 486 v spremenljivki Rezultat
Rezultat = Rezultat * 0.0625
'Rezultat ima zdaj vrednost 30.375
Stopinje = Rezultat 'Ker so Stopinje tipa Word, jim odseka decimalke
Desetinke = Rezultat Mod 10 'Ali pa 100, probavaj
Locate 1 , 1 'To je boljše od Cls, ker LCD ne utripne
Lcd "Temperatura je:"
Lowerline
Lcd Stopinje ; "," ; Desetinke ; "°C"
|
Vi profiji me malo popravite, če sem se kje zmotil. Tam pri tistem ukazu
Stopinje = Rezultat
malo probavaj, ker včasih moraš napisati
Stopinje = Rezultat / 10 ali pa Stopinje = Rezultat / 100 ali pa celo *. _________________ Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
|
|
Nazaj na vrh |
|
 |
joze Član


Pridružen-a: Pet 26 Jan 2007 10:27 Prispevkov: 204 Aktiv.: 0.91
|
Objavljeno: Sre Jun 25, 2008 11:41 am Naslov sporočila: |
|
|
LP!
Probaj takole:
Dim temperatura_izmerjena as Integer
Dim temperatura_string as String*3
temperatura_string = Fusing(temperatura_izmerjena , "#.#") |
|
Nazaj na vrh |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Sre Jun 25, 2008 11:49 am Naslov sporočila: |
|
|
joze je napisal/a: |
LP!
Probaj takole:
Dim temperatura_izmerjena as Integer
Dim temperatura_string as String*3
temperatura_string = Fusing(temperatura_izmerjena , "#.#") |
Zanimivo, za ta ukaz se nisem slišal...
In potem lahko enostavno napišeš: Lcd temperatura_string ?
In bo na LCD-ju rezultat?
Edit: Za pomoč, to je iz Bascom-AVR helpa:
Koda: |
Action
FUSING returns a formatted string of a single value.
Syntax
target = FUSING(source, "mask")
Remarks
target
The string that is assigned with the formatted string.
source
The source variable of the type SINGLE that will be converted
mask
The mask for formatting the string.
The mask is a string constant that always must start with #.
After the decimal point you can provide the number of digits you want the string to have:
#.### will give a result like 123.456. Rounding is used when you use the # sign. So 123.4567 will be converted into 123.457
When no rounding must be performed, you can use the & sign instead of the # sign. But only after the DP!
#.&&& will result in 123.456 when the single has the value 123.4567
When the single is zero, 0.0 will be returned, no matter how the mask is set up.
|
_________________ Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
Nazadnje urejal/a program_er Sre Jun 25, 2008 11:54 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
joze Član


Pridružen-a: Pet 26 Jan 2007 10:27 Prispevkov: 204 Aktiv.: 0.91
|
Objavljeno: Sre Jun 25, 2008 11:53 am Naslov sporočila: |
|
|
LP!
Ja pač napišeš Locate 1,1: lcd; Temperatura_string
Mislim da deluje tudi takole:
Locate 1,1: lcd; Fusing(Temperatura_izmerjena , "#.#")
da ni potrebno prej pretvarjati v String |
|
Nazaj na vrh |
|
 |
Profesor Einstein Član


Pridružen-a: Ned 24 Sep 2006 0:13 Prispevkov: 1437 Aktiv.: 6.30 Kraj: Rogaška Sl.
|
Objavljeno: Sre Jun 25, 2008 10:36 pm Naslov sporočila: |
|
|
Zdravo
Hvala za prispevke bom v kratkem preveril kako se obnese v praksi.
Danes sem bil odsoten pa se nisem javljal.
Lp.
Darko _________________ --
"Če bi volitve kaj pomagale, bi jih prepovedali." (Mark Twain) |
|
Nazaj na vrh |
|
 |
Profesor Einstein Član


Pridružen-a: Ned 24 Sep 2006 0:13 Prispevkov: 1437 Aktiv.: 6.30 Kraj: Rogaška Sl.
|
Objavljeno: Pet Jun 27, 2008 10:42 am Naslov sporočila: Izpis temperature odčitane z DS1631 na eno decimalko na LCD |
|
|
Zdravo
Sem porihtal zadevo; hvala vam za pomoč.
Cela koda s komunikacijo s temperaturnim senzorjem DS1631 če bo kdo potreboval je spodaj.
$regfile = "m8def.dat"
$crystal = 8000000
Declare Sub Disply
Declare Sub Temperatura
'# 'Configuracija LCD prikazovalnika 16*2. #
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.1
Config Lcd = 16 * 2 'Izklop kazalnika na LCD-ju. 'Configure lcd screen 16*2.
Cursor Off Noblink
Cls 'Počisti vsebino LCD prikazovalnika.
'Deklaracija SDA in SCL pinov za I2C komunikacijo z DS1631.
Config Sda = Portb.0
Config Scl = Portb.1
'Spremenljivke - all:
Dim A As Byte , Temp1 As Byte , Temp2 As Byte , Ti2c As Integer , S As Bit , T As Single , Tlcd As String * 3
A = 0
Temp1 = 0
Temp2 = 0
Ti2c = 0
S = 0
T = 0
Gosub Temperatura 'Prva meritev da se vrednost pomnilnika postavi na dejansko vrednost.
Wait 2
'%% >> glavni program <<
Do
Gosub Temperatura
Gosub Disply
Wait 1
Loop
'# Podprogram "Temperatura" #
Sub Temperatura
'################################
'Zagon termometra:
I2cstart
I2cwbyte &H90 'Naslov configuration registra.
I2cwbyte &H51 'Ukaz za start DS1631 senzorja.
I2cstop
'################################
'Branje temperature:
I2cstart
I2cwbyte &H90 'Naslov configuration registra.
I2cwbyte &HAA 'Temperaturni register z izmerjenimi vrednostmi.
I2cstart
I2cwbyte &H91 'naslov write
I2crbyte Temp1 , Ack 'MSB vrednost v registru
I2crbyte Temp2 , Nack 'LSB vrednost v registru
I2cstop
Ti2c = Makeint(temp2 , Temp1)
Shift Ti2c , Right , 4
T = Ti2c
T = T * 0.0625
Tlcd = Fusing(t , "#.#") 'Zaokrožitev na 3 mesta.
End Sub
'# Podprogram "Disply" #
Sub Disply:
Locate 1 , 2 'set cursor position
Lcd "temperatura " ; Chr(223) ; "C" 'display this at the top line
Locate 2 , 6 : Lcd ; Tlcd ; " " ; Chr(223) ; "C"
End Sub
Lp.
Darko _________________ --
"Če bi volitve kaj pomagale, bi jih prepovedali." (Mark Twain) |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|