Wpis z mikrobloga

Kumpel @zenkowik uświadomił mnie, że problem może leżeć dalej, a nie koniecznie musi być literówką, za co serdecznie mu dziękuję.

Witajcie!

Stworzyłem shield dla arduino, który ma działać jako 6-kanałowe urządzenie do pomiaru temperatury na maszynie do odlewania odśrodkowego. Płytka oparta jest o przetworniki MAX31855, które komunikują się z mikrokontrolerem poprzez software SPI. Wszystko zostało przetestowane w serial monitorze i hula aż miło. Jednak projekt został docelowo przygotowany, aby zbierane dane były zapisywane w pliku na karcie sd (bo w końcu to odlewanie odśrodkowe ;). I tutaj pojawia się problem, i MAX31855, i karta SD osobno pracują idealnie, razem nie chcą się dogadywać za cholerę. Jako zwrot z przetwornika dostaję zera, żadnego błędu lub wartości, ale zera. Z tego co wyczytałem na forum arduino chodzi o zajmowanie przez kartę SD pinu CS.

Googlując dotarłem do tego tematu: KLIK, a z niego użytkownicy kierowali do postu #15 w tym temacie. Zainstalowałem nawet bibliotekę SdFat.h użytkownika fat16lib, jednak to nie poskutkowało, więc nie wiem co robię źle... Dlatego zwracam się do was z prośbą o jakieś rady, pomysły, cokolwiek.

Elav

#programowanie #arduino
  • 27
@Elav: CS to Chip Select, osobny na urządzenie, reszta może być ta sama, oczywiście kartę sd i maxy masz podpięte pod osobne piny cs? :)
@skew: Tak dokładnie SD jest przez magistralę ICSP, a każdy MAX ma osobny pin CS, poza tym osobno wszystko działa, tj. gdy nie używam karty, a wyświetlam na serial monitorze.
@Elav: Jeśli wszystkie MAX31855 sobie nie przeszkadzają, to chodzi o SD które zajmuje MISO/MOSI (CS na HIGH). W tym linku który podesłałem wczoraj był taki niby fix który polegał na używaniu karty SD tylko wtedy gdy jest potrzebna i potem od razu kończeniu transmisji, wydaje mi się że warto sprawdzić.
@zenkowik: właśnie sprawidzłem i nie pomogło. Gdy nie używam karty to scalaki sobie nie przeszkadzają, normalnie mam 6 odczytów, nie wiem co jest eknięte z tą biblioteką SD.h, ale przecież SPI jest po to zaprojektowane, aby parę urządzeń pracowało na tym :D
@Elav: Tak, masz rację, ale w jednym momencie powinno być aktywne tylko jedno urządzenie slave. Może tak testowo podłącz sobie jeden LED (z rezystorem) do CS płytki SD i drugi LED do CS któregoś z czujników temperatury (druga noga do GND). Jeśli LED gaśnie tzn. że dane urządzenie zostało uaktywnione - sprawdź czy dla SD dioda się zapala po wyłączeniu w kodzie i jak się zachowuje ta od czujnika.
@Elav: Zajrzyj do pspi.h. Masz gotowe procedury do programowego obsługiwania spi tyle, że ja oferuje jedynie wymianę danych przez SPI.
Musisz ustawić odpowiedni pin CS, wykonać pewnie jeden/dwa transfery przez spi żeby pobrać dane z MAX i zwolnić CS. Nie używasz wtedy biblioteki arduino do obsługi MAX.
@Analityk: @zenkowik: obie lampki świecą prawie cały czas, zwalnianie pinów nie bardzo pomaga... Ktoś na forum Arduino napisał, że SPI w bibliotece SD wykorzystuje piny 12 i 13, a ja mam tam podpięte SCK i MOSI z MAX'a ;(