rafal2366 Napisano Grudzień 23, 2022 Udostępnij Napisano Grudzień 23, 2022 Cześć, próbuję uruchomić czujnik Gravity CO2 na Raspberry Pi Pico, no i nie działa i nie mam za bardzo pomysłu dlaczego. Na Arduino UNO wszystko rusza bez problemy, ale na RPI nie ma żadnych oznak życie, próbowałem na różnych pinach, ale nic to nie dało. Wrzucałem też w kod printy w różne miejsca, aby określić gdzie zatrzymuje się kod i wynika z tego, że główny loop działa, ale z jakiegoś powodu nigdy nie pojawia się obsługa przerwania, macie jakiś pomysł? Kod poniżej. #define sensorIn 3 // Sensor PWM interface unsigned long pwm_high_start_ticks = 0, pwm_high_end_ticks = 0; double pwm_high_val = 0, pwm_low_val = 0; volatile uint8_t flag = 0; void interrupt_rising() { pwm_high_start_ticks = micros(); // store the current micros() value if (2 == flag) { flag = 4; pwm_low_val = pwm_high_start_ticks - pwm_high_end_ticks; } else { flag = 1; } attachInterrupt(digitalPinToInterrupt(sensorIn), interrupt_falling, FALLING); } void interrupt_falling() { pwm_high_end_ticks = micros(); // store the current micros() value if (1 == flag) { flag = 2; pwm_high_val = pwm_high_end_ticks - pwm_high_start_ticks; } attachInterrupt(digitalPinToInterrupt(sensorIn), interrupt_rising, RISING); } void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(sensorIn, INPUT); attachInterrupt(digitalPinToInterrupt(sensorIn), interrupt_rising, RISING); } void loop() { if (flag == 4) { flag = 1; double pwm_high_val_ms = (pwm_high_val * 1000) / (pwm_low_val + pwm_high_val); if (pwm_high_val_ms < 0.01) { Serial.println("Fault"); } else if (pwm_high_val_ms < 80.00) { Serial.println("preheating"); } else if (pwm_high_val_ms < 998.00) { double concentration = (pwm_high_val_ms - 2) * 5; // Print pwm_high_val_ms Serial.print("pwm_high_val_ms:"); Serial.print(pwm_high_val_ms); Serial.println("ms"); //Print CO2 concentration Serial.print(concentration); Serial.println("ppm"); } else { Serial.println("Beyond the maximum range :398~4980ppm"); } Serial.println(); } } Cytuj Link do komentarza Share on other sites More sharing options...
pmochocki Grudzień 23, 2022 Udostępnij Grudzień 23, 2022 Arduino działa na 5v a RaspberryPi na 3.3V. Masz podłączony konwerter stanów logicznych? 1 Cytuj Link do komentarza Share on other sites More sharing options...
rafal2366 Grudzień 26, 2022 Autor tematu Udostępnij Grudzień 26, 2022 @pmochocki Tak było na konwerterze, próbowałem też bez, niestety bez różnicy. Sprawdziłem też na innej płytce, bo myślałem, że może to coś z nią jest nie tak, ale nic to nie dało. Cytuj Link do komentarza Share on other sites More sharing options...
pmochocki Grudzień 26, 2022 Udostępnij Grudzień 26, 2022 Nie piszesz jak sygnały wyglądają na pinach RaspberryPi, a jak na Arduino. Więc pewnie nie wiesz. Sugeruję analizator stanów logicznych.. Możesz napisać list do Św. Mikołaja i poczekać rok, albo zamówić na "ale drogo" za 40zł. Sprawdzisz i będziesz wiedział czy malinka coś ustawia na GPIO, czy czujnik odpowiada itd... Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
rafal2366 Grudzień 26, 2022 Autor tematu Udostępnij Grudzień 26, 2022 Sprawdzone analizatorem i cóż w jednym jak i drugim przypadku czujnik wysyła PWM, także myślę, że to Raspberry ma problem z jego odczytaniem. Do tej pory cały czas używałem biblioteki płytek Earle F. Philhower v2.6.0 (kod się uruchamia, ale brak danych z czujnika), sprawdziłem też klasyczny pakiet mbedOS dla arduino, w którym jest RPI Pico tutaj co ciekawe kodu nie da się uruchomić, po wgraniu wbudowana na płytce dioda zaczyna sobie radośnie mrugać, nie można też otworzyć monitora portu szeregowego. Trzeba wówczas całkowicie zresetować Raspberry (przytrzymanie przycisku i podłączenie zasilania). W sieci znalazłem informację, że niektóre z wersji pakietu Earle F. Philhower miały problem z przerwaniami, ale wersja 1.13.0 powinna działać. Sprawdziłem to, ale wówczas kod w ogóle się nie kompiluje: Current thread 0x000080b0 (most recent call first): exit status -1073740791 Błąd kompilacji dla płytki Raspberry Pi Pico. W ostatniej próbie zaktualizowałem pakiet Earle F. Philhower do najnowszej wersji 2.6.5, po wgraniu kodu objawy tak jak wcześniej - kod działa, ale przerwań nie wykrywa, danych z czujnika brak. Na sam koniec spróbowałem uruchomić czujnik na jeszcze innej płytce - Teensy LC. Co ciekawe tutaj działa bez problem. Także to chyba po prostu wina, RPI, ale dlaczego nie chce działać nie mam pojęcia. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!