Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Inicjacja wyświetlacza od Nokii 6100 za pomocą Atmega8. Jak?

wladza13 20 Apr 2007 14:39 7793 25
SterControl
  • #1
    wladza13
    Level 14  
    Wątek był już parę razy poruszany, ale nigdzie nie ma konkretów, które pozwoliły by mi uruchomić ten wyświetlacz na Atmega8. Jak na razie co udało mi się zdziałać to ten schemat.
    Inicjacja wyświetlacza od Nokii 6100 za pomocą Atmega8. Jak?
    A program chciałem napisać sam w asemblerze jednak to mnie przerosło. Ledwo umie zapalić diodę na danym porcie, a o obsłudze TWI juz nie mówię.
    Tak naprawdę zależy mi tylko żeby udało mi się włączyć podświetlanie i zapalić wszystkie pixele. Jeżeli były koś tak uprzejmy i pomógł mi napisać ten program byłbym wdzięczny. Jakby ktoś miał jakieś uwagi dotyczące schematu proszę pisać.
  • SterControl
  • #2
    wladza13
    Level 14  
    Widzę, że jak na razie cisza. Znalazłem gotowy program napisany w bascomie ale na Atmega128 (oczywiście obsługa wyświetlacza na innych portach). Przerobiłem ten program by porty zgadzały się, ale lepiej się znam na asemblerze niż bascomie może właśnie dlatego nie chce mi nadal ten wyświetlacz odpalić. Zmodyfikowałem też schemat, zlikwidowałem diodę D1( teoretycznie tam jej nie powinno być w ogóle ale ja ją zastosowałem ze względu na potrzebny mi spadek napięcia. Stabilizator 3.3V dawał 3.5V i bałem sie, że uwale wyświetlacz) oraz odpiąłem linie LED+ i LED- (podświetlanie). Niestety nadal nic :cry:
  • #3
    morph13
    Level 25  
    Podświetlanie nie ma wpływu na init i pracę sterownika matrycy a przynajmniej widać efekty....... jeśli wystartuje.
  • #4
    wladza13
    Level 14  
    Wiem, że nie ma wpływu ale zasilanie podświetlania tego wyświetlacza wynosi 6.4V a nie 5V to też odłączyłem te linie bo i tak nic to nie dawało. w pewnym momencie myślałem, że spaliłem ten wyświetlacz odłączając diodę D1, ale sprawdziłem go dzisiaj w siostry telefonie i działa. Nadal próbuje się z nim uporać.
  • SterControl
  • #6
    wladza13
    Level 14  
    A więc tak. morph13 dzięki ale sieć w poszukiwaniu pomocy już przeszukałem(znajome linki) , :| ale nie oto mi chodzi udało mi sie uruchomić ten wyświetlacz :D błąd był po stronie schematu. Ostatecznie wygląda to tak.
    Inicjacja wyświetlacza od Nokii 6100 za pomocą Atmega8. Jak?


    Przed zamknięciem tematu mam ostatnie pytanie. Czy może mi ktoś wyjaśnić pewną niejasność. Idee standardu I2C znam:
    Master wysyła sygnał startu po czym wysyłany jest adres urządzenia (7 bitowy) potem bit kierunku transferu R/W i 9 bit bajtu od Slave Ack(potwierdzenie) następnie 8 bitów danych i znów bit potwierdzenia Ack itd.
    tak jest w przypadku np: komunikacji z eeprom a co z wyświetlaczem bo w kości eeprom adres urządzenia zazwyczaj ustalamy sami zwierając odpowiednie piny np: z masą. a przecież takowych pinów wyświetlacz nie ma a więc jaki trzeba wysłać adres do wyświetlacza? Można pominąć podawanie adresu i przejść do wysyłania danych albo przynajmniej pominąć tylko podanie adresu?
    Może komuś sie to przyda schemat i program (co prawda program miał byś w asemblerze a jest w bascomie ale dobre i to :D )
  • Helpful post
    #7
    morph13
    Level 25  
    W sterowaniu matryc LCD (konkretnie tego typu) zaimplementowany standard transmisji 2 przewodowej (są i 3 przewodpwe) to nie jest dokładny odpowiednik I2C. Dla przykłądu dla 3-przewodowej jest dodatkowy pin D/C do sterowania w 2-przewodowej ten stan jest wprowadzany jako dodatkowy bit podczas transmisji (zazwyczaj 1 lub 2 licząc od MSB).

    Oczywiście są też i matryce (zazwyczaj monochromatyczne) sterowane przez typowy I2C, ale to już inna historia i napewno inny producent LCD-ka i inny tlefon w którym to zastosowano (stary ericsson) :-).

    Powodzenia w testach
  • #8
    wladza13
    Level 14  
    Czyli jednym słowem nie podaje sie adresu.
    Dzięki morph13 :D.
    Temat uważam za zamknięty.
  • #9
    M. S.
    Level 34  
    Ze schematu wynika, że wyświetlacz zasilany jest napięciem niższym niż wysterowuje się jego końcówki. Chciałem zatem zapytać jak on to znosi?
  • #10
    wladza13
    Level 14  
    Sorki że tak późno odpowiadam. Szczerze nie wiem jak on to znosi, ale gdzieś przyuważyłem taki schemat i go wykorzystałem i działa :D.
  • #11
    wladza13
    Level 14  
    ugh123 po pierwsze czy dobrze pominąłeś nagłówek pliku bmp? Jeśli program jest brany ode mnie wiec problem leży właśnie po stronie tych współrzędnych o których Ci pisałem. Mając obraz i znając jego rozdzielczość musisz ten sam wymiar obrazka odwzorować na lcd. Mi też to nie udało się za pierwszym razem i czasem to była metoda prób i błędów.
  • #12
    ugh123
    Level 13  
    Kurcze nie wiem jak to jest z tym naglowkiem pliku , plik to ten co byl w paczce ktora wstawiles na forum w tym temacie Link Kod zywcem skopiowalem tylko zmienilem troszke poczatek i inicjacje karty wstawilem swoja a tak wyglada ten kod ktory nie bardzo dziala
    $regfile = "m32def.Dat"
    $crystal = 12000000
    $hwstack = 128
    $swstack = 64
    $framesize = 64
    $lib "LCD-EPSON_L2F50_C.LBX"
    Config Graphlcd = Color , Controlport = Portc , Cs = 2 , Rs = 0 , Scl = 3 , Sda = 4 , Reset = 1
    Const Black = 0                                             '&B00000000
    Const Brown = 136                                           '128
    Const Darkred = &B11000000                                  '192
    Const Red = &B11010000                                      '208
    Const Orange = &B11101000                                   '232
    Const Yellow = &B11111000                                   '248
    Const Darkgreen = &B00011000                                '41
    Const Green = &B00101001                                    '48
    Const Brightgreen = &B01111011                              '123 &B00011110
    Const Brightblue = &B00111111                               '63
    Const Blue = &B00100111                                     '39
    Const Darkblue = &B00000110                                 '6
    Const Violett = 143                                         '143
    Const White = 255                                           '255 &B1111111111111111
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    Config Portd.5 = Output
    Reset Portd.5
    Cls
    Waitms 500
    Dim Cyfra As Byte : Cyfra = 0
    Dim Podswietlanie As Byte : Podswietlanie = 0
    For Podswietlanie = 0 To 150 Step 5
    Waitms 25
    Pwm1b = Podswietlanie
    Next
    Cls
    Box(0 , 0) -(176 , 131) , White
    Wait 1
    
    Setfont Color8x8
    ' lcdat y , x, tekst , color tekstu , pod tekstem
    Lcdat 5 , 5 , "Loading . . ." , Black , White
    Wait 1
    Lcdat 15 , 5 , "AVR-DOS ver 5.5" , Orange , White
    Lcdat 25 , 5 , "Atmega 32 " , Black , White
    Lcdat 35 , 5 , "Clock 12 Mhz" , Black , White
    Lcdat 45 , 5 , "Size of RAM 2Kb " , Black , White
    Lcdat 65 , 5 , "Please wait" , Black , White
    Sound Pinc.5 , 200 , 300
    Lcdat 75 , 5 , "Loading - " , Black , White
    
    For Cyfra = 0 To 100 Step 5
    Waitms 100
    Lcdat 75 , 86 , Cyfra ; " %" , Darkblue , White
    Next
    Lcdat 85 , 5 , "System OK" , Black , White
    
    Dim Pojemnosc As Long
    Dim Wolne As Long
    Dim Uzywane As Long
    Dim System As String * 5
    Dim Rozmiar As Long
    Dim Dlugosc As Long
    Dim Tekst As String * 15
    Dim A As Byte
    Dim B As Word
    Config Clock = Soft
    Enable Interrupts
    $include "Config_MMC.bas"
    $include "CONFIG_AVR-DOS.Bas"
    Spiinit
    B = Drivecheck()                                            'u mnie te drivechecki itp. nigdy nie dawały errora ale dałem, żeby było
    Gbdriveerror = Driveinit()
    B = Initfilesystem(1)
    If Gbfilesystem = 1 Then System = "FAT32" Else System = "FAT16"
    Pojemnosc = Disksize() \ 1000
    Wolne = Diskfree() \ 1000
    Uzywane = Pojemnosc - Wolne
    
    Lcdat 95 , 5 , "Info microSD" , Darkgreen , White
    
    Lcdat 105 , 5 , "Size : " ; Pojemnosc ; " MB" , Black , White
    Lcdat 115 , 5 , "Free : " ; Wolne ; " MB" , Black , White
    Lcdat 125 , 5 , "Used : " ; Uzywane ; " MB" , Black , White
    Lcdat 135 , 5 , "System - " ; System , Darkred , White
    Wait 2
    Dim A2 As Byte
    Dim C As Word
    Dim S As String * 30
    Dim Bg As Byte , Gr As Byte
    Dim Pozycja_1 As Long
    Dim Pozycja_2 As Long
    Dim Pozycja_3 As Long
    Dim W As Integer
    Dim Rr As Byte , Gg As Byte , Bb As Byte
    Dim Bgr As Word , Pom1 As Word
    Dim Ww As Integer
    Dim Dop As Byte
    
    Cls
    
    
    
    S = Dir( "1.bmp")
    
    Tu:
    
    Glcdcmd &H2A                                                'x
    Glcddata 1
    Glcddata 130
    
    Glcdcmd &H2B                                                'y
    Glcddata 1
    Glcddata 130
    
    
    
    Pozycja_1 = 52
    Pozycja_2 = 53
    Pozycja_3 = 54
    Dop = 0
    
    
    
    'zapisz dane
    
    Glcdcmd &H2C
    Open S For Binary As #1
    For Ww = 1 To 16900
    
    If Dop = 130 Then
    Pozycja_1 = Pozycja_1 + 2
    Pozycja_2 = Pozycja_2 + 2
    Pozycja_3 = Pozycja_3 + 2
    Dop = 0
    End If
    
    Get #1 , Bb , Pozycja_1
    Get #1 , Gg , Pozycja_2
    Get # 1 , Rr , Pozycja_3
    
    Bgr = 0
    Shift Rr , Right , 3
    Bgr = Rr
    Shift Gg , Right , 2
    Pom1 = Gg
    Shift Pom1 , Left , 5
    Bgr = Bgr Or Pom1
    Pom1 = 0
    Shift Bb , Right , 3
    Pom1 = Bb
    Shift Pom1 , Left , 11
    Bgr = Bgr Or Pom1
    
    Bg = High(bgr)
    Gr = Low(bgr)
    
    Glcddata Bg
    Glcddata Gr
    
    Pozycja_1 = Pozycja_1 + 3
    Pozycja_2 = Pozycja_2 + 3
    Pozycja_3 = Pozycja_3 + 3
    Incr Dop
    Next Ww
    Close #1
    
    
    
    End
    
    
    $include "color8x8.font"
    
  • #13
    wladza13
    Level 14  
    Widziałem, że ruszył temat dotyczący wyświetlacza o s65. Jak juz mówiłem nie znam obsługi i komend tego lcd, ale na moja logikę wydaje mi się że PCF8833 nie ma tych samych komend co lcd od S65.

    Quote:

    Glcdcmd &H2A 'x
    Glcddata 1
    Glcddata 130

    Glcdcmd &H2B 'y
    Glcddata 1
    Glcddata 130


    to jest ze specyfikacji pcf-a i tylko na niego to będzie działać. Nie wiem jakie są komendy i w jaki sposób ten wyświetlacz "pyta" o obszar wyświetlanej grafiki. A poza tym dobrze widać na zdjęciu ze szerokość obrazka nie idzie w parze z szerokością wyświetlacza (130 dla pcf8833 a 132 dla s65 ) tym bardziej że to grafika z mojej paczki. Przesuniecie widać to po tych charakterystycznych ukośnych liniach i "wystających" pikselach w ostatnim wierszu wyświetlanej grafiki.

    Na początek podaj link to noty twojego lcd. Stwórz grafikę w pancie 132x176 i zapisz z rozszerzeniem bmp.24. Mała uwaga dla pcf8833 mimo że w nocie jest 132x132 to poprawnie wyświetla 130x130.
  • #15
    Duch__
    Level 31  
    Tak analizuje ten kod odnośnie odczytu obrazka z SD i nie umiem wykminić jak zapuścić oglądanie zdjęć w pętli.

    Jakby ktoś mógł zakomentować co znaczą poszczególne linie:

    
    Open S For Binary As #1
    For Ww = 1 To 16900
    
    If Dop = 130 Then
    Pozycja_1 = Pozycja_1 + 2
    Pozycja_2 = Pozycja_2 + 2
    Pozycja_3 = Pozycja_3 + 2
    Dop = 0
    End If
    
    Get #1 , Bb , Pozycja_1
    Get #1 , Gg , Pozycja_2
    Get # 1 , Rr , Pozycja_3
    
    Bgr = 0
    Shift Rr , Right , 3
    Bgr = Rr
    Shift Gg , Right , 2
    Pom1 = Gg
    Shift Pom1 , Left , 5
    Bgr = Bgr Or Pom1
    Pom1 = 0
    Shift Bb , Right , 3
    Pom1 = Bb
    Shift Pom1 , Left , 11
    Bgr = Bgr Or Pom1
    
    Bg = High(bgr)
    Gr = Low(bgr)
    
    Glcddata Bg
    Glcddata Gr
    
    Pozycja_1 = Pozycja_1 + 3
    Pozycja_2 = Pozycja_2 + 3
    Pozycja_3 = Pozycja_3 + 3
    Incr Dop
    Next Ww
    Close #1
    
  • #16
    wladza13
    Level 14  
    Chce dodać że ten program mimo, że nie jest długi i profesjonalnie napisany to wymagał niezłego wysiłku z mojej strony żeby zadziałał. Dużo studiowałem na temat formatu pliku bmp i tu jest cały klucz sukcesu. Tego czego nie dowiedziałem się od nikogo... sam rozpracowałem i przekazuje innym by nie musieli się tyle męczyć i poddawać z projektem bo "coś nie działa" Sam nie znalazłem gotowej konwersji z 24 bit na 12bit bo tak naprawdę to nie 16bit tylko 6:5:6 czyli BBBBBBGGGGGRRRRRR. Kto zaglądał do pdf-a pcf8833 powinien wiedzieć o co chodzi. Postaram się pomoc w miarę moich możliwość, ale z doświadczeni wiem że czasem pomęczyć się samemu jest dobrze i proponuje poczytać o strukturze pliku bmp tym którzy są zainteresowani tematem wyświetlania zdjęć na różnych wyświetlaczach.
    A wiec moje wypociny bo musiałem sobie co nieco przypomnieć. Starałem się wyjaśnić w miarę moich umiejętności korepetytorskich.

    
    Pozycja_1 = 52    'nadanie wartości początkowej zmiennej Pozycja_1 
                      '(pominięcie nagłówka pliku bmp i czytanie danych)  
                      'kolor B. Tu zaczynają się dane
    Pozycja_2 = 53    'nadanie wartości początkowej zmiennej pozycja_2  
                      '(pominięcie nagłówka pliku bmp i czytanie danych)kolor G
    Pozycja_3 = 54    'nadanie wartości początkowej zmiennej pozycja_3  
                      '(pominięcie nagłówka pliku bmp i czytanie danych)kolor R
    Dop = 0           'Dop = 0  dop jest to dopełnienie czyli  bit(bity) 
                      'wypełnienia po bitach koloru: BBBBBBBB GGGGGGGG RRRRRRRR xx....
                      'występuje tylko na końcu wiersza danych obrazu po to by
                      ' wiersz danych był wielokrotnoscia 4 wiec 
                      'trzeba go uwzglednic w czytaniu pikseli zeby nie wyszly 
                      'problemy z wyświetlanym zdjeciem
                                   
    
    
    'zapisz dane
    
    Glcdcmd &H2C
    Open S For Binary As #1      ' plik zostanie otwarty w trybie w którym 
                                 'można odczytywać i zapisywać dane binarne.
    
    
    For Ww = 1 To 16900          '  130 x 130 = 16900 petla zostanie wykonana tyle razy.
                                 ' Czyli tyle ile pikseli zostanie wyswietlonych
                                    
    If Dop = 130 Then            'dla 130(szerokosc) 130 : 4 = 32,5 wiec po 130 pikselach
                                 ' (a 390 bitach bo 130 x 3) wystapią 2 bity dopelnienia
    Pozycja_1 = Pozycja_1 + 2    'tutaj jest tego uwzglednienie i przesuniecie czytanych 
                                 'danych by nie czytac bitów dopełnienia jako pikseli 
    Pozycja_2 = Pozycja_2 + 2    'nie umiem tego bardziej wyjasnic. Sam długo nad tym
                                 ' pracowałem zeby to pojąć i użyc w praktyce
    Pozycja_3 = Pozycja_3 + 2   
    Dop = 0
    End If
    
    Get #1 , Bb , Pozycja_1       ' odczytuje dane z otwartego pliku od pozycji Pozycja_1 
                                  'i zostają zapisane  do zmiennej Bb
    Get #1 , Gg , Pozycja_2       ' odczytuje dane z otwartego pliku od pozycji Pozycja_2 
                                  'i zostają zapisane  do zmiennej Gb
    Get # 1 , Rr , Pozycja_3      ' odczytuje dane z otwartego pliku od pozycji Pozycja_3 
                                  'i zostaja zapisane  do zmiennej Rr
    
    '*************************************************************************************
    'początek konwersji
    
    Bgr = 0                          'zmienna typu word w na której odbędzie się konwersja
    Shift Rr , Right , 3             ' przesunięcie zmiennej Rr o 3 w prawo
    Bgr = Rr                         ' zmienna Rr do Bgr
    Shift Gg , Right , 2             ' przesunięcie zmiennej Gg w prawo o 2
    Pom1 = Gg                        ' zmienna Gg do zmiennej pomocniczej Pom1
    Shift Pom1 , Left , 5            ' przesuniecie zmiennej  Pom1 w lewo o 5
    Bgr = Bgr Or Pom1                ' suma zmiennej Bgr i Pom1 do zmiennej Bgr
    Pom1 = 0                         ' Pom1=0
    Shift Bb , Right , 3             'przesunięcie zmiennej Bb w prawo o 3
    Pom1 = Bb                        'Pom1= Bb
    Shift Pom1 , Left , 11           ' przesuniecie zmiennej pom1 w lewo o 11
    Bgr = Bgr Or Pom1                'suma zmiennej Bgr i Pom1 do zmiennej Bgr
    
    Bg = High(bgr)                   'starsza część Bgr do Bg
    Gr = Low(bgr)                    'młodsza częśc Bgr do Gr
    '****************************************************************************** 
    'koniec konwersji 24bit na 12bit BBBBBBBB GGGGGGGG RRRRRRRR = BBBBBBGG GGGRRRRR                
    
    Glcddata Bg                      ' dane ze zmiennej Bg na lcd                     
    Glcddata Gr                       'dane ze zmiennej Gr na lcd
    
    Pozycja_1 = Pozycja_1 + 3          'czytanie nowych pikseli B
    Pozycja_2 = Pozycja_2 + 3          'czytanie nowych pikseli G
    Pozycja_3 = Pozycja_3 + 3          'czytanie nowych pikseli R
    Incr Dop                           'zwiększ o 1 Dop
    Next Ww                            'wiadomo
    Close #1                           'zamknięcie otwartego kanału
    
  • #17
    Duch__
    Level 31  
    A orientuje się ktoś z was jak odczytać rozdzielczość zdjęcia gdyby była inna niż 130x130 np. 100x130 w celu wyśrodkowania zdjęcia?
  • #18
    dondu
    Moderator on vacation ...
    Podłączę się do tematu.

    Mam ten wyświetlacz z zieloną płytką czyli prawdopodobnie sterownikiem Epsona.

    Podczas kompilacji kodu przykładu obsługi wyświetlacza przygotowanego (według opisu) dla ATMega8 na stronie: http://www.sparkfun.com/products/569
    a konkretnie (drugi link na dole strony w sekcji Documents):
    http://www.sparkfun.com/datasheets/LCD/SFE_lcd_driver_c.zip

    pojawiają mi się 2 błędy (zaznaczyłem je także na kodzie poniżej) :

    
    ../main.c:20: error: 'CLKPR' undeclared (first use in this function)
    ../main.c:38: warning: pointer targets in passing argument 3 of 'putstr_pgm' differ in signedness


    To zawartość pliku main.c:
    
    /*
     * Basic Nokia 6100 LCD example. Licenced under the GNU GPL.
     */
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/pgmspace.h>
    #include <util/delay.h>
    #include <stdbool.h>
    #include <stdint.h>
    #include <stddef.h>
    
    #include "lcd_driver.h"
    
    const uint8_t hello_world[] PROGMEM = "Hello World";
    
    int main()
    {
    	// Setup the faster clock speed
    	CLKPR=0x80;                        <<<<<<----------- BŁĄD 1
    	CLKPR=0x00;
    
    	// Enable the IO lines
    	PORTD |= 0xE0;
    	DDRD = 0xE0;	
    	
    	// LCD setup
    	init_lcd();
    
    	// Setup the LCD brightness - these defaults seem to work well for
    	// the new LCD batch
    	lcd_set_brightness_parms(25, 3);
    
    	// Fill screen with Green color
    	fillrect(0, 0, 130, 130, 0x1C);
    
    	// Standard greeting
    	putstr_pgm(10, 7, hello_world, 0x00, 0x1C);         <<<<<<----------- BŁĄD 2
    
    	// Do nothing... forever
    	while (1);
    	return 0;
    }
    
    


    Pierwszy błąd dotyczy CLKPR który nie występuje w ATMega8 - z komentarza w kodzie wynika, że to ustawianie maksymalnej prędkości, ale nie wiem czego - procesora? Domyślam się że autor pozostawił coś podczas przerabiania kodu z innego procesora. Czy mam to usunąć?


    Drugi warninng - tu kompletnie nie wiem o co biega. Proszę o podpowiedź.

    Dodano po 6 [minuty]:

    I pytanie dodatkowe o rezystorki. ATMega zasilam 5V a LCD 3,3 poprzez dzielnik rezystorowy.
    Dodatkowo umieściłem rezystory na liniach sygnałowych do LCD.
    na schemacie kolegi wladza13 (powyżej) są 470Ω, ja dałem 330Ω bo nie mam innych pod ręką. Czy to bezpieczne?
    Nie dałem natomiast rezystorów podciągających 4,kΩ - czy one są niezbędne?
  • #19
    wladza13
    Level 14  
    Co do schematu na początku tematu to były moje początki z tym lcd i uwaga taka że ten schemat a dokładnie dzielnik jest zły aczkolwiek u mnie działało i nic się lcd nie stało jednak nie polecam takiego zastawu rezystorów. Rezystor do 5V niech będzie 4,7K ale ten drugi powinien być ok 2,4K. Co do obsługi w C to nie pomogę bo nie znam C.

    Dodano po 5 [minuty]:

    Duch__ wrote:
    A orientuje się ktoś z was jak odczytać rozdzielczość zdjęcia gdyby była inna niż 130x130 np. 100x130 w celu wyśrodkowania zdjęcia?


    Nie za bardzo rozumiem.
  • #20
    Duch__
    Level 31  
    Wyświetlacz wyświetla zdjęcia w formacie 1:1 a aparatu robią zdjęcia w formacie 4:3. Spróbuj wrzucić na SD zdjęcia o formacie 4:3 czyli o rozdzielczości np. 130 na 97 i zobacz jak są wyświetlane. Chodzi mi o to żeby wyśrodkować zdjęcie.
  • #21
    wladza13
    Level 14  
    Program napisany przeze mnie jest prosty i innej rozdzielczości niż 130x130 nie wyświetli poprawnie ponieważ nagłówek z informacjami o pliku jest pominięty. Oczywiście można rozbudować by czytało różne rozdzielczości. Mój program to tylko baza by do dalszych programów.
  • #22
    Duch__
    Level 31  
    Zastanawiam się czy dało by radę tak zrobić tablicę z 16900 punktów, które by się wczytywały do pamięci RAM procka z karty SD i dopiero jakby cała ta tablica została wypełniona to wrzucać ją na ekran. Można by wtedy spróbować uniknąć tego efektu ładowania zdjęcia na wyświetlacz (mowa o cyfrowej ramce).
  • #23
    wladza13
    Level 14  
    Nie wiem czy da się utworzyć taka ramkę w pamięci procka, ale wiem że można to obejść w inny sposób a efekt taki sam a chyba nawet prostszym sposobem. Wystarczy zamienić kolejnością komendy ewentualnie jakaś dodać. Chodzi o to że grafika jest wysyłana do pamięci LCD (ma jej przecież 209 kbit) na wyłączonej matrycy a gdy cały obraz zostanie załadowany należy włączyć lcd bodajże komenda dispaly on (29H), ale nie powiem jak to dokładnie powinno być wiem, że tak na pewno się da bo dawno temu przypadkiem na to wpadłem.

    I działa. Sprawdziłem na szybko. Tylko w momencie ładowania danych obraz jest wyłączony (czarny) ale myślę że i tu da się coś na to poradzić.
  • #24
    pier
    Level 24  
    Kolego Ugh123 aby wyświetlić obrazek na lcd od siemens-a należy użyć komendy:
    Showpic x , y , obrazek

    a dalej

    obrazek:
    $bgf "obrazek.bgc"

    Komendy od wyświetlacza z nokii są inne.
    Ale jak wiadomo biblioteka do wyświetlacza ze sterownikiem L2F50 jest skopana i nie wyświetla dobrze grafiki. Więc aby zobaczyć obrazki na takim lcd trzeba użyć takiego ze sterownikiem LS020...
    Czasami uda się i na tym L2F50 coś wyświetlić ale trzeba popaść ze współrzędnymi i rozmiarem obrazka ale na pewno nie na całym ekranie.
    Ale wiem z doświadczenia że nawet ten LS020 nie pokazuje dobrze zdjęć tylko proste grafiki. Chyba ze ja źle je przerabiam.
  • #26
    pier
    Level 24  
    Cy LS020... czy L2F50 nie ma różnicy w obsłudze tylko bibliotekę trzeba włączyć odpowiednią.
    Tu jest kod:
    
    $hwstack = 128
    $swstack = 128
    $framesize = 128
    
    $regfile = "m16def.Dat"
    $crystal = 16000000
    $baud = 19200
    
    '$lib "LCD-EPSONmy.LIB"
    '$lib "lcd-pcf8833my.lib"                                    'Nokia 6100 color display 
    '$lib "LCD-SIEMENS_S65_LS020_C.LIB"                          'Siemens S65 LS020 color display support
    $lib "LCD-EPSON_L2F50_C.LBX"                                'Siemens S65 L2F50 color display support
    
    Config Graphlcd = Color , Controlport = Portc , Cs = 5 , Rs = 7 , Scl = 4 , Sda = 3 , Reset = 6
    Config Timer1 = Pwm , Pwm = 10 , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect
    
    
    Dim N As Byte
    Dim Color As Byte
    Dim Colorbac As Byte
    Const Black = 0                                             '&B00000000
    Const Brown = 136                                           '128
    Const Darkred = &B11000000                                  '192
    Const Red = &B11010000                                      '208
    Const Orange = &B11101000                                   '232
    Const Yellow = &B11111000                                   '248
    Const Darkgreen = &B00011000                                '41
    Const Green = &B00101001                                    '48
    Const Brightgreen = &B01111011                              '123 &B00011110
    Const Brightblue = &B00111111                               '63
    Const Blue = &B00100111                                     '39
    Const Darkblue = &B00000110                                 '6
    Const Violett = 143                                         '143
    Const White = 255                                           '255 &B1111111111111111
    '
    Const áĺëűé = &HFF
    Const ÷¸đíűé = &H00
    Dim N1 As Byte
    Cls
    
    For N = 0 To 120
    Circle(88 , 65) , N , Brightblue
    If N > 20 Then
    N1 = N - 20
    Circle(88 , 65) , N1 , Green
    End If
    Next N
    
    Wait 2
    
    
    
    Color = áĺëűé
    Colorbac = &HEF
    
    
    Pwm1a = 255
    Pset 32 , 110 , Red
    Wait 1
    Cls                                                         'clear the display
    Wait 1
    
    For Color = 0 To 127
    Line(color , 0) -(color , 65) , Color
    Next Color
    
    For Color = 128 To 255
    Colorbac = Color - 128
    Line(colorbac , 66) -(colorbac , 131) , Color
    Next Color
    
    Wait 2
    
    
    
    Box(0 , 0) -(176 , 131) , áĺëűé
    Wait 2
    
    Setfont Color8x8
    
    For N = 0 To 22
    Color = N
    Colorbac = N * 8
    Lcdat Colorbac , 0 , Color , Color , áĺëűé
    Next N
    For N = 0 To 22
    Color = N + 22
    Colorbac = N * 8
    Lcdat Colorbac , 16 , Color , Color , áĺëűé
    Next N
    For N = 0 To 22
    Color = N + 44
    Colorbac = N * 8
    Lcdat Colorbac , 32 , Color , Color , áĺëűé
    Next N
    For N = 0 To 22
    Color = N + 66
    Colorbac = N * 8
    Lcdat Colorbac , 48 , Color , Color , áĺëűé
    Next N
    For N = 0 To 22
    Color = N + 88
    Colorbac = N * 8
    Lcdat Colorbac , 64 , Color , Color , áĺëűé
    Next N
    For N = 0 To 22
    Color = N + 110
    Colorbac = N * 8
    Lcdat Colorbac , 88 , Color , Color , áĺëűé
    Next N
    For N = 0 To 22
    Color = N + 132
    Colorbac = N * 8
    Lcdat Colorbac , 112 , Color , Color , áĺëűé
    Next N
    
    
    
    Wait 5
    
    For N = 0 To 22
    Color = 22 * 8
    Color = N + Color
    Colorbac = N * 8
    Lcdat Colorbac , 0 , Color , Color , áĺëűé
    Next N
    For N = 0 To 22
    Color = 22 * 9
    Color = N + Color
    Colorbac = N * 8
    Lcdat Colorbac , 24 , Color , Color , áĺëűé
    Next N
    For N = 0 To 22
    Color = 22 * 10
    Color = N + Color
    Colorbac = N * 8
    Lcdat Colorbac , 48 , Color , Color , áĺëűé
    Next N
    For N = 0 To 22
    Color = 22 * 11
    Color = N + Color
    Colorbac = N * 8
    Lcdat Colorbac , 72 , Color , Color , áĺëűé
    Next N
    
    Line(10 , 10) -(170 , 130) , Color
    Line(110 , 1) -(1 , 110) , Colorbac
    Pset 32 , 110 , Color
    Waitms 1000
    Line(65 , 0) -(65 , 130) , Black
    Line(10 , 40) -(30 , 40) , White
    Wait 2
    
    
    Showpic 0 , 1 , Plaatje                                     'ęŕđňčíęŕ
    Wait 2
    '
    Setfont Color8x8
    Lcdat 0 , 0 , "Sergey Chernikov" , Red , Yellow
    Wait 1
    
    Waitms 1000
    
    'select a font
    Setfont Color16x16
    'and show some text
    Lcdat 8 , 0 , "12345678" , Blue , Yellow
    Wait 2
    
    Do
    
    Waitms 1000
    Circle(30 , 30) , 20 , Blue
    Waitms 100
    Circle(30 , 30) , 21 , Yellow
    Waitms 100
    Circle(30 , 30) , 22 , Blue
    Waitms 100
    Circle(30 , 30) , 23 , Yellow
    Waitms 100
    Circle(30 , 30) , 24 , Blue
    Waitms 100
    Circle(30 , 30) , 25 , Yellow
    Waitms 100
    Circle(30 , 30) , 26 , Blue
    Waitms 1000
    '
    'make a box
    Box(1 , 1) -(131 , 131) , áĺëűé
    Waitms 500
    Box(1 , 1) -(131 , 131) , Yellow
    Waitms 500
    Box(1 , 1) -(131 , 131) , Red
    Waitms 500
    'Box(1 , 1) -(131 , 131) , 43981
    Waitms 500
    
    Box(0 , 0) -(10 , 131) , Black
    'Waitms 100
    Box(11 , 0) -(20 , 131) , Brown
    'Waitms 100
    Box(21 , 0) -(30 , 131) , Darkred
    'Waitms 100
    Box(31 , 0) -(40 , 131) , Red
    'Waitms 100
    Box(41 , 0) -(50 , 171) , Orange
    'Waitms 100
    Box(51 , 0) -(60 , 131) , Yellow
    'Waitms 100
    Box(61 , 0) -(70 , 131) , Brightgreen
    'Waitms 100
    Box(71 , 0) -(80 , 131) , Green
    'Waitms 100
    Box(81 , 0) -(90 , 131) , Darkgreen
    'Waitms 100
    Box(91 , 0) -(100 , 131) , Brightblue
    'Waitms 100
    Box(101 , 0) -(110 , 131) , Blue
    'Waitms 100
    Box(111 , 0) -(120 , 131) , Darkblue
    'Waitms 100
    Box(121 , 0) -(130 , 131) , Violett
    'Waitms 100
    Box(131 , 0) -(140 , 131) , White
    Wait 10
    
    Box(0 , 0) -(175 , 131) , Brightblue
    Box(10 , 10) -(165 , 121) , Green
    Box(12 , 12) -(163 , 119) , Brightblue
    Wait 2
    Line(12 , 12) -(163 , 119) , Red
    Line(11 , 120) -(164 , 11) , Red
    Wait 2
    Cls
    Box(15 , 20) -(170 , 130) , Red
    Wait 2
    Cls
    
    Box(30 , 105) -(40 , 115) , Green
    Wait 1
    'set some pixels
    Pset 32 , 110 , White
    Pset 38 , 110 , White
    Pset 35 , 112 , Blue
    Wait 2
    Pset 35 , 112 , Blue
    Cls
    Wait 1
    Loop
    End
    
    
    
    Plaatje:
    $bgf "mcse.bgc"
    
    
    $include "color8x8.font"
    $include "color16x16.font"