Skocz do zawartości

Raspberry Pi Pico i czujnik CO2


rafal2366

Pomocna odpowiedź

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();
}
}

 

Link do komentarza
Share on other sites

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

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

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.

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.