www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Izpis temperature na eno decimalko na LCD 2*16

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Profesor Einstein
Član
Član



Pridružen-a: Ned 24 Sep 2006 0:13
Prispevkov: 1437
Aktiv.: 6.30
Kraj: Rogaška Sl.

PrispevekObjavljeno: Sre Jun 25, 2008 10:59 am    Naslov sporočila:  Izpis temperature na eno decimalko na LCD 2*16 Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Sre Jun 25, 2008 11:06 am    Naslov sporočila:   Odgovori s citatom

V katerem jeziku pišeš kodo? Objavi del kjer izpisuješ.

To ziher deluje Very Happy
Koda:
sprintf(lcd_buffer,"%-.1f",temperatura);
lcd_puts(lcd_buffer);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
program_er
Član
Član



Pridružen-a: Sob 08 Mar 2008 13:47
Prispevkov: 2173
Aktiv.: 10.33
Kraj: Maribor (Pohorje)

PrispevekObjavljeno: Sre Jun 25, 2008 11:16 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
program_er
Član
Član



Pridružen-a: Sob 08 Mar 2008 13:47
Prispevkov: 2173
Aktiv.: 10.33
Kraj: Maribor (Pohorje)

PrispevekObjavljeno: Sre Jun 25, 2008 11:34 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
joze
Član
Član



Pridružen-a: Pet 26 Jan 2007 10:27
Prispevkov: 204
Aktiv.: 0.91

PrispevekObjavljeno: Sre Jun 25, 2008 11:41 am    Naslov sporočila:   Odgovori s citatom

LP!

Probaj takole:

Dim temperatura_izmerjena as Integer
Dim temperatura_string as String*3

temperatura_string = Fusing(temperatura_izmerjena , "#.#")
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
program_er
Član
Član



Pridružen-a: Sob 08 Mar 2008 13:47
Prispevkov: 2173
Aktiv.: 10.33
Kraj: Maribor (Pohorje)

PrispevekObjavljeno: Sre Jun 25, 2008 11:49 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
joze
Član
Član



Pridružen-a: Pet 26 Jan 2007 10:27
Prispevkov: 204
Aktiv.: 0.91

PrispevekObjavljeno: Sre Jun 25, 2008 11:53 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Profesor Einstein
Član
Član



Pridružen-a: Ned 24 Sep 2006 0:13
Prispevkov: 1437
Aktiv.: 6.30
Kraj: Rogaška Sl.

PrispevekObjavljeno: Sre Jun 25, 2008 10:36 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Profesor Einstein
Član
Član



Pridružen-a: Ned 24 Sep 2006 0:13
Prispevkov: 1437
Aktiv.: 6.30
Kraj: Rogaška Sl.

PrispevekObjavljeno: Pet Jun 27, 2008 10:42 am    Naslov sporočila:  Izpis temperature odčitane z DS1631 na eno decimalko na LCD Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group