Witam, mam problem z napisaniem fragmentu kodu odpowiedzialnego za wyświetlanie paska poziomu głośności oraz wyłączenia wyświetlacza LCD po ustalonym czasie.
Może zacznę od sprzętu jakim dysponuję:
- uC ATTiny2313
- wyśw. LCD 2x16 znaków
Najpierw pasek:
ma on "zmieniać" położenie w zależności od pewnej zmiennej, pasek wygląda tak: "----O-----------", czyli 16 pozycji, zmienna jest typu Byte, czyli w zakresie 0-15 ma mieć postać: "O---------------", 16-31: "-O--------------" itd.
Udało mi się napisać poprawnie działający pasek, ale jest jedna ogromna wada mojego rozwiązania - nie mieści się we flashu, ponieważ uC musi zapamiętać tekst do wyświetlenia dla każdej z wszystkich 16 pozycji. Myślałem nad użyciem czegoś w rodzaju Shiftlcd albo For X = 0 To 15 itp. ale nie wychodzi mi to. Chodzi tylko o to, aby te "O" z paska przesuwać w zależności od zmiany zmiennej (mniejsza bądź większa) kolejno w lewo lub w prawo. LCD w tym wypadku nie musi być "czyszczony".
Fragment mojego kodu:
Dodam, że Upperline nie chcę zmieniać, ma pozostać nienaruszona.
Teraz wyłącznik czasowy LCD:
Nie mam pojęcia czy takie coś idzie zrobić tylko na uC czy trzeba będzie użyć jakichś przerzutników bądź bramek. Od razu mówię, że nie chodzi mi o użycie komendy Display off, która kasuje tylko tekst z wyświetlacza. Chodzi mi o wyłączenie podświetlenia wyświetlacza. Czyli w skrócie: jeśli zmieni się cokolwiek na wyświetlaczu ma zostać włączone podświetlenie (Set na którymś z wybranych pinów uC) na jakiś tam czas (5-20s). Tak jak jest w komórkach. Po tym czasie wyświetlacz ma się znowu wyłaczyć (Reset na tym pinie). Cały problem polega na tym, że dane są cały czas wysyłane z uC do LCD i cały czas się zmienia stan wszystkich pinów (patrzyłem podłączając LED'a - migał na każdym), dlatego nie wiem jak to zrobić i proszę o pomoc.
Może zacznę od sprzętu jakim dysponuję:
- uC ATTiny2313
- wyśw. LCD 2x16 znaków
Najpierw pasek:
ma on "zmieniać" położenie w zależności od pewnej zmiennej, pasek wygląda tak: "----O-----------", czyli 16 pozycji, zmienna jest typu Byte, czyli w zakresie 0-15 ma mieć postać: "O---------------", 16-31: "-O--------------" itd.
Udało mi się napisać poprawnie działający pasek, ale jest jedna ogromna wada mojego rozwiązania - nie mieści się we flashu, ponieważ uC musi zapamiętać tekst do wyświetlenia dla każdej z wszystkich 16 pozycji. Myślałem nad użyciem czegoś w rodzaju Shiftlcd albo For X = 0 To 15 itp. ale nie wychodzi mi to. Chodzi tylko o to, aby te "O" z paska przesuwać w zależności od zmiany zmiennej (mniejsza bądź większa) kolejno w lewo lub w prawo. LCD w tym wypadku nie musi być "czyszczony".
Fragment mojego kodu:
Dim L As Byte
L = 130 'wartość początkowa
Cls
Do
'w tym miejscu jest pozostały działający kod
If L >= 0 And <= 15 Then
Lowerline
Lcd "O---------------"
End If
If L >= 16 And L <= 31 Then
Lowerline
Lcd "-O--------------"
End If
'itd. dla pozostałych 14 pozycji
Dodam, że Upperline nie chcę zmieniać, ma pozostać nienaruszona.
Teraz wyłącznik czasowy LCD:
Nie mam pojęcia czy takie coś idzie zrobić tylko na uC czy trzeba będzie użyć jakichś przerzutników bądź bramek. Od razu mówię, że nie chodzi mi o użycie komendy Display off, która kasuje tylko tekst z wyświetlacza. Chodzi mi o wyłączenie podświetlenia wyświetlacza. Czyli w skrócie: jeśli zmieni się cokolwiek na wyświetlaczu ma zostać włączone podświetlenie (Set na którymś z wybranych pinów uC) na jakiś tam czas (5-20s). Tak jak jest w komórkach. Po tym czasie wyświetlacz ma się znowu wyłaczyć (Reset na tym pinie). Cały problem polega na tym, że dane są cały czas wysyłane z uC do LCD i cały czas się zmienia stan wszystkich pinów (patrzyłem podłączając LED'a - migał na każdym), dlatego nie wiem jak to zrobić i proszę o pomoc.