Skocz do zawartości

Edison UPM library


Sawa

Pomocna odpowiedź

Cześć,
Mam edisona + i2c block od Sparkfuna. Chcialem podlaczyc czujnik https://software.intel.com/en-us/iot/hardware/sensors/tcs3414cs-color-sensor do ktorego jest sdefiniowana obsluga w UPM library. Napisałem przykładowy program tak jak jest w linku:

#include

#include

#include "tcs3414cs.h"

#include

int doWork = 0;

upm::TCS3414CS *sensor = NULL;

void

sig_handler(int signo)

{

printf("got signal\n");

if (signo == SIGINT) {

printf("exiting application\n");

doWork = 1;

}

}

int

main(int argc, char **argv)

{

//! [interesting]

upm::tcs3414sc_rgb_t rgb;

// Instantiate the color sensor on I2C

sensor = new upm::TCS3414CS();

// Print out the r, g, b, and clr value every 0.5 seconds

while (!doWork) {

sensor->readRGB(&rgb);

std::cout << (int)rgb.r << ", " << (int)rgb.g << ", " << (int)rgb.b << ", " << rgb.clr << std::endl;

usleep (500000);

}

//! [interesting]

std::cout << "exiting application" << std::endl;

delete sensor;

return 0;

}

i cały czas dostaje taka samą odpowiedz... Gdy odłacze czujnik nic sie nie zmienia, taka sama odpwowiedz: (41400, 2052, 36305, 2052). Co jest nie tak?

__________

Komentarz dodany przez: Treker

Kod programu, dla lepszej czytelności, należy umieszczać w tagach .

Proszę to poprawić.

Link do komentarza
Share on other sites

Bingo, komunikacja się nie powiodła.

W funkcji:

void TCS3414CS::readRGB (tcs3414sc_rgb_t * rgb) {

uint8_t buffer[8];

// We need 7 bytes of data.

if (i2cReadReg_N (REG_BLOCK_READ, 8, buffer) > 7) {

rgb->g = buffer[1] * 256 + buffer[0];

rgb->r = buffer[3] * 256 + buffer[2];

rgb->b = buffer[5] * 256 + buffer[4];

rgb->clr = buffer[7] * 256 + buffer[6];

}

}

nie wchodzi do if'a. Tylko dalej nie wiem jak rozwiazac ten problem

__________

Komentarz dodany przez: Treker

Kod programu, dla lepszej czytelności, należy umieszczać w tagach .

Proszę to poprawić.

Link do komentarza
Share on other sites

Program jest ze strony producenta więc raczej poprawny i przetestowany. Zostaje więc sprawdzenie połączeń - czy wszystko prawidłowo podpięte, zasilone itd. W przypadku I2C trzeba też pamiętać o rezystorach podciągających (o ile na płytce nie ma).

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Jeżeli nie wchodzi do if to znaczy, że nie udał się odczyt 8 bajtów danych z czujnika.

Popatrzyłem na schemat samej płytki I2C Sparkfuna:

https://cdn.sparkfun.com/datasheets/Dev/Edison/SFE_I2C_Breakout_Block.pdf

i specyfikację czujnika:

http://www.seeedstudio.com/wiki/index.php?title=Twig_-_I2C_Color_Sensor_v0.9b

Moim zdaniem nie pasują złącza. Na schemacie mamy SCL, SDA, Vcc, GND. W opisie podłączenia czujnika: Vcc, GND, SDA, SCL. Nie zgadza się kolejność, nawet po odwróceniu numeracji pinów. Sprawdź to, bo problem z komunikacją po I2C musi być jakiś bardzo podstawowy. No i miejmy nadzieję, że np. odwrotne zasilanie nie załatwiło czujnika...

Link do komentarza
Share on other sites

Nie bardzo rozumiem, ze nie pasuja do siebie. W płytce od Sparkfuna domyslnie Vcc ustawione jest na 3.3V więc jest OK. Wszystkie piny podłączam normalnie tzn. SDA-SDA, SCL-SCL itd. Napisałem do autora biblioteki dla tego czujnika i udało mi się dowiedzieć, że nie była ona testowana na Edisonie, tylko na Galileo i jest prawie pewny, że jest niezgodna. Użyłem polecenia i2cdetect i czujnik jest widoczny. Na podstawie kodów biblioteki sam napisalem obluge i wydaje sie ze dziala

Nie wiem jak jest w Galileo, ale Edison ma dostepne dwie magistrale i2c. Biblioteka nie umozliwia wyboru i upatruje tutaj problem.

[ Dodano: 22-01-2016, 16:24 ]

Jakas zawieche zlapalem 😋 na plytce od czujnika mam GND, Vcc, SDA, SCL

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.