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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.