logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMega32][C] Wyświetlanie na LCD danych zapisanych na SD/FAT32

psicho 31 Gru 2011 00:47 2068 7
REKLAMA
  • #1 10326980
    psicho
    Poziom 11  
    Witam,

    z góry przepraszam jeśli moje pytanie jest banalne ale zarówno C jak i programowania mikrokontrolerów dopiero się uczę.

    Korzystając bibliotek Dharmani'ego [url=]http://www.dharmanitech.com[/url] (FAT32, SD, UART, SPI) stworzyłem sobie układ który zapisuje dane z czterech przetworników na kartę SD jako pliki *.csv. Konstrukcja pliku wygląda mniej więcej jak na zdjęciu: [ATMega32][C] Wyświetlanie na LCD danych zapisanych na SD/FAT32.

    Chciałbym na wyświetlaczu tft wyświetlać dane z kolejnych dni w formie wykresów stałych tj np mam zapisane dane z dnia 30.12.2011 i chciałbym utworzyć z nich wykres. Jak się do tego najlepiej zabrać? Rozważam trzy możliwości. Funkcję rysującą wykresy oczywiście mam napisaną.

    1) Jako, że w plikach *.csv mam zapisane dane z przetworników można by kolejno wyciągać kawałki łańcucha i poprzez funkcję atof(); zamieniać te kawałki na typ float, zapisywać w tablicy 4x96 (pomiar z 4 przetworników co 15 minut daje w 24 godzinach 96 wyników). Problem w tym, że klastry zawierające dane mają 512 bajtów i podczas czytania i siekania takiego klastra miałbym problem z kawałkami łańcucha rozłożonymi na dwa sąsiadujące klastry. Tzn np część informacji o wartości acd0 znajduje się na 508-512 bajcie pierwszego klastra a kolejna część na pierwszych bajtach kolejnego. No i tutaj na razie leżę, i dlatego zastanawiam się nad kolejnymi możliwościami.

    2) Przepisywanie zawartości pliku do tablicy w pamięci flash i analogiczne operacje na tej tablicy jak w punkcie 1). Chyba rozwiązanie niedopuszczalne ze względu na "zamulenie" procesora podczas przepisywania.

    3) Zapis danych do pliku w jakiejś formie binarnej (?) I potem odczyt bezpośrednio na wyświetlacz. Jest takie coś możliwe?

    No i taka czwarta ostateczna możliwość. Zapisywanie dublowanych plików na kartę SD, tj jednego pełnego z opisami, godziną, datą, znakami nowej linii itd, a drugi okrojony aby zmieścić się w 512bajtach na całość pliku. Taki plik zawierałby 24 odczyty z 4 przetworników o pełnych godzinach. Zakładając, że jeden odczyt z jednego przetwornika wyglądałby np 3.33 (volt oczywiście), i każdy odczyt oddzielony byłby przecinkiem plik ważyłby 480 bajtów :-D. To już chyba piękna kombinacja no ale nie mam już innego pomysłu.


    Mam wrażenie, że próbuję wyważyć otwarte drzwi no ale cóż :-) Liczę na sugestie.

    Dodano po 39 [minuty]:

    Teraz tak sobie pomyślałem, że mógłbym tę końcówkę klastra która nie pomieści całej linii zapisywać znakami spacji i kolejną linię zapisywać w nowym klastrze. Ale czy to konieczne?
  • REKLAMA
  • Pomocny post
    #2 10327087
    kriss68
    Poziom 20  
    Nie wiem do końca jak działa tamta biblioteka ale czemu nie użyjesz popularnej i dopracowanej biblioteki od elm - chana która nazywa się FatFs w niej nie martwisz sie o nic tylko podajesz ile chcesz bajtów odczytać i tyle.
  • REKLAMA
  • Pomocny post
    #3 10327351
    mirekk36
    Poziom 42  
    kriss68 napisał:
    Nie wiem do końca jak działa tamta biblioteka ale czemu nie użyjesz popularnej i dopracowanej biblioteki od elm - chana która nazywa się FatFs w niej nie martwisz sie o nic tylko podajesz ile chcesz bajtów odczytać i tyle.


    Dikładnie, tyle że do takiego prostego odczytu to w zupełności wystarczyłaby jeszcze prostsza biblioteka niż FatFS czyli

    PetitFAT ;)

    A przy okazji mniej miejsca w procku by zajęła, przy okazji w porównaniu do tego darhmani-coś-tam - obsługuje w pełni FAT32 więc można sobie luzem całe pliki bajt po bajcie czytać a nie jakimiś kocimi klastrami po 512 bajtów (mówię oczywiście o odczycie przy pomocy tej biblioteki a nie zapisie)
  • REKLAMA
  • #4 10327801
    psicho
    Poziom 11  
    Dziękuję za odpowiedzi :) czyli jest prostszy sposób i to mnie cieszy. W takim razie zabieram się za wymianę bibliotek. Ta PetitFatFs jest baaardzo zachęcająca!
  • #5 10331843
    kriss68
    Poziom 20  
    Ale pisałeś, że zapisujesz dane na karcie, a Petit nie potrafi tworzyć plików :)
  • #6 10332423
    mirekk36
    Poziom 42  
    kriss68 napisał:
    Ale pisałeś, że zapisujesz dane na karcie, a Petit nie potrafi tworzyć plików :)


    No tak, utworzyć nowego pliku to się nie uda. Takie rzeczy to tylko w FatFs. Ale już zapisywać do istniejącego pliku PetitFat potrafi (z tym że bez możliwości zwiększenia jego objętości da radę zrobić - ale znowu nie jest to takie proste jak samo odczytywanie)
  • Pomocny post
    #7 10332970
    sorex86
    Poziom 15  
    Meczylem sie z tymi bibliotekami jakis czas temu:

    PetitFAT - prosty odczyt, potrafi modyfikowac plik. Tak jak koledzy mowili glownie do odczytu danych.
    Dharmani'ego - bardzo fajna jezeli sie robi data logger, tylko momentami kod jest troche nie czytelny
    FATFs - Dhar sie na niej opieral. Lepiej kupic wiekszy procek, spedzic duzo czasu przy niej, bo praktycznie wszystko da sie wykonac na tej bibliotece.
  • REKLAMA
  • #8 10333473
    psicho
    Poziom 11  
    Właśnie ta nieczytelność kodu w połączeniu z moimi brakami w programowaniu w C sprawia, że ciężko mi teraz tak po prostu podmienić biblioteki :) póki co zrezygnowałem z tego wyświetlania wykresów. Naukę FATa na podstawie tych bibliotek zacznę gdy wytrawię płytkę i postawię na niej swój projekt bo na razie żal rozbierać "pajęczaka" aby uruchomić i analizować gotowca od Elm. Dziękuję wszystkim za pomoc :) Pozdrawiam
REKLAMA