Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

Bascom in polja

 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Pon Jun 27, 2011 4:59 pm    Naslov sporočila: Bascom in polja Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Pon Jun 27, 2011 6:20 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Pon Jun 27, 2011 6:47 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Tor Jun 28, 2011 6:37 am    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jun 28, 2011 11:38 am    Naslov sporočila: Re: Bascom in polja Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jun 28, 2011 11:49 am    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Tor Jun 28, 2011 12:11 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jun 28, 2011 12:29 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Tor Jun 28, 2011 1:03 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Tor Jun 28, 2011 1:09 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Tor Jun 28, 2011 1:29 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jun 28, 2011 4:46 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Sre Jun 29, 2011 4:19 pm    Naslov sporočila: Odgovori s citatom

Vsi štirje senzorji so na eni točki in en vedno malce bolj laže.

Seveda je vse skupaj več kot odlično Smile

_________________
www.MaLiX.si
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Jure
Urednik


Pridružen/-a: Pon Jan 2004 12:51
Prispevkov: 2132
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jun 29, 2011 6:00 pm    Naslov sporočila: Odgovori s citatom

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 Smile


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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Čet Jun 30, 2011 6:39 am    Naslov sporočila: Odgovori s citatom

Ž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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski č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
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group