Miganie wyświetlacza 7seg

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
cox22
Młodszy majsterkowicz
Posty: 8
Rejestracja: 17 lut 2014, 13:45

Miganie wyświetlacza 7seg

Post autor: cox22 » 17 lut 2014, 14:07

Witam. Pomału rozwijam swój projekt i mam parę pytań i problemów.

Ogólnie opisując jest to centrum sterowania pokojem. Do tej pory działające funkcje to:
- 2 czujniki temperatury(ds18b20)
- czujnik światła
- czujnik ruchu(jeżeli w pokoju jest wystarczająco ciemno po wykryciu ruchu zapala się podświetlenie łózka)
- zapis logów na karcie sd(data, godzina, temp1, temp2)
- sterowanie 2 przekaźnikami(wł/wył świateł led)
- dioda IR do sterowania tv i głośnikami od pc
- wyświetlacz lcd(wyświetla pomiary temperatury i godzinę a po wciśnięciu przycisku przez 5 sek max i min temperaturę i datę, sterowanie podświetleniem z telefonu)
Wszystko jest sterowane poprzez program na androidzie.

Przechodząc do problemu jaki mam otóż po dodaniu wyświetlacza 7 segmentowego miga wyświetlana godzina. Winny pewnie jest program który działa zbyt wolno ale nie wiem jak mógłbym go przyspieszyć. Drugie pytanie to jak wstawić dwukropek miedzy godziną a minutami? Ogólnie mile widziane sugestie na temat kodu.
Spoiler:
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 21 lut 2014, 19:16 przez cox22, łącznie zmieniany 1 raz.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


lukasz
Majsterkowicz
Posty: 59
Rejestracja: 21 sty 2014, 21:02

Re: Miganie wyświetlacza 7seg

Post autor: lukasz » 20 lut 2014, 14:22

Witam,
Pierwsze co bym na Twoim miejscu zrobił to wyłączał po kolei wywołania funkcji logSD, pir itd i zostawił jedynie wyświetlanie na 7-seg, a w dalszej kolejności dokładał kolejne funkcje. A może zamiast mielić ten wyświetlacz przy każdym przebiegu pętli loop to zapisać sobie aktualną godzinę i odświeżać wartość tylko w momencie zmiany godziny ? Jedna zmiana stanów na 60 sekund to chyba z ekonomicznego punktu widzenia najlepsze rozwiązanie.
Chociaż poczekaj na rady mądrzejszych :-)
cox22
Młodszy majsterkowicz
Posty: 8
Rejestracja: 17 lut 2014, 13:45

Re: Miganie wyświetlacza 7seg

Post autor: cox22 » 21 lut 2014, 19:09

Już straciłem nadzieje że ktoś mi odpisze. Pomyślałem trochę i też doszedłem i zrobiłem tak jak napisałeś i wyszło że funkcje displayLCD(); i getTemp(); powodują miganie. Nie wiem czy odświeżanie godziny co minute coś da ponieważ ten wyświetlacz działa na zasadzie multipleksowania(czyli wyświetla tylko pojedyncze cyfry 1 potem 2, 3 i 4 w bardzo szybkim, niewidocznym dla oka czasie, że wygląda to tak jak by wszystkie cyfry były wyświetlone jednocześnie). I wygląda na to że te dwie funkcje spowalniają kod i w efekcie występuje efekt migania. Jeśli nie dojdę jak wyeliminować programowo tego błędu dodam druga atmege i przeniosę na nią cześć programu.
Spoiler:
cox22
Młodszy majsterkowicz
Posty: 8
Rejestracja: 17 lut 2014, 13:45

Re: Miganie wyświetlacza 7seg

Post autor: cox22 » 21 lut 2014, 21:25

No niestety nie mam takiej wiedzy żeby zmieniać taktowania bo pewnie przy zmianie oscylatora trzeba by wgrać nowego bootloadera? No chyba ze jest to prostsze niż myślę?
Awatar użytkownika
cube
Złota rączka
Posty: 834
Rejestracja: 2 gru 2012, 17:02

Re: Miganie wyświetlacza 7seg

Post autor: cube » 21 lut 2014, 22:36

Może zastosuj zewnętrzny driver do wyświetlacza, np. coś w stylu MAX7219 https://www.sparkfun.com/products/9622 Ceną się nie przerażaj, na ebay za 3zielone można kupić takich 5 sztuk :) Taka kostka załatwia Ci sprawę całego multiplexingu, po prostu ładujesz w nią wartość po serialu a reszta robi się sama. Sporo kod odchudzisz, poza tym cały multiplexing będzie niezależny od obciążenia procesora. Dodatkowo, jak radził Łukasz, dane wysyłać nie w każdym przebiegu pętli głównej.
cox22
Młodszy majsterkowicz
Posty: 8
Rejestracja: 17 lut 2014, 13:45

Re: Miganie wyświetlacza 7seg

Post autor: cox22 » 22 lut 2014, 02:11

No tak to też jest pomysł będę musiał jednak wymienić wyświetlacz bo mój jest na wspólnej anodzie a sterownik jest do wyświetlaczy ze wspólna katodą. A propos wysyłania godziny co minute to może to wyglądać tak?

Kod: Zaznacz cały

int x;
 
if (x != now.minute()) {
 displayNumber();
 x = now.minute();
}
Awatar użytkownika
cube
Złota rączka
Posty: 834
Rejestracja: 2 gru 2012, 17:02

Re: Miganie wyświetlacza 7seg

Post autor: cube » 22 lut 2014, 10:57

To jest jeszcze taka kostka jak ICM7218A oraz ICM7218C, która steruje wyświetlaczami o wspólnej anodzie: http://para.maximintegrated.com/results ... =disp_driv
ODPOWIEDZ

Strony partnerskie: