Witam i z góry chciałbym przeprosić jeśli na forum był już podobny temat, problem w tym że chciałbym prosić o prosty (na prawdę prosty) program zegara LED (6 cyfr) oparty na kwarcu 8MHz (możebyć wiecej, lecz nie posiadam 32768Hz). Posiadam kilka przykładów programu: "liczenie" czasu, multipleksowanie LED (tych aż za dużo) lecz nie potrafię sobie wyobrazić jak ma wyglądać ich sprawne połączenie w jedną całość... na elektrodzie jest wiele takich tematów lecz w żadnym nie znajduje się prosty plik .bas który pokazał by mi dobitnie jak to ma wyglądać. Podsumowywując proszę o kod źródłowy który zilustruje zamianę zmiennych (Sek, Min, Godz) na wartości wyświetlane na wyświetlaczu najlepiej z wykorzystaniem Case Select, rozumiem że dla niektórych może to być śmieszne, lecz ja nie wyobrażam sobie nauki bez sensownego przykładu który widnieć winień na kartce. Jeśli miałoby to ułatwić podam aliasy i dane do wyświetlacza: Liczby:
|
|||
Odp. [Bascom] Atmega8 prosty zegar LED
Osobną rzeczą jest obliczenie wartości dla każdego z wyświetlaczy.
Najpierw musisz wiedzieć co to jest Modulo
Mod
Jest to reszta z dzielenia przez wartość która stoi za wyrażeniem Mod
Przykład 1 : Wynik = 5 Mod 2 Wynikiem będzie jeden, bo pięć podzielone przez dwa to dwa, ale reszta to jeden.
Przykład 2 : Wynik = 12 Mod 10 Wynikiem będzie dwa, bo 12 podzielone przez dziesięć to jeden , ale reszta to dwa.
Tak więc jeśli masz godzinę 24h : 31m : 43s w trzech osobnych bajtach
Kiedy masz obliczone wartości dla poszczególnych wyświetlaczy to używasz polecenia
Lookup
Polecenie to odczytuje z tablicy dane znajdujące się na miejscu które wskazujesz.
W tablicy wiec umieszczasz wartości tak żeby pod danym numerem porządkowym znajdowała sie taka wartość która na wyświetlaczu będzie pokazywać cyfrę. Czyli na miejscu trzecim umieszczasz taką wartośc żeby uruchomiona na wyświetlaczu dała nam cyfrę trzy.
Jesli teraz odwołasz się do tablicy
Ustaw_port = Lookup(3,Liczby)
to program odczyta wartośc w tablicy spod trzeciego miejsca.Jeśli jednak napiszesz tak
Ustaw_port = (Cyfra_5, Liczby)
to będzie czytać spod czwartego miejsca bo Cyfra_5 ma aktualnie wartość 4 i przechowuje wartość dla piątego wyswietlacza.Jak to ogarniesz to możesz wszystko zautomatyzować bardziej :)
Teraz będziemy mieli zarezerwowane tez sześć bajtów ale nie będa się inaczej nazywały a będą miały numerek/index co pozwoli łatwiej się do nich odwoływać.
Teraz trzeba przypomniec sobie ze ludzkie oko widzi bezwładnie przy zmianie obrazu szybszym niż 50 klatek na sekundę.
Co w drugą stronę oznacza że potrafi dostrzec mruganie jeśli coś się dzieje wolniej...
Tak więc masz tylko jeden port którym ustawiasz to co dzieje się na wyświetlaczach a musisz każdy z nich odświeżyć minimum 50 razy na sekundę. Trzeba więc to wszystko robić sześć razy szybciej.
50Hz x 6 = 300Hz . Wychodzi na to że przydało by się to robić co 3,3ms...
Można szybciej ale bez szaleństw, tak żeby program miał jeszcze czas na inne sprawy.
Teraz piszesz sobie obsługę tych wyświetlaczy. Sprawa jest nieskomplikowana.
Trzeba wiedzieć ż epo starcie programu wszystkie zmienne, dopóki coś w nich nie zapiszesz, mają wartość zero i to się przyda. Możesz bowiem zaraz po wejściu do procedury obsługi wyświetlaczy zwiększyć wartośc zmiennej odpowiadającej za to który akurat wyświetlacz bierzemy pod uwagę. Czyli z zera zrobi się jeden.
Rozważmy jeszcze sytuacje że jesteśmy tu siódmy raz i zmienna ma wiecej niż mamy wyświetlaczy. Sprowadzamy ją więc znów do parteru :P
Potem już bułka z masłem. W zalezności który aktualnie wyświetlacz obsługujemy to nim się zajmujemy poprzez
Select Case
gasimy poprzedni, ustawiamy port wartością nowego wyświetlacza i zapalamy go po czym opuszczamy podprogram.Pisałeś że masz tych kodów wiecej więc nie będę sie rozpisywał
Czasem potrzebne są zmienne pomocnicze bo nie można zbyt wiele działań wykonywać w jednej linii.
Na przykład trzeba czasem odczytać wartość z tablicy do zmiennej i dopiero nią ustawiać wyświetlacze. to się tyczy wielu innych przeliczeń.
Nie można dzielić Word przez Byte. Trzeba je najpierw sprowadzić do tego samego typu.
BARTek
Moja strona
Odp. [Bascom] Atmega8 prosty zegar LED
Witam i serdecznie dziękuję za pomoc właśnie o takie coś mi chodziło prosto i na temat, teraz już wiem co z czym i gdzie połączyć :)
Witam, też chciałbym to
Witam, też chciałbym to ogarnąć, ale mi nie idzie... ;)
Tomasz0723 czy mógłbyś mi podesłać jakiś przykład działającego programu na którym mógłbym się nieco oprzeć przy pisaniu swojego?
Odp. [Bascom] Atmega8 prosty zegar LED
Zaloguj się i wrzuć schemat to Ci go oprogramuję z opisem co, jak i dlaczego i od razu będzie działać z Twoim sprzętem, wiec będziesz miał okazję potestować.
BARTek
Moja strona