Fórum témák

» Több friss téma
Fórum » DS18B20 hőmérő-szenzor
 
Témaindító: Korben, idő: Nov 16, 2005
Témakörök:
Lapozás: OK   29 / 39
(#) Hp41C válasza Tetye hozzászólására (») Jan 15, 2016 /
 
Jól működik azt nem kétlem, de furcsálom a CRC szerinti előjelváltást.
A Makeint a leírás szerint egy 16 bites értéket csinál két byte -ból (256 * MSB + LSB). A leírás nem terjed ki arra, hogy előjeles-e a számábrázolás (nincs fordítóm), de tegyük fel, hogy előjeles. Így a negatív szám elő is áll, hiszen a DS1820 adatlapja szerint a számot kettes komplemens kódban szolgáltatja és a Makeint is ebben várja.
Azért működik jól, mert a CRC eddig még sohasem volt 0. Ha a fenti feltételezés igaz (azaz a Makeint(255,255) megfelel a -1 -nek), ezt a három sort ki kellene törölni...
(#) Tetye válasza Hp41C hozzászólására (») Jan 15, 2016 /
 
Azt nem vehetem ki, mert
  1. If Sc(9) = Crc8(sc(1) , 8) Then       ' itt nézi meg hogy a CRC rendben van e
  2.         Temp1 = Decigrades(sc(9) , Dsid1(1))         ' ha igen akkor a temp1 váltózóba forgatja a mért értéket
  3.      End If

és ha kiveszem akkor írhatom át az egészet hogy megkapjam.
Így az a jó hogy van egy függvény, meg szenzoronként 3 sor amivel meghívom a függvényt és meg vannak az értékek.
(#) Hp41C válasza Tetye hozzászólására (») Jan 15, 2016 /
 
Nem azt a márom sort kellene kivenni, hanem ezt:
  1. If Sc(9) = 0 Then
  2. Decigrades = 0 - Decigrades
  3. End If

Ezáltal felesleges lenne az első paraméter (CRC) átadása is.
A hozzászólás módosítva: Jan 15, 2016
(#) Tetye válasza Hp41C hozzászólására (») Jan 15, 2016 /
 
De hogy az Sc(9) elvileg sosem nulla, akkor csak az ifet kellene kivenni max, ami közte van az mehet fixen.
Nem? Nem tudok most próbálkozni én sem még mert otthon van a panel és még melóban vagyok, de délután megnézem.
(#) Hp41C válasza Tetye hozzászólására (») Jan 15, 2016 /
 
A CRC a hőmérséklettel együtt továbbított 8 byte adatból készül. Elvileg van olyan adatsorozat, amivel számolt CRC kiadja a 0-t. Így a legjobb, ha az említett 3 sort elsőre csak kikommentezed. Mind a hármat.
(#) gfj válasza Hp41C hozzászólására (») Jan 15, 2016 /
 
tesztelem ezt a kütyüt...és azt vettem észre, hogy néha teljesen véletlenszerűen valamelyik hőm. értéket negatív előjellel jeleníti meg....rendszertelen a dolog mind a megjelenés mind a pozíció tekintetében....és csak egy frissítés erejéig tart.....
(#) Tetye válasza Hp41C hozzászólására (») Jan 15, 2016 /
 
Kiszedtem, működik, de negatíval még nem tudom tesztelni csak holnap a hűtővel max.
De jó lenne ha lehetne bootloaderrel weben keresztül programozni...:S
(#) gfj válasza Tetye hozzászólására (») Jan 15, 2016 /
 
A tizedes mérés..akkor hogyan is néz ki? Had tanuljak valamit!
(#) pont válasza gfj hozzászólására (») Jan 15, 2016 /
 
Ahány program annyiféleképp lehet visszaszámolni a kapott két byte-ből. A lényeg hogy 3 féle eset lehet ha mindkettő 0 akkor 0 celsiusban is. Ha binárisan nézve az első négy helyi értéken 0 van akkor a maradék 12 helyi értékkel, meg lehet szorozni a 0.0625 fokcelsiust. Ha az első négy 1-es negatív előjelet kap a 1111 1111 1111 1111 -ből kivont kapott érték és ezt szorozzuk 0,0625 a kapott eredménynek lesz tizedes pont utáni része, ha megfelelő változók voltak használva. Azért van sokféle megoldás, mert a felső byte-t szorozva 256-al ehhez hozzáadva az alsó byte-ot decimálisan megkapjuk, amit szorozni kell 0,0625-el. De ha a felső byte-ot elosztjuk 16-al, az alsót megszorozzuk 16-al egyből celsiusban kapjuk. (1/16=0,0625)

DS18B20.pdf
    
(#) gfj válasza pont hozzászólására (») Jan 16, 2016 /
 
köszönöm estére megnézem...
(#) Tetye válasza gfj hozzászólására (») Jan 16, 2016 /
 
Amit küldtem mintát az tizedessel mér, csak mint mondtam a kijelzőre kerülő érték integerbe tölti vagyis egész számba, így levágja a tizedest.
A kérdés az volt hogy miért nem működik erre próbáltunk rájönni nem személyre szabott kódot adni... sültgalamb efektus..
Annyi a lényeg hogy ne integerbe kerüljön az érték a decigrades függvény végén.
pl:
  1. asd= Decigrades / 10
  2.   ert= Fusing(asd, "+00.0")

és az ert értékét írod ki lcd re ami már a fusing eljárás által eleve meg is van formázva.
és itt az asd as single az ert pedig string*5.
Ja és azt hiszem a
  1. Decigrades = Decigrades / 10
ki is kommentelheted ez esetben.
A hozzászólás módosítva: Jan 16, 2016
(#) Hp41C válasza Tetye hozzászólására (») Jan 16, 2016 /
 
Ha működik, akkor a következő két sor is kivehető:
Decigrades = Decigrades * 10
..
Decigrades = Decigrades / 10
Így az egész rész ennyire zsugorodik:
  1. Function Decigrades(byval Sc(9) As Byte, Byval Family As Byte)
  2.    If Family = &H28 Then                                    '18B20
  3.       Decigrades = Makeint(sc(1) , Sc(2)) / 16
  4.   End
A hozzászólás módosítva: Jan 16, 2016
(#) Tetye válasza Hp41C hozzászólására (») Jan 16, 2016 /
 
Na hoztam fel fagyott zöldborsót tesztelni és a negatív irány működik szerencsére.
Azt nem vehetem ki viszont mert utána van egy 16 al való osztás is és a matek miatt ott dől a dolog.
Így pontos,
  1. If Family = &H28 Then                                    '18B20
  2.      Decigrades = 0
  3.      Decigrades = Makeint(sc(1) , Sc(2))    'itt kapunk pl : 276
  4.       Decigrades = Decigrades * 10            'itt kapunk pl : 2760
  5.      Decigrades = Decigrades / 16             'itt kapunk pl : 166,875
  6.   Ho = Decigrades / 10                              'itt kapunk pl : 16,6875
  7.  Hok = Fusing(ho , "+00.0")                     'itt kapunk pl : +16,6
  8.   End If

de ha kiveszem:
  1. If Family = &H28 Then                                    '18B20
  2.      Decigrades = 0
  3.      Decigrades = Makeint(sc(1) , Sc(2))    'itt kapunk pl : 276
  4.       Decigrades = Decigrades / 16             'itt kapunk pl : 17    'Pedig itt már 17,25 lenne
  5.   Ho = Decigrades                                     'itt kapunk pl : 17
  6.  Hok = Fusing(ho , "+00.0")                     'itt kapunk pl : +17,0
  7.   End If

Mivel a decigrades nem single hanem integer és nem is tudom átpakolni így muszáj osztás előtt felszorozni hogy a tizedeseket ne vágja le.
(#) Hp41C válasza Tetye hozzászólására (») Jan 16, 2016 /
 
Idézet:
„Decigrades = Makeint(sc(1) , Sc(2)) / 16”

helyett írj
Decigrades = Makeint(sc(1) , Sc(2)) / 16.0
sort
(#) Tetye válasza Hp41C hozzászólására (») Jan 16, 2016 /
 
Nem jó, a Bascom 3 műveletet nem tud megcsinálni egy sorban.
(#) gfj válasza Tetye hozzászólására (») Jan 17, 2016 /
 
azt hiszem..a bascommal lesz valami probléma...mert nem igazán akarja fordítani a dolgokat..pedig hibát sem jelez. az égető pedig a khazama.
(#) Tetye válasza gfj hozzászólására (») Jan 17, 2016 /
 
Az mit jelent hogy nem akar fordítani de hibát sem jelez? Ha nem fordítja le akkor kiírja hogy mi baja van vele, ha nem írja ki akkor pedig lefordítja. Az nem tudom milyen égető, én Cseh Robi féle (Bővebben)STK500-at használok 10éve. De ha gondolod írd meg ahogy neked jó, tedd fel, és lefordítom neked.

Használj légy szíves nagybetűket a mondat elején.
(#) dB_Thunder válasza Tetye hozzászólására (») Jan 17, 2016 /
 
Ha meg az égetés nem megy elugrasz hozzám és feltöltöm neked!
(#) gfj válasza Tetye hozzászólására (») Jan 17, 2016 /
 
lefordítja..de nem akar elindulni..pedig a khazama beletölti...a programozó USBASP. Az extreme Burner pedig az írja, hogy nem jó hex file...ha vele próbálkozom. Az általad megadott hexeket viszont vígan betölti a khazama...és el is indulnak.
(#) Hp41C válasza gfj hozzászólására (») Jan 17, 2016 / 1
 
Láthatnánk az a bizonyos hex állományt? Nincs benne (a végén) egy-két nem ":" -tal kezdődő sor?
(#) gfj válasza Hp41C hozzászólására (») Jan 18, 2016 /
 
tessék...ezt én fordítottam..erre mondja az extreme burne , hogy invalid hex.
A hozzászólás módosítva: Jan 18, 2016
(#) Hp41C válasza gfj hozzászólására (») Jan 18, 2016 /
 
Sajnos a 4sensorspróba.hex csak egy vége rekordot tartalmaz.
(#) Tetye válasza gfj hozzászólására (») Jan 18, 2016 /
 
Hülye kérdés: ékezet nélkül próbáltad?
(#) gfj válasza Tetye hozzászólására (») Jan 18, 2016 /
 
próbáltam...lefordítja az általad küldött 4sensor.bas...betölti a khazama...de a program megáll ott, hogy nincs szenzor. A hexet amit szintén akkor küldtél...betölti simán és fut. Ezek azok.
(#) Hp41C válasza gfj hozzászólására (») Jan 18, 2016 /
 
Ugyan az a tartalma, mint amit Tetye töltött fel. Inkább mégis fuse bit beállítási hiba vagy a programozó hibája lehet.
A hozzászólás módosítva: Jan 18, 2016
(#) gfj válasza Hp41C hozzászólására (») Jan 18, 2016 /
 
A 4sensors.hex az a Tetye féle...it van az amit én fordítottam...:
A módosítás minimális lenne..csak annyi,hogy az első mérőhelyet a-val lesz jelölve.
A hozzászólás módosítva: Jan 18, 2016
(#) gfj válasza Hp41C hozzászólására (») Jan 18, 2016 /
 
$PROG &HFF,&HE1,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.
ezt olvastattam ki...
(#) Hp41C válasza gfj hozzászólására (») Jan 18, 2016 /
 
Már csak a fordító verziójában lehet eltérés.
(#) gfj válasza Hp41C hozzászólására (») Jan 18, 2016 /
 
Mire gondolsz? Az extreme fel sem ismeri ezeket a hexeket...a Khazama felismeri bár berzenkedik mert mindig azt mondja, hogy nem jó az órajel...de azért betölti
(#) Tetye válasza gfj hozzászólására (») Jan 18, 2016 /
 
Mivel égeted? Bootloader-es arduino? Vagy sima ic ISP-n keresztül? Szerintem törölj le mindent. Aztán töltsd le az atmel studiót a honlapjukról regisztrálni kell hozzá, aztán a legfrissebb bascom- demót, tedd fel ezeket és úgy próbáld meg.
Bascom-al lefordítod, avr studioval meg felégeted.
Következő: »»   29 / 39
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem