Grafikus LCD

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A VB tippek - a topic keveredés elkerülése miatt:
http://avr.tavir.hu/modules.php?name=Fo ... opic&t=236
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

és az én kérdésem arról tudsz valamit mert sajna nem tudok ennlkül tovább lépni!
csak egy minta példa kéne hogy megértsem a működésést és már menen s az egész!
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

Szereztem egy másik kijelző ennek 4 vezetékes analógtouch fóliája van ami már nem okoz problémát de !

Itt nem tudom hogyan definiááljam a kijelzőt!
hogyan vezéreljem a bascomba!


Viszont ezt kedvezményes 15.000 ft-érttudom beszerezni és 320*240 -es

Ami azért nagyon előnyös!

a kijelző adatlapja:

Kód: Egész kijelölése

http://www.datasheetarchive.com/crossreference/EW32F62NMW.html
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az eredeti kijelzőhöz (kontaktellenállás) alapú 3*5-s gombra kód:

Kód: Egész kijelölése

$sim
$regfile = "m16def.dat"
$crystal = 16000000
$baud = 19200


Config Pina.1 = Input                                       ' X1
Config Pina.2 = Input                                       '   X2
Config Pina.3 = Input                                       '     X3
Config Pina.4 = Input                                       '       X4
Config Pina.5 = Input                                       '         X5

X1 Alias Pina.1
X2 Alias Pina.2
X3 Alias Pina.3
X4 Alias Pina.4
X5 Alias Pina.5

Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output

Y1 Alias Portb.1
Y2 Alias Portb.2
Y3 Alias Portb.3

Y1 = 0
Y2 = 0
Y3 = 0

Dim Y As Byte
Dim Eredmeny As Byte


'matrix
'   X1 X2 X3 X4 X5
'Y1  5  6  7  8  9
'Y2 10 11 12 13 14
'Y3 15 16 17 18 19


Do
Eredmeny = 0
For Y = 1 To 3                                              'Y vonal magasra
   If Y = 1 Then
      Y1 = 1
      Y2 = 0
      Y3 = 0
   End If

   If Y = 2 Then
      Y1 = 0
      Y2 = 1
      Y3 = 0
   End If

   If Y = 3 Then
      Y1 = 0
      Y2 = 0
      Y3 = 1
   End If


   'Melyik X -t Nyomtam Meg?
   If X1 = 1 Then
      Eredmeny = Y * 5
      Eredmeny = Eredmeny + 0
      Exit For
   End If

   If X2 = 1 Then
      Eredmeny = Y * 5
      Eredmeny = Eredmeny + 1
      Exit For
   End If

   If X3 = 1 Then
      Eredmeny = Y * 5
      Eredmeny = Eredmeny + 2
      Exit For
   End If


   If X4 = 1 Then
      Eredmeny = Y * 5
      Eredmeny = Eredmeny + 3
      Exit For
   End If

   If X4 = 1 Then
      Eredmeny = Y * 5
      Eredmeny = Eredmeny + 4
      Exit For
   End If
Next Y

If Eredmeny > 0 Then Print "gombkod:" ; Eredmeny
Wait 1
Loop
Kijelző adatlap:
http://www.lcd-module.de/deu/pdf/grafik/dip128-6.pdf

Fontos: A kontakt 1-be húzza a kijelzőt! ha netán invertálni kell, akkor a kód átírását jelenti... a bemeneti láb nem lebeghet bizonytalan potenciálon!
A kontektellenállás 300R...10k lehet!
max. 10mA folyhat a csatlakozókon.

A prellt meg kell oldani. azza ha 2x ugynaz az eredmény, akkor fogadd el a gombot megnyomottnak. 2 beolvasás közt 10ms prell esetén 20-30 msec-t várj!
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

Végre mag van a grafikus kijelzőnk!!!

320*240 sed1335 chip van rajta Kék fehér.

Csak a sajna sehogy se akaja az igazságot! próbáltama gyári sed-es mintaprogit ami a bascomba van de nem jó!

Valami mintaprogit nem tudnátok adni elég ha egy betűt ki írna már utánna nem lenne vele több gondom!
Avatar
TyuTyu
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2005. június 5. vasárnap, 6:00

Hozzászólás Szerző: TyuTyu »

szovhoz írta:Végre mag van a grafikus kijelzőnk!!!

320*240 sed1335 chip van rajta Kék fehér.

Csak a sajna sehogy se akaja az igazságot! próbáltama gyári sed-es mintaprogit ami a bascomba van de nem jó!

Valami mintaprogit nem tudnátok adni elég ha egy betűt ki írna már utánna nem lenne vele több gondom!
emlekeim szerint a bascom helybol nem tamogatja ezt a felbontast.
meglesni: help

TyuTyu
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A Bascom byte alapon tárol adatokat a kijelzőhöz. Így nem tudod a teljes területet megcímezni.
Azzaz 256x256-os kijelző a max.


A következő valamelyik verzióban tervezik a nagyobbak támogatását.
De: a SED parancskészlete ismert, így SK is meg lehet írni....
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

nekem egy próba progi kellen csak! a neten láttam párat de nem működtek!


ezt találtam már az én procimra írtam de nem látokakijelsőn semmit se!!!!
A kijelző adatlapja

http://www.bolymin.com.tw/Doc/BG320240F ... VER01.zip

Kód: Egész kijelölése


$regfile = "m16def.DAT"
$crystal = 8000000
$baud = 19200

Ddrd = $ff
Portb = 255
Ddrc = $ff
Portc = 255

Lcd_io_a0 Alias Portc.4                                     ' SED A0 (C/D)
Lcd_io_cs Alias Portc.2                                     ' SED /CS
Lcd_io_wr Alias Portc.5                                     ' SED /WR
Lcd_io_rd Alias Portc.6                                     ' SED /RD
Lcd_io_out Alias Portb                                      ' SED 8 bit data
Lcd_io_dir Alias Ddrb
Lcd_io_in Alias Pinb


Reset Lcd_io_cs

Declare Sub Lcd_send_cmd(byval Value As Byte)
Declare Sub Lcd_send_data(byval Value As Byte)
Declare Sub Lcd_init()
Declare Sub Busyflag()
Declare Sub Lcd_clear_graphics()
Declare Sub Lcd_write_char(byval Char As Byte)

Const Lcd_graph_addr = $04b0
Dim Lcd_pixel_value As Bit
Dim Lcd_x As Word
Dim Lcd_y As Word
Dim Pix_x As Word
Dim Pix_y As Word
Dim Lcd_bit As Byte
Dim Pix_addr As Word
Dim Lcd_addr_lo As Byte
Dim Lcd_addr_hi As Byte
Dim Lcd_data As Byte

Dim Save_a0 As Bit
Dim Save_rd As Bit
Dim Save_wr As Bit
Dim Save_cs As Bit
Dim Save_dir As Byte

Dim Test_x As Integer
Dim Test_y As Integer
Dim Limit As Byte


Call Lcd_init()                                             'SED Initialisieren...
Call Lcd_clear_graphics()                                   '... und Display löschen


Lcd_x = 1                                                   'Koordinaten
Lcd_y = 1

Lcd_pixel_value = 1                                         '1=Pixel setzen  /  0=Pixel löschen



'****************[Hauptschleife]*********************
'*** erzeugt "wilde" linien zur Demonstration ;-) ***
'****************************************************
Mainloop:

Limit = Rnd(100)
Limit = Limit + 5

Null:

Do
Test_x = Rnd(limit)
Lcd_x = Lcd_x + 1
If Lcd_x > 318 Then Goto Zwei
Gosub Lcd_write_pixel
Waitms 100
Loop


Zwei:
Goto Mainloop



'*********************************************************
'*** Unterprogramm zum Senden von Kommandos an den SED ***
'*********************************************************
Sub Lcd_send_cmd(byval Value As Byte)
 Call Busyflag                                              'abfrage status-bit
   Set Lcd_io_a0
   Lcd_io_out = Value
   Reset Lcd_io_wr
   ! nop
   Set Lcd_io_wr
   Reset Lcd_io_a0
End Sub



'*****************************************************
'*** Unterprogramm zum Senden von Daten an den SED ***
'*****************************************************
Sub Lcd_send_data(byval Value As Byte)
 Call Busyflag                                              'abfrage status-bit
   Reset Lcd_io_a0
   Lcd_io_out = Value
   Reset Lcd_io_wr
   ! nop
   Set Lcd_io_wr
   Reset Lcd_io_a0
End Sub



'*******************************
'*** Initialisierung des SED ***
'*******************************
Sub Lcd_init()
   Waitms 10
   Call Lcd_send_cmd($40)                                   'initialize device and display
   Call Lcd_send_data($30)
   Call Lcd_send_data($87)
   Call Lcd_send_data($07)
   Call Lcd_send_data($27)
   Call Lcd_send_data($55)
   Call Lcd_send_data($ef)
   Call Lcd_send_data($28)
   Call Lcd_send_data($00)
   Call Lcd_send_cmd($44)                                   'set display start address and display regions
   Call Lcd_send_data($00)
   Call Lcd_send_data($00)
   Call Lcd_send_data($f0)
   Call Lcd_send_data($b0)
   Call Lcd_send_data($04)
   Call Lcd_send_data($f0)
   Call Lcd_send_cmd($4c)                                   'set direction of cursor movement
   Call Lcd_send_cmd($5a)                                   'set horizontal scroll position
   Call Lcd_send_data($00)
   Call Lcd_send_cmd($5b)                                   'set display overlay format
   Call Lcd_send_data($01)
   Call Lcd_send_cmd($59)                                   'disable display flashing
   Call Lcd_send_data($10)
   Call Lcd_send_cmd($5d)                                   'set cursor type
   Call Lcd_send_data($07)
   Call Lcd_send_data($87)
   Call Lcd_send_data($4c)
   Call Lcd_send_cmd($46)                                   'set cursor address
   Call Lcd_send_data($00)
   Call Lcd_send_data($00)
End Sub



'***********************
'*** Display löschen ***
'***********************
Sub Lcd_clear_graphics()
   Lcd_addr_lo = Low(lcd_graph_addr)
   Lcd_addr_hi = High(lcd_graph_addr)
   Call Lcd_send_cmd($46)                                   'set cursor address
   Call Lcd_send_data(lcd_addr_lo)
   Call Lcd_send_data(lcd_addr_hi)
   Call Lcd_send_cmd($4c)                                   'set direction of cursor movement
   Call Lcd_send_cmd($42)                                   'write to display memory
   For Lcd_y = 1 To 240
      For Lcd_x = 1 To 40
         Call Lcd_send_data($00)                            'speicher mit nullen überschreiben
      Next
   Next
End Sub



'**********************************************************
'***               Abfrage des Busy-Flags               ***
'*** !! MUSS NOCH VERBESSERT UND BESCHLEUNIGT WERDEN !! ***
'**********************************************************
Sub Busyflag()

Save_cs = Lcd_io_cs                                         'sicherung der steuerleitungen
Save_a0 = Lcd_io_a0
Save_rd = Lcd_io_rd
Save_wr = Lcd_io_wr
Save_dir = Lcd_io_dir

Lcd_io_dir = $00
Reset Lcd_io_a0
Reset Lcd_io_rd
Reset Lcd_io_cs
Set Lcd_io_wr

Do                                                          'warten bis der controller nicht mehr auf das RAM zugreift
Loop Until Pinb.6 = 1
Do
Loop Until Pinb.6 = 0                                       'VERBESSERN !!

Lcd_io_cs = Save_cs                                         'steuerleitungen wieder so setzen wie vorher
Lcd_io_a0 = Save_a0
Lcd_io_rd = Save_rd
Lcd_io_wr = Save_wr
Lcd_io_dir = Save_dir

End Sub




'****************************
'*** Pixel setzen/löschen ***
'****************************
Lcd_write_pixel:
   Pix_x = Lcd_x / 8
   Pix_y = Lcd_y * 40
   Pix_addr = Pix_y + Pix_x
   Pix_addr = Pix_addr + Lcd_graph_addr
   Lcd_addr_lo = Low(pix_addr)
   Lcd_addr_hi = High(pix_addr)
   Call Lcd_send_cmd($46)                                   'set cursor adress
   Call Lcd_send_data(lcd_addr_lo)
   Call Lcd_send_data(lcd_addr_hi)
   Call Lcd_send_cmd($43)                                   'read from display memory (da ja immer ein ganzes Byte
   Lcd_io_dir = $00                                         'gesendet werden muss, muss es vorher gelesen und verändert werden)
   Set Lcd_io_a0
   Reset Lcd_io_rd
   ! nop
   Lcd_data = Lcd_io_in
   Set Lcd_io_rd
   Reset Lcd_io_a0
   Lcd_io_dir = $ff
   Lcd_bit = Lcd_x Mod 8                                    'das zu setzende Bit in das Byte reinrechnen
   Lcd_bit = 7 - Lcd_bit
   Lcd_data.lcd_bit = Lcd_pixel_value
   Call Lcd_send_cmd($46)                                   'set cursor adress
   Call Lcd_send_data(lcd_addr_lo)
   Call Lcd_send_data(lcd_addr_hi)
   Call Lcd_send_cmd($42)                                   'write to display memory
   Call Lcd_send_data(lcd_data)
Return
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

kontraszt jó? lábkiosztás?

Az önteszt megjelenik?
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

kontrasztot 10k-os potival szabájozom az adatlapja alapján! az jó!

lábkiosztás is jó!

de önteszt az mi nem láttam ilyet!?
A kijelző jó zsír új még most jött a sos-tól!!

de a program jó volna?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az önteszt:
A képernyő felén aktív a pixel, a másik felén inaktív. azzaz fekete-zöldnél: baloldalt fekete, jobboldalt csak a háttérvilágítás látszik...
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

már egy pár kijelzőt kipróbáltam egyiknél sem volt ilyen önteszt!
mikor kellene ennek lemenni-e gondolom indulásnál!?
Nem lehet hogy olyan gyors hogy nem is látom?

De a kontraszt potival lehet teljesen kifehéríteni és full kékké tenni olyan közép állásba van!

Eddig nem volt ilyesmivel gondom!

de akkor ez a progi jó volna!?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Progi - így látatlanban, első olvasatban - jónak tűnik. Az öntesztet akkor csinálja (KS0108-as chip, 64x128 kijelző), amikor tápfeszt kap. És még nincsen inicilaizálva semmi...
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

nah végre beindul átdugdostuk a lábait és a kontrasztal játtszottam mire sikerült de megy a progi random rajzol vonalakat! nagyon jó! már csak egy kérdés mert nem akar mást írni hogy betűt számot hogy írjak bele ezzel a progival vagy képet?!!!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Azt kell biza leprogramoznod....
Válasz küldése