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

Dlaczego LCD z Nokii 3310 nie działa z SPI na innym porcie niż PORTB?

pmmisiek 23 Mar 2007 00:36 2019 4
REKLAMA
  • #1 3709128
    pmmisiek
    Poziom 15  
    Posty: 234
    Pomógł: 7
    Ocena: 4
    Witam.

    Tematy były podobne, przeczytałem ale nie znalazłem odpowiedzi.

    Problem jest taki że poniższy program wydaje się być ok a jednak nie działa jak należy - tzn wyświetlacz nic nie wyświetla, nawet nie robi się czarny, nie daje żadnych oznak życia . Program znalazłem w którymś poście i przerobiłem tak aby pasował do moich połączeń.

    Mam jeszcze pytania dotyczące SPI.
    We wszystkich napotkanych przykładach widzę, że nikt nie używa do komunikacji portu innego niż portb, nawet w przykładu spi soft. Czy można używać dowolnego portu?

    I jeszcze pytanie do sprzętowego spi - czy jeśli podłącze do pinów mosi miso oraz sck wyświetlacz to czy będę musiał go odpinać podczas programowania atmegi?

    LCD na pewno działa ponieważ steruje nim programem w którym procedura wysyłania danych do lcd została napisana od podstaw, ale chciałbym sprawdzić jak to się będzie odbywać poprzez SPI (chęć zdobycia umiejętności :))




    $regfile = "m32def.dat"
    $crystal = 4000000
    
    ' -------- konfiguracja SPI
    Config Portc = Output                                       'communication port to LCD
    Config Spi = Soft , Din = Portc.1 , Dout = Portc.3 , Ss = None , Clock = Portc.2
    
    
    Zasilanie Alias Portd.5
    
    
    
    config Portd.5 = Output
    
    ' --------  piny LCD
    'Sclk(2) Portc.2
    'Sdin(3) Portc.3
    'D / C(4) Portc.4
    'Sce(5) Portc.5
    'Reset(8) Portc.6
    
    ' ------- Zmienne globalne
    Dim Txloc As Byte , Tyloc As Byte , Yy As Byte , Xx As Byte , Tout As Byte
    
    ' ------- Stałe dla ustawien LCD
    Const Extcmd = &H21                                         'extended command mode
    Const Contrmid = &HAA                                       'LCD contract medium level(after Extcmd)
    Const Tempcomp2 = &H06                                      'temperature compensation (after Extcmd)
    Const Bias48 = &H13                                         'bias 1:48 for LCD (after Extcmd)
    Const Normcmd = &H20                                        'normal command mode
    Const Lcdinv = &H0D                                         'inverted LCD screen(after Normcmd)
    Const Lcdnorm = &H0C                                        'normal LCD screen(after Normcmd)
    Const Lcdxaddr0 = &H80                                      'set X addr of RAM to 0(after Normcmd)
    Const Lcdpdown = &H24                                       'LCD in power down mode
    Const Lcdact = &H20                                         'LCD in active mode
    
    ' ------- Deklaracje procedur
    Declare Sub Tcmd(byval Tlcdcmd As Byte)
    Declare Sub Tlcdinit
    Declare Sub Tcls
    Declare Sub Tgphloc(txglc As Byte , Tyglc As Byte)
    Declare Sub Tlocate(byval Txlc As Byte , Byval Tylc As Byte)
    Declare Sub Tprintf(byval Tstring As String)
    Declare Sub Tshowpic
    
    
    
    ' ------- Program Główny ----------------------------
    
    Tlcdinit
    
    Main_loop:
    
    Tcls
    'Tlocate 0 , 0
    'Tprintf "  EGYPT DEMO"
    'Tlocate 0 , 2
    'Restore Egypt
    'Tshowpic
    'Wait 5
    
    Tcls
    Tlocate 0 , 0
    Tprintf "abcdefghijklmnopqrstuvwxyz"
    Wait 1
    
    Tlocate 0 , 2
    Tprintf "ABCDEFGHIJKLMNPQRSTUVWXYZ"
    Wait 1
    
    Tlocate 0 , 4
    Tprintf "0123456789šćęłńó??żŁ??Ż^[]{}"
    Wait 5
    
    'Tcmd Lcdinv
    'Wait 5
    'Tcmd Lcdnorm
    'Wait 1
    
    End                                                         'end program
    
    
    ' ------ Tcmd(Tlcdcmd) -----     START
    Sub Tcmd(byval Tlcdcmd As Byte)
    Reset Portc.4                                               'command mode
    Spiout Tlcdcmd , 1
    Set Portc.4                                                 'data mode
    End Sub
    
    ' ------ Tlcdinit ------       START
    Sub Tlcdinit
    Spiinit
    Waitms 50
    Set Zasilanie
    Waitms 5                                                    'LCD enable
    Reset Portc.6
    Waitms 5                                                    'RESET LCD display
    Set Portc.6
    Set Portc.5                                                 '
    Tcmd Extcmd                                                 'look into
    Tcmd Contrmid                                               '"LCD commands constants"
    Tcmd Tempcomp2                                              'section
    Tcmd Bias48                                                 '
    Tcmd Normcmd                                                '
    Tcmd Lcdnorm                                                '
    Tcls                                                        '
    End Sub
    
     ' -------- Tcls -------        START
    Sub Tcls
    Local Tword As Word
    Tcmd Normcmd
    Tcmd Lcdnorm
    Tcmd Lcdxaddr0
    Tout = 0
    For Tword = 0 To 503                                        '84x6 times sends 0 to clear LCD
      Spiout Tout , 1
    Next
    End Sub
    
    ' -------- Tgphloc(Txglc , Tyglc) ---------         START
    Sub Tgphloc(txglc As Byte , Tyglc As Byte)
    Reset Portc.4                                               'command mode
    Tout = Tyglc + &H40                                         'sets 0-5 Y-addr of RAM
    Spiout Tout , 1
    Tout = Txglc * &H06                                         'sets 0-13 X-addr of RAM
    Tout = Tout + &H80
    Spiout Tout , 1
    Set Portc.4                                                 'data mode
    End Sub
    
    ' --------- Tlocate(Txloc, Tyloc) --------    START
    Sub Tlocate(byval Txlc As Byte , Byval Tylc As Byte)
    Txloc = Txlc
    Tyloc = Tylc
    Tgphloc Txloc , Tyloc
    End Sub
    
    ' --------- Tprintf(Tstring) --------    START
    Sub Tprintf(tstring As String)
    Local Tsub As Word , Tword As Word , Tchr As String * 1
    For Xx = 1 To Len(tstring)
     Tchr = Mid(tstring , Xx , 1)
     Select Case Tchr
      Case " " : Tsub = 0
      Case "a" : Tsub = 1
      Case "b" : Tsub = 2
      Case "c" : Tsub = 3
      Case "d" : Tsub = 4
      Case "e" : Tsub = 5
      Case "f" : Tsub = 6
      Case "g" : Tsub = 7
      Case "h" : Tsub = 8
      Case "i" : Tsub = 9
      Case "j" : Tsub = 10
      Case "k" : Tsub = 11
      Case "l" : Tsub = 12
      Case "m" : Tsub = 13
      Case "n" : Tsub = 14
      Case "o" : Tsub = 15
      Case "p" : Tsub = 16
      Case "q" : Tsub = 17
      Case "r" : Tsub = 18
      Case "s" : Tsub = 19
      Case "t" : Tsub = 20
      Case "u" : Tsub = 21
      Case "v" : Tsub = 22
      Case "w" : Tsub = 23
      Case "x" : Tsub = 24
      Case "y" : Tsub = 25
      Case "z" : Tsub = 26
      Case "A" : Tsub = 27
      Case "B" : Tsub = 28
      Case "C" : Tsub = 29
      Case "D" : Tsub = 30
      Case "E" : Tsub = 31
      Case "F" : Tsub = 32
      Case "G" : Tsub = 33
      Case "H" : Tsub = 34
      Case "I" : Tsub = 35
      Case "J" : Tsub = 36
      Case "K" : Tsub = 37
      Case "L" : Tsub = 38
      Case "M" : Tsub = 39
      Case "N" : Tsub = 40
      Case "O" : Tsub = 41
      Case "P" : Tsub = 42
      Case "Q" : Tsub = 43
      Case "R" : Tsub = 44
      Case "S" : Tsub = 45
      Case "T" : Tsub = 46
      Case "U" : Tsub = 47
      Case "V" : Tsub = 48
      Case "W" : Tsub = 49
      Case "X" : Tsub = 50
      Case "Y" : Tsub = 51
      Case "Z" : Tsub = 52
      Case "0" : Tsub = 53
      Case "1" : Tsub = 54
      Case "2" : Tsub = 55
      Case "3" : Tsub = 56
      Case "4" : Tsub = 57
      Case "5" : Tsub = 58
      Case "6" : Tsub = 59
      Case "7" : Tsub = 60
      Case "8" : Tsub = 61
      Case "9" : Tsub = 62
      Case "š" : Tsub = 63
      Case "ć" : Tsub = 64
      Case "ę" : Tsub = 65
      Case "ł" : Tsub = 66
      Case "ń" : Tsub = 67
      Case "ó" : Tsub = 68
      Case "?" : Tsub = 69
      Case "?" : Tsub = 70
      Case "ż" : Tsub = 71
      Case "Ł" : Tsub = 72
      Case "?" : Tsub = 73
      Case "?" : Tsub = 74
      Case "Ż" : Tsub = 75
      Case "^" : Tsub = 76
      Case "[" : Tsub = 77
      Case "]" : Tsub = 78
      Case "{" : Tsub = 79
      Case "}" : Tsub = 80
      Case Else : Goto Exit_case
     End Select
     Restore Ascii
     Set Portc.4
     Tsub = Tsub * 6
     If Tsub <> 0 Then
      For Tword = 1 To Tsub                                     'shift to character pointer
      Read Tout                                                 'Tsub times
      Next
     End If
      For Yy = 1 To 6                                           'printing character loop
      Read Tout : Spiout Tout , 1                               '6x8 bits
      Next
    Exit_case:
    Next
    End Sub
    
    '  ------- D A T A -------     START
    Ascii:
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H30 , &H4A , &H4A , &H52 , &H7C , &H00 , &H3F , &H48 , &H44 , &H44,
    Data &H38 , &H00 , &H38 , &H44 , &H44 , &H44 , &H28 , &H00 , &H38 , &H44 , &H44 , &H48 , &H7F , &H00 , &H38 , &H54,
    Data &H54 , &H54 , &H18 , &H00 , &H00 , &H04 , &H7E , &H05 , &H00 , &H00 , &H0C , &H52 , &H52 , &H4A , &H3C , &H00,
    Data &H7F , &H08 , &H04 , &H04 , &H78 , &H00 , &H00 , &H44 , &H7D , &H40 , &H00 , &H00 , &H00 , &H40 , &H44 , &H3D,
    Data &H00 , &H00 , &H7F , &H20 , &H10 , &H28 , &H44 , &H00 , &H00 , &H41 , &H7F , &H40 , &H00 , &H00 , &H7C , &H04,
    Data &H18 , &H04 , &H7C , &H00 , &H7C , &H08 , &H04 , &H04 , &H78 , &H00 , &H38 , &H44 , &H44 , &H44 , &H38 , &H00,
    Data &H7C , &H14 , &H24 , &H24 , &H18 , &H00 , &H18 , &H24 , &H24 , &H14 , &H7C , &H00 , &H7C , &H04 , &H04 , &H08,
    Data &H00 , &H00 , &H08 , &H54 , &H54 , &H54 , &H20 , &H00 , &H04 , &H3F , &H44 , &H40 , &H00 , &H00 , &H3C , &H40,
    Data &H40 , &H40 , &H3C , &H00 , &H1C , &H20 , &H40 , &H20 , &H1C , &H00 , &H3C , &H40 , &H30 , &H40 , &H3C , &H00,
    Data &H44 , &H28 , &H10 , &H28 , &H44 , &H00 , &H0C , &H50 , &H50 , &H48 , &H3C , &H00 , &H44 , &H64 , &H54 , &H4C,
    Data &H44 , &H00 , &H7C , &H12 , &H11 , &H12 , &H7C , &H00 , &H7F , &H49 , &H49 , &H49 , &H36 , &H00 , &H3E , &H41,
    Data &H41 , &H41 , &H22 , &H00 , &H7F , &H41 , &H41 , &H41 , &H3E , &H00 , &H7F , &H49 , &H49 , &H49 , &H41 , &H00,
    Data &H7F , &H09 , &H09 , &H09 , &H01 , &H00 , &H3E , &H41 , &H49 , &H49 , &H3A , &H00 , &H7F , &H08 , &H08 , &H08,
    Data &H7F , &H00 , &H00 , &H41 , &H7F , &H41 , &H00 , &H00 , &H20 , &H41 , &H41 , &H41 , &H3F , &H00 , &H7F , &H08,
    Data &H14 , &H22 , &H41 , &H00 , &H7F , &H40 , &H40 , &H40 , &H40 , &H00 , &H7F , &H02 , &H04 , &H02 , &H7F , &H00,
    Data &H7F , &H04 , &H08 , &H10 , &H7F , &H00 , &H3E , &H41 , &H41 , &H41 , &H3E , &H00 , &H7F , &H09 , &H09 , &H09,
    Data &H06 , &H00 , &H3E , &H41 , &H51 , &H61 , &H7E , &H00 , &H7F , &H09 , &H19 , &H29 , &H46 , &H00 , &H06 , &H49,
    Data &H49 , &H49 , &H30 , &H00 , &H01 , &H01 , &H7F , &H01 , &H01 , &H00 , &H3F , &H40 , &H40 , &H40 , &H3F , &H00,
    Data &H1F , &H20 , &H40 , &H20 , &H1F , &H00 , &H7F , &H20 , &H10 , &H20 , &H7F , &H00 , &H63 , &H14 , &H08 , &H14,
    Data &H63 , &H00 , &H03 , &H04 , &H78 , &H04 , &H03 , &H00 , &H61 , &H51 , &H49 , &H45 , &H43 , &H00 , &H3E , &H51,
    Data &H49 , &H45 , &H3E , &H00 , &H00 , &H42 , &H7F , &H40 , &H00 , &H00 , &H42 , &H61 , &H51 , &H49 , &H46 , &H00,
    Data &H22 , &H41 , &H49 , &H49 , &H36 , &H00 , &H18 , &H14 , &H12 , &H7F , &H10 , &H00 , &H27 , &H45 , &H45 , &H45,
    Data &H39 , &H00 , &H3E , &H49 , &H49 , &H49 , &H32 , &H00 , &H61 , &H11 , &H09 , &H05 , &H03 , &H00 , &H36 , &H49,
    Data &H49 , &H49 , &H36 , &H00 , &H26 , &H49 , &H49 , &H49 , &H3E , &H00 , &H30 , &H4A , &H4A , &HD2 , &H7C , &H00,
    Data &H38 , &H44 , &H46 , &H45 , &H28 , &H00 , &H38 , &H54 , &H54 , &HD4 , &H18 , &H00 , &H00 , &H49 , &H7F , &H44,
    Data &H00 , &H00 , &H7C , &H08 , &H06 , &H05 , &H78 , &H00 , &H38 , &H44 , &H46 , &H45 , &H38 , &H00 , &H08 , &H54,
    Data &H56 , &H55 , &H20 , &H00 , &H44 , &H64 , &H56 , &H4D , &H44 , &H00 , &H44 , &H64 , &H55 , &H4C , &H44 , &H00,
    Data &H10 , &H7F , &H44 , &H42 , &H40 , &H00 , &H04 , &H4A , &H4B , &H4A , &H30 , &H00 , &H62 , &H56 , &H4B , &H46,
    Data &H42 , &H00 , &H61 , &H59 , &H49 , &H4D , &H43 , &H00 , &H7E , &H43 , &H41 , &H43 , &H7E , &H00 , &H00 , &H00,
    Data &H00 , &H7F , &H7F , &H00 , &H00 , &H00 , &H7F , &H7F , &H7F , &H00 , &H00 , &H7F , &H7F , &H7F , &H7F , &H00,
    Data &H7F , &H7F , &H7F , &H7F , &H7F , &H00


    Pozdrawiam
  • REKLAMA
  • #2 3712184
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Trafiłeś kolego w końcówki przeznaczone dla JTAG. Wyłącz JTAG lub zmień port. Na szczęście Reset przypisałeś do Portc.6 więc jest szansa, że nie uwaliłeś LCD.
  • REKLAMA
  • #3 3712912
    pmmisiek
    Poziom 15  
    Posty: 234
    Pomógł: 7
    Ocena: 4
    hehe, a to dobtre, jtad jest wyłączony bo inczej nie działałałby lcd podłączony do tych pinów, pozatym po kilku próbach z różnymi programami lcd dalej działa i ma się dobrze. W specyfikacji sterownima napisali że nie podanie resetu może uszkodzić układ sterujący, jednak w prakrtyce okazuje się że nie jest to konieczne.

    W poście chodziło mi bardziej o sterowanie tym lcd za pomocą SPI a nie za pomocą wybranych portów i procedur wysyłających dane.

    Pozdrawiam
  • REKLAMA
  • #4 3713170
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    W takim razie spróbuj zmniejszyć częstotliwość taktowania µC. Być może LCD się nie wyrabia. Kombinowałem z kilkoma i jedna sztuka miała problemy nawet przy 2MHz. SPI jest szybkie.
  • #5 3720370
    pmmisiek
    Poziom 15  
    Posty: 234
    Pomógł: 7
    Ocena: 4
    Zmniejszyłem taktowanie na wewnętrzny 1MHz i dalej nie działa, może coś w tym programie jest nie tak?

    Czy ma ktoś sprawdzony programik w bascomie, który wyświetla cokolwiek na lcd komunikując się z nim przez SPI ??

    Byłbym bardzow wdzięczny za pomoc.



    W załączniku jest działający program który steruje wyświetlaczem bez użycia SPI ale chyba właśnie dla tego program po skompilowaniu zajmuje ok 8kB i działa dość wolno. Potrafi ktoś odchudzić trochę ten program?
    PS. Nawet gdy wyłącze wyświetlanie tej bitmapy to i tak program zajmuje 51% atmegi16.

    Pozdrawiam
    Załączniki:
    • LCD3310bacsom.rar (4.06 KB) Musisz być zalogowany, aby pobrać ten załącznik.
REKLAMA