60 nap alatt Arduino #29 - I2C busz és a TC75/LM75

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: 60 nap alatt Arduino #29 - I2C busz és a TC75/LM75

HozzászólásSzerző: Tiborx8 » 2016. december 26. hétfő, 20:54

Koszonom a valaszokat.

A forumon rengeteg segitokesz embert talaltam, nekik ezuton is koszonok minden segitseget.

venmedve
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2017. február 2. csütörtök, 18:29
Tartózkodási hely: Budapest

Re: 60 nap alatt Arduino #29 - I2C busz és a TC75/LM75

HozzászólásSzerző: venmedve » 2017. március 1. szerda, 19:51

Eredetileg úgy gondoltam nem foglalkozok még ezzel a házival, de rájöttem a HW nélkül is megoldható.
Előjeles megjelenítés kell? Itt egy lehetséges megoldás.

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

/* I2C thermo EXT1
 LM754/TCN75A sample
 60 nap alatt arduino tanfolyam
 Venmedve megoldása
 
 Akinek van hadrwere kipróbálhatná. :)
*
* A program némi egyszerusitesen esett at
* Ugyanakkor használtam a "C" nyelv altal nyujtott
* lehetosegeket.
*
* Bar az alapelv, a programok hordozhatosaga miatt
* az, hogy a lehetoleg ne hasznaljunk nyelvspecifikus
* megoldasaokat, megis az alabbi programban hasznalt
* megoldasokat megengedhetonek talalom
* Ugyanis a legtobb magas nyelvu program ismeri a
* hasznalt adatipusokat, (C PASCAL C++ Arduino)
* A kis tomoritest meg szukseg eseten ki lehet bontani.
 */

//wire fuggveny kell!
#include "Wire.h"

//2 belso valtozo

// Csak egy valtozo kell !
// t a belovasott homerseklet
// mivel a homero IC kettes komlemensben
// ket byteon tarolja a homersekleti adatokat,
// elegendo az int tipus.
// tudjuk hogy az int tipus 2 byeton tarolt elojeles
// egesz.
// Ez kicsit bonyolitja a tizedes jegyek kiitasat, de megoldhato.

int t;

void setup()
{
  //IIC kommunikacio inicializalas
  Wire.begin();
  //Sorosport megnyitasa
  Serial.begin(9600);
}
void loop()
{ //A 72-es cimrol 2 byte-t kerunk
  Wire.requestFrom(72, 2);
  //ha nincs eszkoz, akkor itt all a program
  while (Wire.available())
  {
    //1. byte megerkezik: egesz fok
    // * ez az eredeti program resze kicsit modositva
    // a beolvasott byte-ot 256-al szorozva az int tipusu
    // t valtozo felso 8 bitjen helyezzuk el
    t = Wire.read() * 256;
    //2. byte megerkezik: tort hofok
    // * Az also 8bitet ami a tizedeseket tartalmazza hozzadjuk a
    // t valtozohoz, igy annak az also nyolc bizjet foglalja el
    // a beolvasott adat a következo keppen nez ki:
    // egeszek  tortek az also negy bit a katalogus szerint 0
    // eeeeeeee tttt0000
    // ha megis ketsegeink lennenek, : t += (Wire.read() & 0xfff0);
    // a tovabbiakban nincs szukseg semmifele muveletre, hiszen a
    // kapott ertek egy elojeles szam ami aranyos a homerseklettel.
    // vagyis az aktualis homerseklet 256 szorosa.
    t += Wire.read();
    Serial.print("Temperature = ");
    // a korrekciot a kiiratasban vegzzuk el.
    // Ezzel lehetove teve a tizedfokok kiirasat
    // a kiiras 4 tizedessel irja ki a homersekletet,
    // ami kicsit nagykepu, mivel a thermometer IC +-2 fok
    // pontasan mer, a gyari adato szerint
    Serial.println(float(t) / 256, 4);
  }
  delay(100);
}


Vissza: “60 nap alatt Arduino - Házi feladatok”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég