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

Atmega8 + wyświetlacz graficzny 128*64 KS0108 [BASCOM]

CyccX 16 Lip 2011 01:10 6867 10
REKLAMA
  • #1 9723683
    CyccX
    Poziom 15  
    Witam,

    zakupiłem taki o to wyświetlacz graficzny http://www.artronic.pl/o_produkcie.php?id=1108. Na aukcji piszą że wyświetlacz ten posiada wbudowany generator ujemnego napięcia, więc pin 18 Vee pozostawiłem nie podłączony.. [a może być powinien jakoś podłączony ?? ]

    wyświetlacz podłączyłem w/g schematu zamieszczonego w znanym czasopiśmie [oczywiście pomijając podłączenie Vee jak napisałem wyżej]. Jest w nim też cały rozdział poświęcony obsłudze wyświetlacza graficznego 128*64 na kontrolerze KS0108.

    Na podstawie listingu w czasopiśmie, napisałem swój krótki programik sprawdzający poprawność działania wyświetlacza. o to on

    Kod: text
    Zaloguj się, aby zobaczyć kod


    program się kompiluje bez błędów. Wgrany na atmege8 nie robi nic.. podświetlenie wyświetlacza świeci ale ekran jest pusty. [cały czarny - bo to black, z białymi literami].

    coś pominąłem ?? coś zrobiłem źle ? proszę o pomoc
  • REKLAMA
  • #2 9723703
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 9724039
    CyccX
    Poziom 15  
    przez opornik ? czy bez opornika
  • #4 9724468
    Konto nie istnieje
    Konto nie istnieje  
  • #5 9724677
    CyccX
    Poziom 15  
    dzięki za odpowiedź, wyświetlacz działa, wszystko jest ok. mogę wyświetlać tekst, rysować linie i tym podobne.

    ale natrafiłem na pewien problem, a nie chce zakładać nowego tematu więc będę kontynuował ten.

    Problem mianowicie jest taki że chce na wyświetlaczu zamieścić 4 zmienne wartości [będą to temperatury] i prócz prezentacji cyfrowej chce też zrobić wizualizację graficzna w formie suwaka, bara, paska postępu jak kto woli to nazywać.

    dokładnie będzie widać o co chodzi na filmie który link załączam poniżej.

    niestety takie rozwiązanie jakie ja zastosowałem nie sprawdza się.. bo dobrze jest gdy wartości są małe i słupki są niskie, ale gdy słupek przekroczy 50% długości to ekran odświeża się tak długo, że dolne partie w zasadzie przestają być widoczne.. Wygląda to tak jakby sterownik był za wolny czy coś, i odświeżanie straszne powolne.. Widać to na załączonym filmie.

    http://www.youtube.com/watch?v=Rs3CdzHqJeU

    w rzeczywistości efekt jest jeszcze gorszy.

    tutaj załączam kod który jest wgrany w atmege:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    czy ktoś może podsunąć rozwiązanie jak to zrobić by nie używać funkcji cls ? bo to ona jest temu winna, i trwa długo wpisywanie od nowa danych na wyświetlacz.

    proszę o pomoc
  • REKLAMA
  • #6 9724687
    piotrva
    VIP Zasłużony dla elektroda
    Tak, nie używaj cls'a
    Po prostu rób tak, jak rysujesz bara:
    Idziesz od dołu podziałki i rysujesz linie kolorem czarnym dopóki wartości są mniejsze lub równe zadanej. A potem idziesz do góry i rysujesz paski aż do samej góry podziałki, tyle, że w kolorze białym.
    Co do tekstów tak samo. Wypisujesz na stałe napisy takie jak: Temperatura: +00.00 *C
    a temperaturę jedynie podmieniasz używając funkcji locate i odpowiedniego formatowania tekstu.
  • #7 9724786
    CyccX
    Poziom 15  
    odpowiednie formatowanie tekstu, możesz tą myśl rozwinąć ??

    obawiam się że rysowanie barów w przeciwna stronę o odwrotnym kolorze pochłonie zbyt dużo pamięci.. to co widać zajmuje 43%.. rysowanie w druga stronę zajmie pewnie drugie tyle.

    a do tego jeszcze muszą dość zmienne obsługi SPI do odczytu danych z 4 źródeł..
  • #8 9724944
    piotrva
    VIP Zasłużony dla elektroda
    No odpowiednie formatowanie - czyli zera prowadzące przed liczbami.
    Ale czemu ma zająć więcej pamięci:
    1. Rysujesz ramkę bara (czyli linie góra, dół i boki, na bokach (najlepiej na zewnątrz) rysujesz podziałki i tego już nie zmieniasz nigdy - zostaje na stałe a potem:
    
    For I=0 To Wysokosc_bara Step 1
    If I<=Wartosc Then
    Line (Lewa_strona_bara,I)-(Prawa_strona_bara,I), 1
    Else
    Line (Lewa_strona_bara,I)-(Prawa_strona_bara,I), 0
    End If
    Next I
    

    Oczywiście odpowiednie zmienne i stałe trzeba wcześniej zadeklarować.
    Można też użyć gotowej funkcji, bodajże boxfill czy coś takiego i wtedy rysujesz od dołu do wartości wypełniony, a potem od wartości do góry pusty.
  • REKLAMA
  • #9 9725503
    mate_ok
    Poziom 18  
    Mogę zapytać ile zapłaciłeś za ten wyświetlacz?
  • #10 9726807
    CyccX
    Poziom 15  
    60zł z wysyłka.

    dzieki piotrva za ten fragment kodu, widzę że rozwiązałeś w nim rysowanie bara w całkowicie inny sposób niż ja mam u siebie zrobione.. może twoim sposobem będzie zajmować on o wiele mniej pamięci, muszę go tylko przeanalizować i zrozumieć.

    zainteresowało mnie też polecenie boxfill, czy ktoś może napisać o nim coś więcej ?
REKLAMA