Stringből szám.

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
glbtech
DrótVégénSzéndarab
Hozzászólások: 29
Csatlakozott: 2007. február 13. kedd, 7:00

Stringből szám.

Hozzászólás Szerző: glbtech »

Halihó !
Eléggé kezdő vagyok, és megakadtam egy problémánál. Adott egy program ami soros porton fogadja az adatokat egy GPS vevőtől, és némi szűrés után LCD-re írja. Ezzel eddig semmi probléma nincs, nagyon szépen működik, de a GPS a sebesség adatot csomó/órában küldi. Tudom hogy létezik olyan gps szentencia ami tartalmazza km/h-ban is, de az adott modul nem küld ilyet. A GPS által küldött adatot stringben tárolom, kényelmes megoldás. Ebből kellene a sebességadatot kiszedni, és megszorozni 1.852-vel. Ugye a string-szám átalakításra van a VAL parancs. De ha a VAL-t úgy használom, hogy single típusú a cél ( hogy meglegyenek a tizedesjegyek is ), akkor valami elképesztően sok flash-t használna fel, egyszerűen nem fér bele a 2313-ba. Eddig a programmal 70%-on van, de ha csak beillesztem azt az egy val parancsot akkor rögtön kb. 126% lesz. Hogyan lehetne megkerülni, hogyan lehetne máshogy csinálni ? Bonyolítja a dolgot, hogy abban a 5 karakteres stringben amiben a sebesség van, az értéktől függően a tizedespont 3 helyen is lehet. ( Tehát pl. 0.000, 10.20, vagy 100.1 ) Van valakinek ötlete ? Nem szeretnék emiatt nagyobb kontrollert, már csak azért sem mert ez elsősorban csak egy teszt. Kinek van ötlete ami belefér a 30%-ba ? :-)
Avatar
pkedvessy
Tranzisztorgyógyász
Hozzászólások: 198
Csatlakozott: 2006. január 1. vasárnap, 7:00

Hozzászólás Szerző: pkedvessy »

Nem tudom, hogy kevesebb memóriát eszik-e meg, de próbáld meg a következőt:
Kerekítsd a számot! Ezt eltárolod LONG-ként, megszorzod 1852-vel, visszaalakítod string-e, és úgy formázod, hogy visszafele a 3. karakter elé rakod a tizedes pontot! Szerintem valami ilyesmiben kellene gondolkodnod! Még azzal is spórolhatsz (persze a pontosság rovására), hogy csak 1,85-nek veszed a szorzót! Így még 1km/órán belül lesz az eltérés! Ekkor elfér WORD-ben is a változó, amivel további memóriát spórolsz meg!
Tegyük fel, hogy a kapott sebesség 60.5 mp/h amit kerekítesz a számoláshoz 61-re! A szorzót meg csak 1,85-nek veszed! Ekkor a kiszámolt sebesség 112,85 km/h a tényleges pedig 112,046 km/h! Szerintem ennyi tévedést megér, hogy beleférjen a csip-be! Vagy nem?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

Dim A As String * 8
Dim B As Long
Dim Bcount As Byte
Dim Szam(2) As String * 5
Dim Nagyertek As Long
Dim Kisertek As Long
Dim Temp1long As Long

'A = "1.345"

Bcount = Split(a , Szam(1) , ".")                           'ponttal szetszabom
'szam(1)-egesz
'szam(2)-tizedes
Nagyertek = Val(szam(1))                                    'egeszresz
'Select Case Len(szam(2))
'   Case 1
Bcount = Len(szam(2))                                       'tizedesertekek szamjegye
'mert: 1 tizedes, akkor a tizedesresz:0,10000
'mert: 2 tizedes, akkor a tizedesresz:0,12000
'mert: 3 tizedes, akkot a tizedesresz:0,12300

Bcount = 5 - Bcount                                  'hany nulla kell utana
Szam(2) = Szam(1) + String(bcount , 48)   'nullak utanairasa
Kisertek = Val(szam(2))                            'Ez a tizedek, nullaval kiegeszitve a vegen
Nagyertek = Nagyertek * 10000
Nagyertek = Nagyertek + Kisertek
Nagyertek = Nagyertek * 1385

'kiirnagy=nagyertek/10000 ->egeszek
'temp=nagyerek*1000
'kiirkicsi=nagyertek-temp->tizedek
'lcd kiir;".";kiirtemp

Valahogy így lehetne bűvölni. De ez is eléggé necces....
Avatar
glbtech
DrótVégénSzéndarab
Hozzászólások: 29
Csatlakozott: 2007. február 13. kedd, 7:00

Hozzászólás Szerző: glbtech »

Köszönöm az ötleteket !
Az adatokat a lehető legpontosabban akarom kezelni, nem nagyon akarok sokat kerekíteni, fontos a pontosság. De alapvetően az egész programot csak gyakorlásképpen írtam, hogy a soros port, lcd és a stringek kezelésével bíbelődjek, így nem probléma ha nem tudom szépen megoldani. :-) Ha végül mégis építek belőle készüléket akkor max. áttérek valami megára.
Sajnos Róbert megoldása nem fér el, ennyi változó már nem fér el az sram-ban, az szinte csurig van.
Mindenesetre köszi az ötleteket, még agyalok én is.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Rossz hírem van ekkor:
Add meg mérföldben:)

Ha meg termék leszm, akkor úgyis M48/88/168/8 chippel érdemes játszani. Az M8/88/168 esetén firmware frissítést is kiadhatsz, és soroson át feltölthető:)).
Válasz küldése