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

Bascom/Atmega644 - Zapis na kartę SD - zmiana katalogu

maximus22_kr 06 Cze 2013 11:31 3060 10
  • #1 12388235
    maximus22_kr
    Poziom 18  
    Witam
    Chciałem zmienić dotychczasowy sposób zapisu, czyli plik w głównym katalogu, na zapisywanie pliku w katalogu \rok\miesiąc

    W tym celu dodałem do działającego kodu zapisu SD polecenie Chkdir oraz zmienne określające rok i miesiąc, ale to nie działa. Tzn. plik nadal zapisuje się w głównym katalogu.
    Na karcie pamięci założyłem katalogi 12 , 13, 14 oraz w każdym z nich 01, 02, 03, 04 ... 12.

    Nie wiem, czy dobrze robię rozbijając przejście do katalogi na dwie czynności ?

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Mam też pytanie, jak zrobić, aby data czas modyfikacji były prawidłowe ?


    Zapomniałem, że konwersja do zmiennej typu string obcięła "0" i nie mógł znaleźć katalogu. Zmieniłem nazwy na 1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10 ,11, 12

    Ponawiam pytanie odnośnie czasu i daty - w pliku aktualnie zapisywanym i w wcześniejszych mam
    data 2001-01-01
    czas 01-00-00
  • #2 12391907
    Mundi1970
    Poziom 24  
    Jeżeli używałbyś Bascom'owego zegara (Config Clock = Soft/User) data i godzina byłyba prawidłowa. Możesz zrobić eksperyment :), zdefiniuj zegar (zostaną dodane zmienne wykorzystywane przez Avrdos'a _sec, _min, _hour, _day, _month i _year) i dodaj podprogram Getdatetime. W podprogramie należy przepisać datę z PCF do zmiennych wykorzystywanych przez Avrdos.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #3 12391941
    maximus22_kr
    Poziom 18  
    Właśnie o to mi chodziło. Przeglądałem to polecenie w wersji
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    ale tam była informacja, że potrzebny jest Timer, a ja już wolnego nie mam.

    Wystarczyła zmiana nazwy podprogramu do odczytu czasu i dopisanie zmiennych tak, jak Kolega podał i już.

    Działa jak trzeba, czyli przy odczycie karty SD w komputerze jest poprawna data i czas ostatniego zapisu danych przez Atmega.
  • #4 12438162
    george2002

    Poziom 21  
    Można w takim razie prosić o wstawienie poprawionego kodu :) ? kiedyś myślałem o takim rozwiązaniu przy rejestracji temperatury i wilgotności na karcie SD :)

    I czy jakieś procedurki można zobaczyć od obsługi PCF8563 bo u Mnie jakieś dziwne rzeczy się dzieją i chyba coś źle zapisuję/'odczytuję :)

    PS
    Widzę że jakiś ciekawy rejestratorek się wykluwa ;)
  • #5 12439136
    maximus22_kr
    Poziom 18  
    Rejestrator dość spory. Większość danych zbiera płytka nadajnika na Atmega328 i tam następuje praktycznie całkowita obróbka - oprócz danych z siedmiu DS18B20, jednego DHT11 oraz MPL115A2, odbieranie czasu z DCF77 i jego aktualizacja w PCF8563 przesyłane są dane o tym czy nie ma awarii czujnika ( zmienna Err ) oraz informacja o histerezie czujników DS18B20 ( w formie "+", "-" i "=" a właściwie w formie odpowiedników bajtowych tych znaków) a odbiornik już to sobie odpowiednio prezentuje
    W planach dołożenie czujnika deszczu i światła, podłączonych przez przetwornik A/D PCF8591 ( dane będą jako zmienna typu Byte - czyli np. 0 to brak deszcze, 255 to urwanie chmury ), dane z czujnika światła mogą się przydać do sterowania urządzeniami - zasięg sygnału z RFM12 jest spory - ponad te 300 metrów - nadawany z drugiego piętra.


    Lokalnie w odbiorniku mam jeden DS18B20 i jeden DHT11, karta SD, przyciski PCF8574, RFM12, nawet mam przygotowane dwa gniazda pod obsługę dwóch LCD ( ale niestety jest z nimi problem, bo jeden działa OK, a drugi czasem wyświetla dziwne znaki zamiast znaków zdefiniowanych znaków LCD ).

    Na ale do rzeczy:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Zmieniłem nazwę swojego programu do odczytu godziny z układu PCF8563
    oraz dodałem zmienne _sec, _min,....
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dodatkowo, dla zmniejszenia pracy kontrolera przez większą cześć trwania minuty odwołuje się do mniejszego programu, który czyta z PCF8563 tylko sekundy, a tylko gdy sekundy = 59 odczytuje całość danych

    Kod: text
    Zaloguj się, aby zobaczyć kod


    w ten sposób zmieniam nazwę pliku w zależności od dnia i miesiaca - pierwsze trzy znaki są bez zmian, zmienia się reszta.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    no i wreszcie sam zapis:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #6 12439995
    george2002

    Poziom 21  
    Kurczę, tak podejrzewałem że to jakieś fajne urządzonko ale tylu znanych Mi elementów układanki się nie spodziewałem :) kiedyś RFM12BP się bawiłem ale nie za bardzo udało Mi się go obsłużyć :( zapytałbym czy da się cały kod ujawnić ale z góry zakładam że nie także jeśli tylko jeszcze by można było prosić o ustawianie czasu na PCF (bo zakładam że odbywa się to przez przyciski i wyświetlacz a nie np przez RS232) oraz o obsługę RFM (tutaj pytanie którą wersję Pan wykorzystuje) to byłbym wdzięczny no i oczywiście gratulacje zamozaparcia i dobrej roboty !

    PS
    Można liczyć na jakieś zdjęcie całego urządzenia :) ?

    Pozdrawiam
    George2002
  • #7 12440686
    maximus22_kr
    Poziom 18  
    Co do kodu, to wstawię coś wieczorem, jak wrócę z pracy.

    Jeśli chodzi o obsługę RFM12 to mam z tego wątku
    Link
    z przed ostatniej strony ( jest tam też zresztą kilka moich postów ), natomiast nie ma tam ważnej linijki kodu, który odblokowywał kontroler w czasie pomiędzy odbiorem danych, a który mam dzięki korespondencji z Kolegą NanoTechno.

    Co do ustawiania daty/godziny w PCF8563, to jest przy użyciu klawiszy podpiętych do PCF8574 i odbiór jest w przerwaniu.
    Jeśli chodzi o ustawianie daty/czasu przez RS232 to też nie ma problemu. W nadajniku dodałem trochę linijek kodu ( odbiór z UART + analiza ciągu ) i w ten sposób mam "furtkę" w nadajniku do ustawiania daty/czasu oraz mogę sprawdzić numery seryjne czujników DS18B20 oraz zmienić te numery w razie usterki, a także zmieniać czasy odczytu czujników ( zapisane są w pamięci EEPROM kontrolera, po odebraniu przez RS aktualizuje w tej pamięci ). Dodatkowo wyprowadziłem UART na goldpiny na płytce ( oprócz MAX485 ) i podpiąłem tam moduł Bluetooth, przez który na odległość mogę konfigurować nadajnik.

    Wracając do RFM12 to dobra rzecz. Dane z czujników idą na cały dom. Planuję jeszcze kilka odbiorników, ale bez zapisywania na SD ( tylko mój odbiornik ma mieć taką funkcję ). Radio zapewnia separację wszystkich układów, więc w razie draki padnie np. tylko nadajnik. Mam też w planach odbiornik wyposażony w moduł GSM SIM900 ( Chińczycy sprzedają za 56 USD kompletny moduł z płytką i przetwornicą ), który będzie również odbierał dane i czekał na komendę z komórki z odpowiednim poleceniem, w odpowiedzi na które wyśle wybrane dane.

    Jako, że Chińczycy sprzedają układy MAX7456 ( generator obrazu video, który można nałożyć np. na obraz z kamery i dane z czujników wyświetlać w tle ) w cenie 20 USD za 5 sztuk, też się nad czymś takim zastanawiam. Byłaby to płytka z RFM12 + MAX7456 - układ odbiera dane i prezentuje je jako sygnał video.

    No i pozostaje jeszcze kwestia internetu, czyli odbiór danych z RFM12 i udostępnienie ich przez układ ENC28J60 w internecie, tylko tutaj musi być lepszy kontroler ( przynajmniej jeśli chodzi o Bascom ) minimum Atmega644, a jeszcze lepiej Atmega1284, gdyż potrzebne jest więcej pamięci na utworzenie ramki danych wysyłanych.
    Pewnie dałoby się połączyć razem wszystkie te funkcje na jednej płytce.
  • #8 12441388
    george2002

    Poziom 21  
    Dziękuję za tak obszerną wiedzę :) mało kto i rzadko ludzie są otwarci aby tyle kodu udostępnić, teraz wiem co miałem nie tak w swoim kodzie do ustawiania czasu w PCF'ie :)

    Resztę którą Pan opisuje też znam, w firmie w której pracuję wszystkie elementy (oprócz ENC28j60 - tym sam się bawię) wykorzystujemy a dodatkowo również SHT11 oraz SHT75 :)

    Ciekawy ten układ MAX do generowania obrazu - spodobał Mi się - do quadrocoptera można go wykorzystać i pokazywać napięcie, wysokości itp :)
  • #9 12441554
    maximus22_kr
    Poziom 18  
    george2002 napisał:

    Resztę którą Pan opisuje też znam, w firmie w której pracuję wszystkie elementy (oprócz ENC28j60 - tym sam się bawię) wykorzystujemy a dodatkowo również SHT11 oraz SHT75 :)
    wolałem tańszy DHT11, co prawda mniejsza rozdzielczość i ma nietypowy protokół niezgodny z 1WIRE, ale ten kod, który używam sprawdza się.


    george2002 napisał:

    Ciekawy ten układ MAX do generowania obrazu - spodobał Mi się - do quadrocoptera można go wykorzystać i pokazywać napięcie, wysokości itp :)

    Do tego go właśnie modelarze wykorzystują, ale można też do kamer, sprawdzi się, bo ma wejście i wyjście sygnału. Komunikacja przez SPI, nawet w sieci jest kod przykładowy w Bascomie do jego obsługi.


    Co do ENC28J60 to jedni go chwalą, a inni na niego narzekają, faktem jest, że jest na niego dużo przykładów w sieci. Znany jest kod Kolegi Piotrva oraz z Link
    , ale nie wszystkim działa, na Elektrodzie trafiłem na dyskusję - ENC28j60 - gdzie ktoś podał parę poprawek i ponoć działa nieźle
  • #10 12443047
    maximus22_kr
    Poziom 18  
    Dodaje kod do zapisu daty i czasu w PCF8563

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Można zapisywać sam czas
    Kod: text
    Zaloguj się, aby zobaczyć kod


    lub samą datę
    Kod: text
    Zaloguj się, aby zobaczyć kod

    wystarczy wybrać odpowiedni rejestr.
    Nawet swego czasu udało mi się ustawić alarm w PCF8563, ale nie udało mi się połączyć tego z flagą.


    Co do zapisu przez UART to ja to robię tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #11 12444504
    george2002

    Poziom 21  
    Z ENC miałem problemy i wysiadłem a okazało się że później ktoś odkrył co było nie tak i nawet na stronie ben'a zijlstr'y jest napisane co trzeba poprawić żeby ruszył kod, niestety z braku czasu na razie nic w tym temacie nie działałem ale kiedyś wrócę :)

    Bardzo fajnie te funkcje rozplanowane i przemyślane :) no i opisane - za to wielki plus bo wiele jest kodów nie opisanych a tak to można nie tylko ctrl+c i działa ale dowiedzieć się co i jak :)
REKLAMA