Skocz do zawartości

Licznik z szybkim odczytem i zapisem


cyryllo

Pomocna odpowiedź

Witam.

Tworzę pewne urządzenie z wykorzystaniem Raspberry Pi, które sczytuje około 280 impulsów na sekundę z liczników prądu. Ilość impulsów zapisuję na bieżąco do pliku, ale praktycznie zapis io karty pamięci jest zapełnione z czego np inne urządzenia po 1wire jak termometry nie dają rady zapisywać i odczytywać nic z plików bo karta jest zajęta zapisem tych impulsów.

Szukam jakieś liczniki układy, do których mogę zapisywać i aby taki układ nie potrzebował zbytnio energii do podtrzymania jego stanu stanu?

Co prawda zoptymalizowałem swój kod programu z zapisem i już jakoś to działa ale wolał bym nie zajeżdżać karty sd takimi ciągłymi zapisami do niej.

Link do komentarza
Share on other sites

"Czy są jakieś liczniki układy, które potrafią zliczać.."

Tak są.

"..lub można w nich zapisywać"

Takie też są.

".. i nie potrzebują zbytnio energii do podtrzymania stanu? "

Oczywiście.

A teraz wytłumacz proszę, co Ci da licznik zewnętrzny skoro i tak problemem jest ogrom danych zapisywanych do karty? Zapisujesz fakt wystąpienia każdego zobocza plus znacznik czasu? Długość impulsów? Ich odstępy? Bo chyba nie liczbę impulsów? Wtedy mógłbyś po prostu zapisywać rzadziej ale większe liczby. Licznik uwolni Cię od zajmowania się wykrywaniem zboczy ale nie zmieni obciążenia karty.

Ile bitów pojemności licznika potrzebujesz? Jak chcesz to odczytywać? Równolegle czy przez jakiś inetrfejs szeregowy? Co ma się dziać po zliczeniu? Czy licznik ma zliczać modulo jakieś n czy do zadanej wartości a potem co? Ma się zatrzymać? Zgłosić przerwanie? Liczniki ludzkość robi od dawana więc chyba rozumiesz, że można dziś zbudować dowolny. Sprecyzuj wymagania.

Link do komentarza
Share on other sites

"Czy są jakieś liczniki układy, które potrafią zliczać.."

Tak są.

To i ja się domyślam że są

"..lub można w nich zapisywać"

Takie też są.

j.w.

".. i nie potrzebują zbytnio energii do podtrzymania stanu? "

Oczywiście.

Dobrze wiedzieć

A teraz wytłumacz proszę, co Ci da licznik zewnętrzny skoro i tak problemem jest ogrom danych zapisywanych do karty? Zapisujesz fakt wystąpienia każdego zobocza plus znacznik czasu? Długość impulsów? Ich odstępy? Bo chyba nie liczbę impulsów? Wtedy mógłbyś po prostu zapisywać rzadziej ale większe liczby. Licznik uwolni Cię od zajmowania się wykrywaniem zboczy ale nie zmieni obciążenia karty.

Licznik ma za zadanie zapisywać stan impulsów. Myślałem albo o rzadszym zapisie albo o dzielniku częstotliwości. Jeśli nie zapisuję impulsów to wszystko jest trzymane w pamięci i inne urządzenia maja bezproblemowy dostęp do danych a karcie sd.

Ile bitów pojemności licznika potrzebujesz? Jak chcesz to odczytywać? Równolegle czy przez jakiś inetrfejs szeregowy? Co ma się dziać po zliczeniu? Czy licznik ma zliczać modulo jakieś n czy do zadanej wartości a potem co? Ma się zatrzymać? Zgłosić przerwanie? Liczniki ludzkość robi od dawana więc chyba rozumiesz, że można dziś zbudować dowolny. Sprecyzuj wymagania.

Bitów myślę że im więcej tym lepiej może być i nawet mniejszy i żebym raz na jakiś czas po prosu wartość z licznika zapisywał do pliku. Interfejs może być uart, spi czy i2c. Licznik ma zliczać wystąpienia stanu wysokiego na pinie tzn. jest + to zlicza na zasadzie wykrywania zmian między - a +. Tak przynajmniej działa teraz mój program. Zatrzymać się może tylko gdy sam tego zechce lub go zresetuję.

Link do komentarza
Share on other sites

To chyba najwygodniejszym dla Ciebie układem będzie ten:

http://www.nxp.com/documents/data_sheet/PCF8583.pdf

Jest to typowy zegar czasu rzeczywistego ale:

- ma specjalny tryb "event counter" w którym łańcuch liczników zamiast liczyć sekundy, minuty i godziny liczy po prostu dziesiętnie od 000000 do 999999 w BCD,
- zamiast kwarcu możesz podłączyć impulsy zliczane,
- liczy do 1MHz,
- możesz go czytać, zapisywać, zatrzymywać, zatrzaskiwać stan w locie, zerować itd. przez I2C - podłączenie do Maliny lub Arduino jest trywialne,
- masz możliwość zgłaszania przerwania po dojechaniu do jakiejś zaprogramowanej wartości,
- układ jest stary, więc są dostępne biblioteki do jego obsługi,
- dostępny jest w obudowach DIP (montaż z użyciem lutownicy do rynien), SO (dla ambitnych hobbystów) i QFN (hardcore),
- I2C pracuje od 2.5V ale jeśli dorobisz baterię to samo zliczanie działa już przy 1V,
- jest tani i łatwo dostępny:

http://www.tme.eu/pl/details/pcf8583p/uklady-scalone-interfejs-i2c/nxp/pcf8583pf5112/#

Podłączenie typowego licznika TTL lub CMOS to będzie wiele drutów I/O a niczego nie daje w zamian więcej, częstotliwości rzędu 100MHz chyba nie są Ci potrzebne.

  • 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

Dzień dobry. Szukałem licznika do Raspberry i natrafiłem na ten post, kupiłem układ PCF8583 i podłączyłem go z Raspberry - komunikacja działa.

Problem niby banalny ale nie mogę wysterować układu w tryb licznika. Według dokumentacji powinienem w memory location 00 ustawić bity w następujący sposób:

00100000 co w przeliczeniu na hexa daje 0x20

Wydaję polecenie na Raspberry:

sudo i2cset -y 1 0x51 0x00 0x20

Później podaję na OSCI napięcie zasilania 5V i sprawdzam stan licznika:

sudo i2cget -y 1 0x51 0x01

Rzecz nie działa.

To mój pierwszy kontakt z i2c. Proszę bardziej doświadczonych kolegów o sprawdzenie mojego rozwiązania i o pomoc u uruchomieniu zliczania.

Link do komentarza
Share on other sites

1 godzinę temu, chrzanio napisał:

podaję na OSCI napięcie zasilania 5V

Wejście nie potrzebuje napięcia zasilania tylko impulsy. Nie, wiszenie pinu w powietrzu i sporadyczne podłączanie go do 5V to nie są impulsy.

1 godzinę temu, chrzanio napisał:

Rzecz nie działa.

To znaczy sudo się nie wykonuje, i2cget nie działa, odczytujesz przypadkową liczbę, odczytujesz zawsze taką samą lub dziwną wartość, Malina zwisa lub wybucha? Jak mamy "sprawdzić" Twoje rozwiazanie gdy piszesz takie banały?

  • Lubię! 1
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.