|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Pon Jun 27, 2011 4:59 pm Naslov sporočila: Bascom in polja |
|
|
Zanima me dvoje:
1.)
Kako kopiram spremenljivko s3 elementi v drugo spremenljivko
Dim A(3) as byte
Dim C(3) as byte
Kako kopiram A v C brez for stavka in vsake vrednosti posebej?
2.)
Rad bi imel 2D polje
Dve spremenljivki polja bi rad spravil v eno spremenljivko
Nekako tako
spremenljivka(A)(B)
A bi označevala DATA1,2,3
B pa vrednost na mestu 0-8
Ali je to sploh možno?
Delam izboljšave programa za merjenje s 4X DS1820 in bi se red izognil uporabi EEproma kamor zapišem podatke o addresi DS180.
Data1:
data 2,3,2,3,4,5,4,5
Data2:
data 22,43,52,63,64,75,74,65
Data3:
data 12,23,32,43,54,65,74,85 _________________ www.MaLiX.si |
|
Nazaj na vrh |
|
|
Silvo Profesionalec
Pridružen/-a: Tor Jan 2004 19:06 Prispevkov: 234
|
Objavljeno: Pon Jun 27, 2011 6:20 pm Naslov sporočila: |
|
|
Citiram: | ...Delam izboljšave programa za merjenje s 4X DS1820 in bi se red izognil uporabi EEproma kamor zapišem podatke o addresi DS180.... |
Za bascom ti ne znam pomagat. .. Kam pa potem namreravaš zapisati ID če ne v eeprom? V sram? V SRAM-u podatki ostanejo samo dokler je vezje pod napetostjo. Za 4 sezorje je po moji presoji bolje uporabit 4 pine ter vsak senzor dati na svojega. S tem boš precej skrajšal program. Izogneš se inicilaiciji oz. prepoznavanju senzorjev. Ni problem pri menjavi seznorjev. Ni problem, če gre en senzor v kratek sitk - ostali še vedno delajo. ... |
|
Nazaj na vrh |
|
|
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Pon Jun 27, 2011 6:47 pm Naslov sporočila: |
|
|
Podatke o addresi bi zapisal v program.
Če Bascom podpira tvojo idejo, da je vsak DS na svoji liniji - odlična ideja
Config 1wire = Portd.3
gosub meri_temp
Config 1wire = Portd.4
gosub meri_temp
Config 1wire = Portd.5
gosub meri_temp
Config 1wire = Portd.6
gosub meri_temp
Bom jutri preizkusil _________________ www.MaLiX.si |
|
Nazaj na vrh |
|
|
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Tor Jun 28, 2011 6:37 am Naslov sporočila: |
|
|
Gre predvsem za to da rabim temp merit vsako sekundo ali še manj (zelo hitre spremembe temp.)
Tukaj me skrbi eeprom, sicer ne vem ali je omejen samo s cikli zapisovanja ali tudi branja podatkov? _________________ www.MaLiX.si |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Tor Jun 28, 2011 11:38 am Naslov sporočila: Re: Bascom in polja |
|
|
malix je napisal/a: |
1.)
Kako kopiram spremenljivko s3 elementi v drugo spremenljivko
Dim A(3) as byte
Dim C(3) as byte
Kako kopiram A v C brez for stavka in vsake vrednosti posebej? |
Kolikor vem, gre samo v zanki:
Koda: | for i = 1 to 3 : c(i) = a(i) : next |
malix je napisal/a: |
2.)
Rad bi imel 2D polje
Dve spremenljivki polja bi rad spravil v eno spremenljivko
Nekako tako
spremenljivka(A)(B)
|
Bascom je v bistvu Basic, dober basic a še vedno basic in ima podobne omejitve. Polja so lahko samo enodimenzionalna
malix je napisal/a: |
Delam izboljšave programa za merjenje s 4X DS1820 in bi se red izognil uporabi EEproma kamor zapišem podatke o addresi DS180.
Data1:
data 2,3,2,3,4,5,4,5
Data2:
data 22,43,52,63,64,75,74,65
Data3:
data 12,23,32,43,54,65,74,85 |
Razlikuj flash memory kamor pride program vključno z Data stavki od EEproma ali ERAM-a kot ga imenuje Bascom.
Običajno se da identifikacije termometrov v ERAM, Eram lahko bereš neskončno krat.
Definiram prostor za 9 identifikacij termometrov v ERAM-u:
Koda: | ' Serijske številke termometrov v
Const Nterms = 9 ' 9 termometrov
Const Xx = Nterms * 8 ' prostor za 9 termometrov
Dim Dummy As Eram Byte ' vsak termid je dolg 8
Dim Termids(xx) As Eram Byte |
v uvodni veji pripravimo termometre za branje
Koda: | ' Skip ROM & Convert
1wreset
1wwrite &HCC 'skip ROM
1wwrite &H44 'convert temperature
1wreset
wait 1
|
V zanki beremo vse temperature:
Koda: | do
For I = 1 To Nterms
Gosub Fromtermid
' Match ROM & read temperature
Disable Interrupts
1wreset 'reset
1wwrite &H55 'match ROM
1wwrite Scratchpad(1) , 8
1wwrite &HBE 'READ Scratchpad
Scratchpad(1) = 1wread(9)
1wreset
Enable Interrupts
If Crc8(scratchpad(1) , 9 ) <> 0 Then
Set Trmtrierr
If Trmtrierrcnt < 255 Then Incr Trmtrierrcnt
End If
' Ds18x20:
' vhodni podatki so v Termometer(9) tipa bajt,
' izhod v Temperatura tipa Integer v desetinkah stopinje C
W = Makeint(scratchpad(1) , Scratchpad(2))
If Scratchpad(5) = &H7F Then
' za termometer DS18B20
W = W * 10
W = W / 16
Else
' za ostala dva tipa termometrov
W = W * 5
End If
' end of ds18x20
' temperaturo zaokrožim na cele stopinje
W = W + 5
W = W / 10
Tarr(i) = W
Next
'in tako zahtevam, da se termometri pripravijo za sledeče odčitavanje
Disable Interrupts
1wreset
1wwrite &HCC 'skip ROM
1wwrite &H44 'convert temperature
1wreset
Enable Interrupts
ostalo telo, evaluiranje temperatur ( v Tarr(i)), upravljanje
loop
|
Ja manjka še koda podprograma Fromtermid, ki prenese id i-tega termometra v poslje scratchpad, od koder piše 1 wwrite ukaz:
Koda: | Fromtermid:
Push R14
Reg14 = I : Push R14
Reg14 = J : Push R14
Reg14 = K : Push R14
' move from termid to Scratchpad
' Prenese termid v Scrathcpad iz i-tega mesta, i = parameter
K = I - 1
K = K * 8
K = K + 1
For J = 1 To 8
Scratchpad(j) = Termids(k)
Incr K
Next
Pop r14 : K = Reg14
pop R14 : J = Reg14
Pop r14 : I = Reg14
Pop r14
Return |
Podprogram najprej spravi vsebino spremenljivk I, J, K na stack, ker namerava iste spremenljivke uporabiti sam. No, na koncu podprograma, ko jih ne rabi več, vrne staro vrednost spremenljivk iz stacka nazaj v spremenljivke, tako da glavni program niti ne ve, da si jih je nekdo sposodil. |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Tor Jun 28, 2011 11:49 am Naslov sporočila: |
|
|
malix je napisal/a: | Podatke o addresi bi zapisal v program.
Če Bascom podpira tvojo idejo, da je vsak DS na svoji liniji - odlična ideja
Config 1wire = Portd.3
gosub meri_temp
Config 1wire = Portd.4
gosub meri_temp
Config 1wire = Portd.5
gosub meri_temp
Config 1wire = Portd.6
gosub meri_temp
Bom jutri preizkusil |
Hja, bascom res podpira, da daš vsak termometer na svoj pin, a ne tako, kot si napisal. Vsak 1wire ukaz lahko prebavi dva dodatna parametra in to kot v helpu piše , port, pin. |
|
Nazaj na vrh |
|
|
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Tor Jun 28, 2011 12:11 pm Naslov sporočila: |
|
|
Pozdravljen,
Zgornji del programa mi ne ustreza, ker prekinitve uporabljam tudi za timer in serijske prekinitve. Ne moram si privoščiti da bi onemogočiti/omogočiti prekinitve.
Nekako bolj mi je zanimiv program, kjer imam vsak DS1820 na svojem pinu.
Program sem naredil tako, da nastavim pin in izvedem meritev za en DS. Ko je meritev končana prestavim pin in izvedem ponovno meritev.
Vendar mi bascom upošteva samo eno nastavitev pina.
Priločenega hepla pa žal ne razumem kaj moram narediti!!! _________________ www.MaLiX.si |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Tor Jun 28, 2011 12:29 pm Naslov sporočila: |
|
|
1wire protokol je časovno definiran. Prekinitve ga lahko zmotijo. Najbrž ne bi bila nobena nesreča, če samo za čas komunikacije z 1wire elementi zaustaviš prekinitve. Lahko pa seveda poizkusiš brez onemogočanja prekinitev, morda bo šlo, če so prekinitvne rutine dovolj kratke in redke.
Kar se tiče vsakega termometra na svojem pinu, pomeni to, da moraš k vsakem 1wire ukazu dodati informacijo, na katerem pinu naj ga izvede.
Si si ogledal sample na koncu helpa? številka pina je lahko celo variabla. |
|
Nazaj na vrh |
|
|
Silvo Profesionalec
Pridružen/-a: Tor Jan 2004 19:06 Prispevkov: 234
|
Objavljeno: Tor Jun 28, 2011 1:03 pm Naslov sporočila: |
|
|
Prekinitve so seveda rak rana 1Wire protokola. V trenutku reseta vodila oz. branja ali pisanja na vodilo se ne sme dokajati ničesar, kar bi požiralo procesorski čas. Sicer bo prišlo do nepredvidenih situacij. (napačnega poslanega ali prebranega podatka) Prekinitve pa lahko izvajaš med posameznimi kadri. Recimo po tem, ko si izvedel reset, po tem ko si poslal ali prebral 8 bitni podatek. Ravno sedaj delam en velik prikazovalnik ki ga procesor multipleksira na ca 1mS vmes pa seveda berem dva senzorja. Prekinitev časovnika multipleksira displej. Če bi izvedel kompletno branje skupaj bi to povzročilo utripanje dipsleja če bi prekinitev izklopil , kajti samo branje poteka zelo dolgoooo... (reset skraj 1mS- v proceduru ga moraš izvesti vsaj 3x. Trajanje slota (1bita) minimalno 60us) to na koncu znese skupaj par 100mS, kar je seveda predolg čas za multipleksiranje. Zato sem proceduro razkosal ter vmes izvajam multipleksiranje. |
|
Nazaj na vrh |
|
|
Silvo Profesionalec
Pridružen/-a: Tor Jan 2004 19:06 Prispevkov: 234
|
Objavljeno: Tor Jun 28, 2011 1:09 pm Naslov sporočila: |
|
|
vilko je napisal/a: | ..., morda bo šlo, če so prekinitvne rutine dovolj kratke in redke.
|
Težka bo. Procesor bo potrebno pognati na maximum, da bo sploh kaj ukaznikh ciklov za prekinitveno rutino. Recimo write 1 low time je lahko od 1-15uS (mikrosekund) . Enako za branje. Če se bo prekinitev zgodila ravno tukaj vmes je "štala" tukaj. |
|
Nazaj na vrh |
|
|
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Tor Jun 28, 2011 1:29 pm Naslov sporočila: |
|
|
DELLLAAAA!!!!
Meritev na vseh štehih DS1820 deluje BP, ob enem pa delujejo tudi vse prekinitve.
Spreminjam naslov 1wreset Pind , T_pin
Tale varianta z vsakim DS1820 na svoji liniji je idealna rešitev (seveda če imaš dovolj linij), ker se ne rabim mučiti z naslovi in če kateri crkne ne rabiš popravljati programa.
P.S. je pa zanimivo, da so trenutno vsi štirje DS1820 na enaki točki in kažejo različno temp (+- 0,5 C) _________________ www.MaLiX.si |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Tor Jun 28, 2011 4:46 pm Naslov sporočila: |
|
|
malix je napisal/a: | DELLLAAAA!!!!
P.S. je pa zanimivo, da so trenutno vsi štirje DS1820 na enaki točki in kažejo različno temp (+- 0,5 C) |
To da dela, je dobro. Samo da ne bereš štirikrat eden in isti termometer. Že iz fizike je zelo redko, da dva termometra kažeta enako. morata biti nekako v toplotnem kratkem stiku, da ju obseva ista temperatura. Že blagodejen vetrc lahko naredi, da nista dva termometra na isti temperaturi. |
|
Nazaj na vrh |
|
|
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Sre Jun 29, 2011 4:19 pm Naslov sporočila: |
|
|
Vsi štirje senzorji so na eni točki in en vedno malce bolj laže.
Seveda je vse skupaj več kot odlično _________________ www.MaLiX.si |
|
Nazaj na vrh |
|
|
Jure Urednik
Pridružen/-a: Pon Jan 2004 12:51 Prispevkov: 2132 Kraj: Ljubljana
|
Objavljeno: Sre Jun 29, 2011 6:00 pm Naslov sporočila: |
|
|
malix je napisal/a: | Vsi štirje senzorji so na eni točki in en vedno malce bolj laže.
Seveda je vse skupaj več kot odlično |
To je lepo prebrati!
Čemu pa služi ta tvoj projekt? Tudi VB ali Labview aplikacijo vidim, da si naredil.
Lp
Jure |
|
Nazaj na vrh |
|
|
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Čet Jun 30, 2011 6:39 am Naslov sporočila: |
|
|
Že od nekdaj uporabljam LabView za vizualizacijo napisanega programa.
Delam merjenje temp v eksperimentalni peči za vaje + regulacija parametrov. _________________ www.MaLiX.si |
|
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 You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|