Stacja pogodowa, na początku miał być tylko zegarek, projekt cały czas się rozwija. Nie dokończone jeszcze rysowanie wykresu, menu już jest, brak grafik do pogody, ale się pojawia.
Układ złożony z modułu mmega128, wyświetlacz graficzny T6963, pamięć 24c256 po i2c (do zbierania logów), w module w pamięci flash załadowane grafiki. Obsługa z pilota rc5. Czujniki: DTH22, BMP085, czujnik oświetlenia. W module mmega02 jest zegar na ds1305, pamiec flash at45 (wszystko po SPI).
W planie podłączenie modułu wifi i przesyłanie na serwer, dopisanie budzika i może coś więcej.
Grafiki ładowane są oddzielnymi programami, które nic nie robią tylko kopiują zawartość pamięci procka na flash. Ze względu na duża ilość grafik, każda paczkę należny wgrywać osobno (paczka przyjmuje max kilka dużych grafik lub więcej mniejszych). Nie zrobiłem leadera grafik, nie mam na to pomysłu, może kopiować z karty sd? Grafika musi leżeć na flash, ze względu na szybkość odczytu.
Video z działania układu
Tym Razem Poprawiłem ... SunRiver
Ostatnio edytowano 24 wrz 2015, o 14:37 przez wchpikus, łącznie edytowano 1 raz
Projekt zapowiada się ciekawie. Ciekawy jest sposób konfiguracji z podkreśleniami co aktualnie jest zmieniane. I ten scrolling
Planujesz dołożenie modułu prognozującego pogodę?
Pogoda będzie jeszcze wyświetlana wg wskazań ciśnienia, wilgotności temperatury, graficzne rysunki, możne animacja, deszcz, mroz... Animacja może przejdzie, spi jest na tyle szybki ze uda się załadować i wyświetlić.. Prognoza pogody...jak zbiorę dane i je obrobię, może jest jakaś zależność, ale prognoza to temat na doktorat, raczej trzeba obserwować wiatry elminio:), lokalnie to ciężko..
Podoba się scrolling? Walka z nim była niezła:) Niestety nie da się łatwo zrobić wertykalnie, ale może...
Podoba się scrolling? Walka z nim była niezła:) Niestety nie da się łatwo zrobić wertykalnie, ale może...
to napisz moze cos wiecej o tym scrollingu bo TAK wyglada naprawde fajnie robiles podwojne buforowanie ?
Po pierwsze, problem był z duchami, pozostawionymi przez zapalone pixele.. Nie dało rady narysować coś, przesunąć w dol z myślą, ze zniknie poprzedni rysunek.. Wyświetlacz trzyma dane w pamięci. Reset (czyszczenie lcd) odpada, migotanie będzie widoczne.
Próbowałem rysować czysta linie zaraz po obrazku, niestety czas "czyszczenia" był za duży, zresztą trzeba było trzymać pozycje gdzie ma kasować...(gdzie indziej zaczyna się np kropka rozdzielająca czas, a gdzie indziej inna grafika. Za dużo kodu i za mało czasu na czyszczenie.
Prostym rozwiązaniem okazało się pozostawienie od góry wolnej linii (czystej) na szerokość pixela już na etapie projektowania grafik.
Samo wyświetlanie jest proste, wystarczy dodać jeden parametr w funkcji (pozycja x lub y) i nim operować.
Ale doszedłem to tego po godzinach walki z kasowaniem pozostawionych pixeli:)
Witam wszystkich ! Może zechciałbyś podzielić się informacjami : 1. Korzystając z jakiego programu tworzyłeś fonty grafiki ? 2. Może coś więcej na temat projektu - na przykład nie wszyscy mogą być przekonani, że trzeba było odświeżać cały obszar wyświetlacza itd.? Mimo wszystko zachęcam do podzielenia się większą ilością szczegółów, może nie tylko ja jestem taki ciekawski? Co szkodzi powiedzieć w kilkunastu zdaniach co jest w przerwaniach, co w programie głównym, zdecydowanie więcej na temat wyświetlania ?
witam Program do konwersji grafik LCDAssistant by Radzio.
W przerwaniu pracuje tylko timer, oraz obsługa pilota. Timer0 jako licznik, timer1 - pilot
W main, sprawdzany jest tylko status klawiszy (u mnie to sa klawisze pilota i przypisane im akcji), stan licznika w przerwaniu, oraz odczyt czasu z ds-a. Reszta dzieje się w podprogramach, wywoływanych pilotem, oraz sprawdzając stan bitów poszczególnych zmiennych (flag).
Oczywiście w main jest tez ustawienie atmega128.inicjalizacja i2c, spi, wyświetlacza, uart, ds-ow.
Po włączeniu odczytywane sa tez wartości z pamięci eeprom,takie jak podświetlenie, ustawianie zapisu logerra itp.
Co do odświeżania wyświetlacza, można jak napisałem, nadpisać zawartość zerami miejsca, które chcemy wyczyścić, tylko ze to dużo dodatkowego kodu, trzeba pamiętać pozycje itp..ale da się.
Wyświetlacz działa na zasadzie zapisu 8 bitów na raz, czyli wartość 0xff odpowiada zapalonym 8 pixelom w jednej linii. Jak wyślesz 0xAA, otrzymasz zapalony i zgaszony pixel na przemian. Grafiki trzymane sa w postaci tablic, przekonwertowanych z bitmapy. Rysujesz grafikę po 8 bitow, niestety nie da się narysować tylko 5, 6, 3,zawsze 8, wiec albo grafika ma dokładnie wielokrotność 8 lub wypełniasz resztę pozostałą 0-mi. Starałem się otrzymywać wielokrotność.
Fonty są tez w formie grafik (tablic) we flash, co daje mi możliwość podmiany. Wyświetlam je poprzez case, podając koordynaty, flagi ustawiają, jakie to maja być cyfry (małe, duże). Resztę robi funkcja wyświetlania. (podaje ile bajtów ma odczytać z flash, skąd (która strona pamięci), jaka jest szerokość grafiki) i rysujemy.
Jak macie jakieś pytania, odpowiem, niestety soft jest duży i umieszczenie go tutaj raczej będzie kłopotliwe:)
Witam Projekt się rozwija, dodano - menu wyboru wyświetlania wartości min i max dla temperatur - menu wyboru wyświetlania wykresów (ciśnienie, wilgotność, temperatury) - menu wyboru wyświetlania daty i alarmu (jeszcze nie ma obsługi) - rysowanie wykresów (trzeba tylko skale dobrać)
Miałem tez problem z kasowaniem pamięci flash w module Mmega128, rozwiązaniem okazało się podłączenie linii przełączającej moduł w tryb programowania, bezpośrednio z diody LED programatora ISP. Programator w momencie wgrywania wsadu ustawia tam stan niski, który był mi potrzebny do przełączenia MMega128. Teraz nie muszę już "banglac" przełącznikiem, co skutkowało tym, ze czasami zapisywała się zewnętrzna pamięć flash w tym module, nie wiadomo czemu... W pamięci mam same grafiki, a ładowanie ich jest trochę problematyczne. Obecnie mam przygotowanych kilka "plików wsadowych", gdzie każdy ma jakaś cześć grafiki i jest ona kopiowana z mikro kontrolera do flash. Może później będzie możliwość załadowania z pliku po RS lub z karty...jeszcze tego nie rozwiązałem.
Zapomniałem dodać, ze projekt powstał od zerowej wiedzy na temat C, z przesiadki z Bascom, wiec wszystko zrobione od zera, wraz z nauka programowania w C. Wiem ze jest dużo "baboli", staram się na bieżąco je poprawiać, zmieniać i pisać inaczej, ale zabawa jest przednia. Szczególnie jak wraca się do kodu z przed kilku miesięcy i po nabytej wiedzy poprawia "smarki":) Przez taki projekt nauczyłem się obsługi SPI, i2C, pamięci, zegara RTC, obsługi LCD, pilota i klawiszy, tworzenia menu i wiele innych:)
Użytkownicy przeglądający ten dział: Google [Bot] i 1 gość
Nie możesz rozpoczynać nowych wątków Nie możesz odpowiadać w wątkach Nie możesz edytować swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników