Jedna lepiaca (ako spojit dva bajty do int)
Josef Štengl
ok1ced na nagano.cz
Čtvrtek Leden 5 12:35:07 CET 2017
Dne 5.1.2017 v 11:40 tomas mainzer napsal(a):
> nevim jaky mate prekladac a indiana v procesoru (pripadne je treba prehodit b[0],b[1]) ale lze i takto:
>
>
> typedef struct tagintb {
> union {
> struct {
> int16_t i; //2B int
> };
> struct {
> uint8_t b[2]; //1+1B array
> };
> };
> } intb;
> ..
>
> intb b;
> b.b[0]=Wire.read();
> b.b[1]=Wire.read();
> return(b.i);
>
>
>
> 2017-01-05 11:09 GMT+01:00 balu <balu na k-net.fr <mailto:balu na k-net.fr>>:
>
> Ked sa uz o tom lepeni ve sroubarne bavime, mal by som jednu zaciatocnicku...
>
> MCP3428 na ktory som sa pytal funguje vyborne, teraz by som rad dalej spracoval data... Po I2C zbernici dostavam data
> z AD prevodnika, idu po sebe dva bajty, najprv horny a potom spodny. Vystup ma byt signed 16-bitovy integer.
>
> Otazka je ako ich spravne skombinovat do jedneho intu? V tom hnusnom prostredi pre ten hnusny procesor ma int dva
> bajty, ziadnu portovatelnost na ine platformy nepotrebujem. Mozeme skusit dve riesenia, jedno co bude fungovat v tomto
> konkretnom pripade a jedno genericke, uplne korektne. Rad by som sa naucil ako nato...
>
> dakujem,
> b.
>
>
>
> // read channel value
> Wire.requestFrom(0x68, 2); // request 2 bytes from slave device #68
> while (Wire.available()) { // slave may send less than requested
> byte bhigh = Wire.read();
> byte blow = Wire.read();
> return( ((unsigned int)bhigh << 8) + blow ); <<<--- tutoka
> }
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list <http://list.hw.cz/mailman/listinfo/hw-list>
>
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Další informace o konferenci Hw-list