Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Rejestrator temperatury z obsługą kart SD

Sh44dow 01 Feb 2010 18:47 29351 40
phoenixcontact
  • Rejestrator temperatury z obsługą kart SD
    Witam.
    Chciałbym przedstawić moją nową konstrukcję - rejestrator temperatury z obsługą kart Secure Digital (SD).
    Projekt powstał oczywiście w celach naukowych. Podstawą układu jest moja płytka testowa z mikrokontrolerem ATMega32. Dołączyłem do niej termometr cyfrowy DS18B20, zegar RTC DS1307 oraz adapter wpinany w gniazdo ISP (Kanda; zamiast LED jest podłączony PB4 - slave select), który wykonałem metodą termotransferu. Przystawka posiada stabilizator napięcia 3,3V (LF33CV), dzielniki napięcia z rezystorów oraz oczywiście gniazdo SD/MMC. Schemat wziąłem [stąd] , a projekt w eagle jest dostępny w paczce z programem.

    Rejestrator temperatury z obsługą kart SD

    Program napisałem w C (środowisko AVR Studio 4) z wykorzystaniem biblioteki FAT32 z bloga CC Dharmani, dzięki czemu mogę w prosty sposób kopiować dane z rejestratora na PC. Do przeglądania logów napisałem w Delphi (7) prostą aplikację generującą wykresy z plików tekstowych. Zarówno program dla mikrokontrolera jak i przeglądarka logów są napisane na szybko (tak, wiem, że mogłoby być bardziej optymalnie :) ), ale poprawkami zajmę się po sesji. Mikrokontroler komunikuje się z komputerem poprzez interfejs szeregowy RS232. Aby ustawić datę\godzinę lub przetestować termometr\kartę pamięci trzeba wejść w tryb ustawień zakładając zworkę, czego aktualnie brakuje w kodzie - jak dotąd wchodziłem w tryb ustawień wgrywając program skompilowany z linijką "ust=1;" w odpowiednim miejscu :). W normalnym trybie pracy układ zapisuje temperaturę co 5 minut oraz dodatkowo wysyła wynik po RS232. Układ pracuje już drugą dobę bez zarzutów.

    Skompilowane programy oraz źródła dostępne poniżej.
    Domyślne ustawienia to UART na 19200 bodów (8;1;N) i 1Wire na PD6.

    A o to wynik - log z dnia wczorajszego:
    Rejestrator temperatury z obsługą kart SD

    Wszelkie komentarze (zarówno pozytywne jak i negatywne) mile widziane!

    EDIT: 2010-02-01 22:23

    Koszta:

    Dużo z tych elementów już miałem, tak jak większość majsterkowiczów :).
    - ATMega32 - 12zł
    - DS1307, DS18B20 - (4+4)zł
    - Płytka uniwersalna - 7zł
    - LF33CV - 2,5zł
    - Gniazdo SD/MMC - 5zł (drogie, prawda?)
    Razem około 35zł + drobne elementy, jak kwarc 8MHz \ 32KHz, oporniki, kondensatory, kawałek laminatu.

    Zdjęcia
    Rejestrator temperatury z obsługą kart SD Rejestrator temperatury z obsługą kart SD Rejestrator temperatury z obsługą kart SD
    Płytka z ATMegą z\bez przystawki z kartą (nie wkładałem MAX232, ponieważ używam przejściówki USB <-> RS232 TTL na PL2303); na 3cim zdjęciu po lewej wyprowadzenie 1Wire i I2C, DS1307 z kwarcem oraz EEPROM 24C64, którego nie używam w tym projekcie.

    Rejestrator temperatury z obsługą kart SD Rejestrator temperatury z obsługą kart SD
    Przystawka SD - ISP kanda ze stabilizatorem 3,3V
    Tak, to prawda - nie umiem zbyt dobrze lutować :).

    EDIT: 2010-02-15 00:29
    Aktualne pomiary dostępne tutaj (na dole strony):
    http://silent.it.cx/home/2010/02/14/rejestrator-temperatury-z-obsluga-kart-sd/

    EDIT: 2010-03-06 00:54
    Wyniki online:
    http://silent.it.cx/home/2010/03/06/wyniki-pomiarow-online/
    ( http://silent.it.cx/templogger/ )

    Cool? Ranking DIY
    About Author
    Sh44dow
    Level 16  
    Offline 
    Sh44dow wrote 235 posts with rating 960, helped 3 times. Live in city Wieliczka. Been with us since 2007 year.
  • phoenixcontact
  • #2
    Tasioror
    Level 11  
    Według mnie nie chodzi o zdjęcia a o pomysł który zresztą bardzo mi się podoba zdecydowany plus oceną szczegółową zajmę się po dodaniu więcej zdjęć z projektu jak na razie odbieram pozytywnie. Czekam na

    - zdjęcia:)
    - jakie koszty

    Pozdrawiam
  • #3
    MADevil
    Level 18  
    Modyfikowałeś jakoś bibliotekę czy tylko wstawiłeś odczyt temperatury zamiast nasłuchiwania z UARTu?
  • #4
    jaculas
    Level 14  
    Napisz jeszcze jak wygląda rejestrowanie temperatury czy odbywa się co jakiś ustalony czas czy w momencie zmiany temperatury?
    Co do wypowiedzi Gibola to nie każdy ma aparat, którym wychodzą dobre zdjęcia, ważna jest konstrukcja, wiec nie czepiaj się szczegółów .

    Pozdrawiam
  • #5
    Urgon
    Level 38  
    Co do konstrukcji, to mam takie pytanie: ile miejsca zajmuje skompilowany program w mikrokontrolerze?

    Sama konstrukcja mi się podoba. Użycie karty SD pozwoli na zrobienie setek milionów pomiarów. Może spróbuj ustawić pomiar co sekundę? Ciekawe, jak wtedy będzie wyglądał wykres...
  • #6
    Szucio
    Level 14  
    Pewnie nie będzie wyglądał nic lepiej.

    IHMO za duża dokładność jest ustawiona.

    Nie wgłębiałem się w źródła, ale skoro 2,5*C zajmują 50px, to 1px-0,05*C. Termometr DS18B20 nie jest chyba aż taki dokładny i często wskazania wahają się pomiędzy jedną, a drugą wartością.

    Zapis co 5 minut to chyba optymalne rozwiązanie.

    A projekt bardzo ciekawy.
  • #7
    Sh44dow
    Level 16  
    Dodałem zdjęcia i kosztorys.

    MADevil wrote:
    Modyfikowałeś jakoś bibliotekę czy tylko wstawiłeś odczyt temperatury zamiast nasłuchiwania z UARTu?

    Chodzi Ci o FAT32.c?
    Zmodyfikowałem trochę funkcję zapisującą plik (WriteFile2()) tak by nie pobierała danych z UARTu tylko ze stringa z aktualnym odczytem. FAT32.c korzysta często z funkcji w uart_routines.c - nie chciało mi sie tego zmieniać i zostawiłem to tak, jak napisał autor tej biblioteki. W zasadzie można wywalić większość funkcji, które nie sa używane, co zmniejszy rozmiar programu.

    jaculas wrote:
    Napisz jeszcze jak wygląda rejestrowanie temperatury czy odbywa się co jakiś ustalony czas czy w momencie zmiany temperatury?

    Zapis co 5 minut bez względu na stan poprzedniego odczytu.
    Częstszy zapis mógłby się przydać np. do monitorowania temperatury jakiegoś innego urzadzenia (urządzeń). Ja wystawiłem termometr za okno, gdzie temperatura nie zmienia się tak szybko, więc odstęp 5-minutowy jest w sam raz.


    Urgon wrote:
    Sama konstrukcja mi się podoba. Użycie karty SD pozwoli na zrobienie setek milionów pomiarów.

    A do tego program można łatwo zmodyfikować i wykorzystać do zapisu pomiarów z innych urządzeń - być moze komuś się kiedyś przyda.


    Urgon wrote:
    ile miejsca zajmuje skompilowany program w mikrokontrolerze?

    z całą biblioteką FAT32 około 20kB
  • #8
    MADevil
    Level 18  
    Sh44dow wrote:

    Urgon wrote:
    ile miejsca zajmuje skompilowany program w mikrokontrolerze?

    z całą biblioteką FAT32 około 20kB


    Coś tłustawy. Mi ta biblioteka + kolorowy lcd + tablice znaków + napisy + kilkupoziomowe menu + ADC i parę innych zajmowało nieco ponad 20kB
  • #9
    pabllosee
    Level 15  
    Jeżeli konstrukcja jest wyłącznie do celów własnej edukacji to wszystko OK. Jeżeli miałoby to ewaluować do zastosowań przemysłowych, to kierunek zupełnie zły. Rejestrator powinien mieć szczelną obudowę, a co za tym idzie stosowanie karty SD jest złym pomysłem. Przy szczytywaniu danych rozkręcać obudowę i wyjmować kartę?
  • phoenixcontact
  • #10
    Urgon
    Level 38  
    AVE...

    Mogłeś poszukać mniejszej biblioteki FAT16.
    Inną metodą byłoby zapisywanie danych z pomocą SPI do kolejnych komórek pamięci karty bez używania FAT16/32. Wadą tego rozwiązania byłaby potrzeba używania programu lub/i interfejsu do zrzucania danych z karty. Za to oszczędziłbyś bardzo dużo miejsca...

    Gdyby nie ograniczony zakres pomiaru temperatury DS18B20, to układ ten doskonale by się nadawał do monitorowania jakichś procesów chemicznych, np. destylacji. Na szczęście istnieje firma Maxim, która produkuje układy do współpracy z termoparami, które pozwalają na pomiar temperatury w zakresie 0-1000 stopni. Używają one jednak SPI.
  • #11
    Duch__
    Level 31  
    Urgon wrote:
    Może spróbuj ustawić pomiar co sekundę? Ciekawe, jak wtedy będzie wyglądał wykres...


    Nie polecam robienia zapisów na kartę tak często!
    Bierzcie pod uwagę cykle zapisu! Każdy nośnik ma ograniczoną ilość zapisów. Raz kiedyś zrobiłem test na starej karcie SD 128MB i napisałem programik żeby dana liczbowa (dowolna) była zapisywana co 10ms na karcie czyli 100 razy w ciągu sekundy. Efekt był taki że po 15 min zabawy karta odmówiła posłuszeństwa. Tak więc lepiej zapisywać paczki z danymi raz na np, 30min niż "duperele" co chwile.
  • #13
    Szymon Tarnowski
    Level 27  
    pabllosee wrote:
    Jeżeli miałoby to ewaluować do zastosowań przemysłowych, to kierunek zupełnie zły. Rejestrator powinien mieć szczelną obudowę, a co za tym idzie stosowanie karty SD jest złym pomysłem.
    To nie jest wielki problem, karta może być zamknięta w obudowie, wystarczy dorobić jakiś interfejs, np IRDA albo jeszcze lepiej coś podobnego do Bluetooth. W ostateczności można dodać jakiś interfejs "stykowy" w postaci gniazdka hermetycznego.
  • #14
    cranky
    Level 27  
    Pabllosee
    Z tą uwagą proponuję zwrócić sie do SIEMENSA - w swoich sterownikach przemysłowych korzystają z kart SD. Ale co twórca Simatic'a wie o elektronice w przemyśle? :)))
  • #15
    sambo123
    Level 14  
    cranky
    Program ładuje się z karty SD a dane są przechowywane już na innych pamięciach ;)
  • #16
    MADevil
    Level 18  
    Na kartę SD nie zapiszecie bajt po bajcie. Najmniejszy obszar do zapisu - to blok (512B). Chyba, że ktoś jest strasznym osiołkiem i będzie zapisywał 512 razy ten blok, za każdym razem dodajac jeden bajt. Ale to nawet napisać jest trudniej ;)

    Algorytm w zastosowanej przez kolegę Sh44dow "bibliotece" polega na gromadzeniu danych w buforze i zapisywaniu go dopiero jak będzie miał wielkość pełnego bloku.

    Teraz pozostają do wykonania proste obliczenia, żeby uzyskać rzeczywistą częstotliwość zapisu na SD.
  • #17
    Urgon
    Level 38  
    AVE...

    Masz rację co do zapisu blokami. Ale zapis ten da się przeprowadzić bez konieczności implementacji obsługi systemu FAT13/FAT32. Z biblioteki można wyciągnąć sam mechanizm buforowania i zapisu/odczytu. Dzięki temu dałoby się kilkakrotnie zmniejszyć samą bibliotekę... Można też wywalić wszystko poza dopisywaniem do jednego pliku o z góry narzuconej nazwie blokami...

    Tak czy siak ten układ aż się prosi o więcej czujników...
  • #18
    MADevil
    Level 18  
    Można pisać na karcie nie korzystając z FATa, ale wtedy wg. mnie eliminuje się jej największą zaletę - łatwość wymiany danych z PC.

    Co do samej biblioteki. powtarzam, nie zajmuje ona tak dużo. Skompilowana standardowo zajmuje nicałe 10k, przy czym nie jest to biblioteka goła, a cały program. Realizuje on zapis, odczyt, kaswoanie, sprawdzanie pojemnosci itp, obsługa przez terminal RS232. Kodu jest wiec więcej.

    Dlatego też dziwię sie, że całość tego projektu zajmuje ok. 20k, bo kiedy pisałem 1-wire (4 czujniki + dużo tekstu na UART, żeby było edukacyjnie + inne badziewia do obsługi) na 8051 w C, to zajmowało to nie więcej niż 8k.
  • #19
    SQ2HCE
    Level 12  
    Pozdrawiam.

    Ładny i ciekawy projekt. Tylko te zdjęcia ... (ale to nie jest najważniejsze). Wydaje mi się że koledzy trochę odbiegacie od tematu. Mianowicie, program ma co zadany czas dokonać pomiaru i zapisać to na karcie SD, a po jakimś czasie przelać to do PC-ta. Robi to ? Robi, jak wynika z opisu. Czyli że spełnia swoje zadanie. A czy zajmuje 20 kB czy 10 kB to jest to zupełnie inna sprawa. Jeżeli to będzie profesjonalny produkt to co innego procesor Atmega 32 kosztuje ok 12 zł , a Atmega 16 ok. 10 zł to przy masowej produkcji są wymierne koszty. Program ma za to potencjalne możliwości rozbudowy. Już od jakiegoś czasu myślałem o podobnej konstrukcji do pomiaru temperatury i rejestracji pozycji z GPS z zapisem na karcie SD, wydaje mi się że projekt ten jest jak najbardziej obiecujący.
    Projekt jest jak najbardziej ciekawy i nadający się do własnej rozbudowy i modyfikacji.
    Powodzenia !
  • #20
    MADevil
    Level 18  
    SQ2HCE wrote:
    Pozdrawiam.

    Ładny i ciekawy projekt. Tylko te zdjęcia ... (ale to nie jest najważniejsze). Wydaje mi się że koledzy trochę odbiegacie od tematu. Mianowicie, program ma co zadany czas dokonać pomiaru i zapisać to na karcie SD, a po jakimś czasie przelać to do PC-ta. Robi to ? Robi, jak wynika z opisu. Czyli że spełnia swoje zadanie. A czy zajmuje 20 kB czy 10 kB to jest to zupełnie inna sprawa. Jeżeli to będzie profesjonalny produkt to co innego procesor Atmega 32 kosztuje ok 12 zł , a Atmega 16 ok. 10 zł to przy masowej produkcji są wymierne koszty. Program ma za to potencjalne możliwości rozbudowy. Już od jakiegoś czasu myślałem o podobnej konstrukcji do pomiaru temperatury i rejestracji pozycji z GPS z zapisem na karcie SD, wydaje mi się że projekt ten jest jak najbardziej obiecujący.
    Projekt jest jak najbardziej ciekawy i nadający się do własnej rozbudowy i modyfikacji.
    Powodzenia !



    Po mojemu 100% złego rozumowania.
    Jeśli kod jest duży, to z reguły nie znaczy, że jest go dużo i tyle. Znaczy to ,ze coś się tam dzieje, coś się robi niepotrzebnie, coś marnuje czas. Oznacza to brak wydatności, do gruby kod = wolny kod.
    Zupełnie jakbyś napisał: "To co, że w tym projekcie migajacej diody dałeś TRAFO 2kVA, działa"
    Tu się nie dyskutuje o tym, że robić jest dobrze, tylko o tym, że można robić lepiej i po to są te pytania, żeby później były rady i nauka.
  • #21
    coyot
    Level 17  
    Ja pokusiłbym się o możliwość generowania gotowych plików bmp czy pcx struktura takiego pliku w wersji 256 kolorów jest niemal trywialna, przynajmniej tak mi się wydaje, dawno to robiłem.
    Nie wiem jak z zastosowaniem praktycznym mojej sugestii, ale zabawa przednia.
    Idąc o krok dalej można by drukować wyniki na drukarce, mam tu na myśli jakiegoś igłowego epsona czy oki (też ma emulację epsona) igłowego bo prosty do implementacji (chodzi o sam język opisu strony) gdzieś widziałem manuala od tego, niektóre późniejsze atramentówki i lasery miały emulację takich języków. Nie pamiętam jak jest z postscriptem, to byłaby już bajka :D.
    Można by mieć kartę SD jako magazyn danych z którego "maszyna" potrafi wydrukować dowolną paczkę informacji, ale z drugiej strony np. dane z karty można zaimportować do excela i wszystko gotowe. Ufff rozpisałem się....

    Pozdrawiam
  • #22
    Przemek Elektro
    Level 16  
    MADevil wrote:
    Można pisać na karcie nie korzystając z FATa, ale wtedy wg. mnie eliminuje się jej największą zaletę - łatwość wymiany danych z PC.


    Jest taki program DD Link
    Jest wersja na Windowsa i na Linuxa.
    Umożliwia on sczytanie danych z karty nie posiadającej żadnego systemu plików. W programie podaje się liczbę sektorów do sczytania, dane można wyświetlić na ekranie, lub automatycznie zapisać do pliku. Tworząc plik wsadowy *.bat uzyskujemy bardzo wygodny sposób na sczytywanie danych z karty SD. W tym rozwiązaniu sprawa ma się trochę gorzej, jeżeli byśmy chcieli utworzyć na karcie kilka plików podczas zapisu (np oddzielny plik na każdy dzień), ale to też da się rozwiązać (np 1 dzień = 10 sektorów).
    Oczywiście wykorzystanie zależy od danego urządzenia i od tego, czy najbardziej zależy nam na oszczędzeniu mocy obliczeniowej procesora (i pamięci RAM) czy priorytetem jest łatwość odczytu plików.
    Przynajmniej warto wiedzieć, że takie rozwiązanie też istnieje.
  • #24
    MADevil
    Level 18  
    :arrow: Przemek Elektro

    W sumie nie pomyślałem, że może coś takiego być, albo można to napisać. W pewnych projektach do rozważenia użycie takiego rozwiązania. Dzięki za link, zapisałem ;)
  • #25
    Maticool
    Level 20  
    Witam. Zauważyłem, że bardzo "poszarpane" są te wykresy - czy użyłeś jakieś procedury uśredniającej kilka pomiarów czy po prostu zapisujesz jeden pomiar co 5 min?
  • #27
    dexter1
    Level 14  
    Ładny projekcik, uniwersalki u mnie również często są w obrocie :) I faktycznie zmień częstotliwości pomiarów i myślę że możesz zapisywać 2 scieżki. Uśredniona wartość i po prostu taka jaka jest.
  • #28
    marek62
    Level 2  
    Czy dobrze połączyłem porty bo nic mi nie zapisuje na karcie SD?
    1. Z czytnika kart wg oznaczeń złącza Kanda:
    SCK na PB7, MISO na PB6, MOSI na PB5, LED(SS) na PB4, GND na GND, VCC na +5V
    2. Zegar SD1307
    SDA na PC1, SCL na PC0 ?
    3. Czujnik temperatury DS18B20 (środkowa nózka) na PD6,
    4. Klawiatura - brak
    5. Wyświetlacz LCD - brak
    6. Dioda przez opornik 1k na PD5 ? Do czego ona służy?
    No i nie wiem tez jak ustawić aktualną datę i godzinę?
    A tak ogólnie świetny projekt 5/5, no może przydałby się schemat całego urządzenia.
  • #29
    Sh44dow
    Level 16  
    Nie zapisuje prawdopodobnie dlatego, że właśnie zegar nie jest ustawiony.
    Jeśli nie używasz baterii podtrzymującej, to połącz VBat DS1307 z masą. Dioda może być użyta do sygnalizacji zapisu na kartę, tylko trzeba dopisać kilka linijek w programie. Można ją też pominąć.

    DAtę\godinę ustawia się przez rs232. Podłączałeś ukłąd do PC?
    Najprościej jest zmienić w kodzie fragment:
    /*
    			 jeśli zworka konfiguracji jest założona,
    			  to:
                 ust=1;
    			*/

    na:
    Wtedy można ustawiac godzinę z terminala (oraz przeprowadzić test termometru\zegara\karty), a później wgrać program bez tej linijki.


    Układ działa już 2 tygodnie bez problemów. Aktualne pomiary zamieszczam na mojej nowej stronie:
    http://silent.it.cx/home/2010/02/14/rejestrator-temperatury-z-obsluga-kart-sd/
    Na dole jest odnośnik do najnowszych danych.
  • #30
    marek62
    Level 2  
    Z PC-tem układu nie łączyłem. Podtrzymanie bateryjne posiadam na płycie testowej.
    Wieczorem spróbuje zmienić kod, skompilować program i podłączyć do PC. Nie wiem tylko czy nie potrzeba jakiegoś programu do ustawienia tej daty i godziny? Co będę widział na epranie PC po podłączeniu układu? Póżniej po ustawieniu trzeba wgrać ponownie program przed zmianami kodu i powinno być dobrze?

    Szukając po necie znalazłem podobny program (źródło + hex) na forum strony and-tech.pl temat płytki startowej EvB4.x czyli http://www.and-tech.pl/forum/viewtopic.php?t=90 Program ma zapisywać temperaturę co 15min na kartę SD. Układ posiada wyświetlacz i klawiaturę ma też 3 przyciskach. Chodzi co prawda na innym układzie zegara, ale można z klawiatury ustawiać godziny, minuty, dzień, miesiąc i to wszystko wyświetla na LCD 2x16 plus dwie temperatury T1 i T2. Program wgrałem uruchomiłem - chodzi ładnie ale na karcie mam cały czas pusty zbiór z danymi temper.txt. Próbowałem już na kilku różnych kartach SD. Zbiór układ tworzy nawet sam na karcie po wciśnięciu jednego przycisku ale zawartości brak.

    Może na podstawie tego programu można dorobić LCD i klawiaurkę do ustawień?
    Jeszcze pytanie do autora układu SD: czy opornik 600R na PB6 jest w działającym układzie bo na schemacie ogólnym go nie widzę a na wzorze płytki jest?
    Może poszukam karty MMC i wtedy może będzie chodziło?