[ Príspevkov: 27 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
NapísalOffline : 08.05.2013 14:23 | .high8 a .low8

mam IQRF sadu pomocou ktorjej dostavam vystup zo snimaca vo formate 12:50:59 RxD: "#2# #98# #118#"

cisla 98 a 119 by mali byt hum.high8 a hum.low8, ako z nich dostanem jedno cislo, napriklad dekadicke? (teda celu premennu hum)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 14:31 | .high8 a .low8

Ak som dobre pochopil, high8 je horných 8 bitov a low8 je dolných 8 bitov 16 bitového slova?
Ak je to tak, vo väčšine jazykov to spravíš nejako takto:
Kód:
int16_t result; // 16 bitove cislo, v podstate to ale moze byt aj normalny 32bit int
result = high8 << 8; // posuniem o 8 bitov dolava
result = result | (0xff & low8); // vymaskujem 8 bitov (pre istotu) a binarne scitam s result


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 14:39 | .high8 a .low8

a ak mam premennu hum.high8 napriklad = 01101010 a prve dva bity chcem odstranit, znamena to hum.high & 00111111 ?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 14:42 | .high8 a .low8

Ak odstrániť znamená vynulovať, tak áno


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 14:44 | .high8 a .low8

no mam zo snimaca vystup ktory ma 8 bitov a vyznam pre mna prve dva nemaju, su to nejake status bity len, ci co, tak ich chcem dat prec


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 14:45 | .high8 a .low8

Tak ich vynuluješ, to už je na tebe, čo s tým chceš


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 14:49 | .high8 a .low8

a este, ak mozes tak mi porad s tymto, mal by som vysledok teda celu premennu hum a moze to byt cislo max 100, tak ako z toho ziskat
stovky, desiatky, jednotky a desatiny ?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 14:52 | .high8 a .low8

Tak ale toto už je matika hodná základnej školy, keď sme si s pani učiteľkou rozkladali číslo 123 na 1*100 + 2*10 + 3*1.
Obyčajné delenie a modulo.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 15:19 | .high8 a .low8

no praveze som skusal nieco ako

desiatky = hum / 10;
desatiny = hum % 10;

a neviem ci teda to delenie je bezozvysku alebo nie, lebo neviem ci sa mi to zmesti do buffera


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 15:27 | .high8 a .low8

ehm... desatiny? Snáď jednotky, však?
A je to správne, nerozumiem teraz, o čo ti ide.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 15:40 | .high8 a .low8

jj, pomylil som sa.... no a ide mi o to, ze mi to nefunguje, tak ked je uz toto vsetko dobre, tak nechapem preco :D vysledky su celociselne, ziadne desatinne miesta, ci?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 15:42 | .high8 a .low8

Stále neviem, v akom jazyku to je, ale predpokladám C a že sú tie premenné celočíselné. Vtedy by to malo fungovať.
Tak skús popísať viac a daj aj kus svojho kódu, čo ti nejde.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 15:54 | .high8 a .low8

takze, mam vlhkostny snimac Honeywell HIH6130 a funkciu pre PIC ktora vyzera nasledovne:

Kód:
void read_MCP9802()
{
    i2c_start();
    i2c_write(I2C_ADR<< 1);      //HIH6130 address
    i2c_write(0);
    i2c_stop();
    i2c_start();
    i2c_write(I2C_ADR<< 1 | 1);      //HIH6130 address  + read
    hum.high8 = i2c_read(ACK) & 0x3F;      // Store the result
    hum.low8 = i2c_read(NO_ACK);
    i2c_stop();
}


vystupny format udajov by mal byt:
START
A6 A5 A4 A3 A2 A1 A0
1
ACK
S1 S0 B13 B12 B11 B10 B9 (data a s1 a s0 si myslim ze sa maju vymaskovat)
ACK
B8 B7 B6 B5 B4 B3 B2 B1
ACK
NACK
STOP

na osciloskope to bolo myslim ze ok, takze problem je uz snad len v programe, no a dalej by sa vysledne udaje mali spracovat do podoby v percentach podla vzorca RH% = (humidity/2na14 - 2) * 100 a kod na to vyzera u mna nejako takto:

Kód:
bufferRF[0] = ' ';
        bufferRF[1] = hum / 10;
        bufferRF[1] += '0';
        bufferRF[2] = ' ';
        bufferRF[3] = hum % 10;
        bufferRF[4] = ' ';
        DLEN = 5;
        PIN = 0;


Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 15:56 | .high8 a .low8

takze, mam vlhkostny snimac Honeywell HIH6130 a funkciu pre PIC ktora vyzera nasledovne:

Kód:
void read_MCP9802()
{
    i2c_start();
    i2c_write(I2C_ADR<< 1);      //HIH6130 address
    i2c_write(0);
    i2c_stop();
    i2c_start();
    i2c_write(I2C_ADR<< 1 | 1);      //HIH6130 address  + read
    hum.high8 = i2c_read(ACK) & 0x3F;      // Store the result
    hum.low8 = i2c_read(NO_ACK);
    i2c_stop();
}


vystupny format udajov by mal byt:
START
A6 A5 A4 A3 A2 A1 A0
1
ACK
S1 S0 B13 B12 B11 B10 B9 (data a s1 a s0 si myslim ze sa maju vymaskovat)
ACK
B8 B7 B6 B5 B4 B3 B2 B1
ACK
NACK
STOP

na osciloskope to bolo myslim ze ok, takze problem je uz snad len v programe, no a dalej by sa vysledne udaje mali spracovat do podoby v percentach podla vzorca RH% = (humidity/2na14 - 2) * 100 a kod na to vyzera u mna nejako takto:

Kód:
        clrwdt();
        read_MCP9802();
       
        bufferRF[0] = ' ';
        bufferRF[1] = hum / 10;
        bufferRF[1] += '0';
        bufferRF[2] = ' ';
        bufferRF[3] = hum % 10;
        bufferRF[4] = ' ';
        DLEN = 5;
        PIN = 0;


viem ze vysledok este neni spravny v tych bufferoch ale myslim, ze vysledok by mal byt _desiatky0_jednotky_


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 15:59 | .high8 a .low8

A ten bufferRF je čo? Ten výstupný formát má byť presne aký a v čom? Majú tam byť naozaj ASCII hodnoty? A má to byť vôbec reťazez(pole znakov)? Nemal by byť zakončený nulovým bajtom? atď.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 16:03 | .high8 a .low8

noo v tom ci tam maju byt ASCII hodnoty alebo nie sa nevyznam, ale je mozne, ze ano, ale ked je to toto:

Kód:
bufferRF[0] = ' ';
        bufferRF[1] = hum / 10;
        bufferRF[1] += '0';
        bufferRF[2] = ' ';
        bufferRF[3] = hum % 10;
        bufferRF[4] = ' ';
        DLEN = 5;
        PIN = 0;


tak myslim, ze aj to som skusal:)
bufferRF[] je buffer pre radiovy prenos

a vystupny format by mal byt z tej premennej hum v %, nieco ako 57,5%, alebo 57.5%


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 16:07 | .high8 a .low8

Neviem vôbec, s čím robíš a veľmi sa mi to nechce hľadať :)
Naštuduj poriadne dokumentáciu, ako to presne komunikuje. Musíš tomu posielať presne to, čo to chce.
Keď tak daj ten kus dokumentácie sem.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 16:14 | .high8 a .low8

dokumentaciu som pozrel aj za doktorom v skole som bol, aj som to urobil ako mi poradil, aspon myslim a nic :) ale poslem ti kod co mi spracuva vystup z teplotneho snimaca, neviem ci ti to pomoze, aby si mi s tym pomohol :D a robim s takym bezdrotovim kitom, neviem ci sem mozem napisat nazov su to take moduly na tvorbu siete ku ktorym pripajam snimace cez I2C zbernicu

Kód:
bufferRF[3] = '.';

                                       // See sensor datasheet for temperature coding
        if (temperature.high8 & 0x80)   // Is it negative?
        {                               //   Yes
            temperature  = ~temperature;
            temperature++;
            bufferRF[0] = '-';
        }
        else
            bufferRF[0] = ' ';          //   No

        temperature >>= 4;
        tenths = temperature.low8 & 0x0F;   // Save bits 0 - 3 (tenths)
        temperature >>= 4;

        t = temperature.low8 / 10;
        bufferRF[1] = t + '0';          // Tens

        t = temperature.low8 % 10;
        bufferRF[2] = t + '0';          // Units

        tmp = tenths * 625;
        t = tmp / 1000;
        tmp %= 1000;

        if ((tmp >= 500) && (t < 9))    // Rounding
            t++;

        bufferRF[4] = t +'0';           // Tenths
   
        DLEN = 5;
        PIN = 0;   


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 16:18 | .high8 a .low8

Keď si ten bufferRF vypíšeš, je tam to, čo tam chceš mať?
Lebo tie "Tenths" sa mi veľmi nepozdávajú, prečo to maskuješ 0x0F? Ale ako neviem, čo tam dostávaš a čo chceš.
Dôležité je, čo máš nakonci v tom bufferRF. Ak je to tam správne, tak to správne príjmaš, no zle odosielaš.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 16:21 | .high8 a .low8

no hodnoty su myslim ze spravne, ked som si dal vypisat len to high8 a low8 co tam davam, tak by to mohlo byt to co chcem


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 16:22 | .high8 a .low8

A kam to chceš posielať? Či z toho chceš len spraviť reťazec a vypísať to? (to je ten bufferRF?)


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 16:30 | .high8 a .low8

treba mi naplnit ten bufferRF[] a potom ho odoslat radiom, to odoslanie mi ide, len mi neprichadzaju spravne hodnoty, tak predpokladam ze donho nedavam spravny format udajov, mam vlastne modul ktory je uzlom v sieti a cez ten buffer to odosiela do uzla ktory je cez USB spojeny s PC, na tych uzloch je 16F886, co by mal byt PIC :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 16:33 | .high8 a .low8

Uf, tak tam je toho veľa. Na to asi budeš musieť prísť sám :)
Vypíš/ulož si bufferRF, odošli to a porovnávaj.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 16:38 | .high8 a .low8

ok:D dik za snahu aj tak :) este ako mozes, ked to vies preratat, tak ak je high 98 a low 88(dekadicky), tak ake to je cislo?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 08.05.2013 16:43 | .high8 a .low8

98 v bin je 0110 0010
88 v bin je 0101 1000
0110 0010 0101 1000 je v dec 25176


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 16:44 | .high8 a .low8

dik


Offline

Užívateľ
Užívateľ
.high8 a .low8

Registrovaný: 26.02.07
Prihlásený: 24.04.16
Príspevky: 276
Témy: 81 | 81
Napísal autor témyOffline : 08.05.2013 16:48 | .high8 a .low8

vyzera to ze to je teda dobre, mozno si to skusim hodit do PHP ten vysledok v tych high a low a tam to skusim spracovat, dik za pomoc este raz


 [ Príspevkov: 27 ] 


.high8 a .low8




© 2005 - 2024 PCforum, edited by JanoF