Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

LCD i brak kontaktu z nim na atmedze

Elektricon 28 Lut 2007 19:27 4580 48
  • #1 28 Lut 2007 19:27
    Elektricon
    Poziom 12  

    Atmega16 . 8 Mhz (zewn).
    wyswietlacz 2x16 HY1602F4
    Wyswietla czarne kwadraty w 1 rzedzie(kontrast ich mozna zmieniac) .

    kod bascoma:

    Code:

    $regfile = "M16DEF.dat"
    $crystal = 8000000

    Config Lcd = 16 * 2
    Config Lcdbus = 4
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portd.7 , Db7 = Porta.7 , E = Portc.3 , Rs = Portc.2



    Cls
    Lcd "jakis napis"
    Do

    'cos tu robi :P
     Waitms 800

    Loop
    End


    niestety nic nie pomoga,nie wiem co zle robie
    nie jestem w stanie inaczej przepiac nozek :(

    0 29
  • #2 28 Lut 2007 19:38
    pmmisiek
    Poziom 15  

    Witam.
    Wyłącz JTAG w fusebitach bo korzysta on z portu C. Też kiedyś miałem taki problem, po wyłączeniu JTAGa wszystko pięknie chodzi.

    Pozdrawiam

    0
  • #3 28 Lut 2007 19:40
    Elektricon
    Poziom 12  

    zapomnialem napisac ,ze to juz tez zrobilem. nadal to samo :|

    0
  • #4 28 Lut 2007 19:43
    pmmisiek
    Poziom 15  

    A jak odczytasz fusebity z atmegi to masz wyłączony ten JTAG? Może nie ustawiły się poprawnie podczas programowania?

    0
  • #5 28 Lut 2007 19:46
    curylop
    Poziom 15  

    Ty to robisz na magistrali czy łączysz piny lcd do mikro kontrolera ??

    0
  • #6 28 Lut 2007 19:48
    Elektricon
    Poziom 12  

    jest disable,wiec chyba dobrze..
    polaczenia tez sa dobre.....sprawdzalem,tasme sprawdzalem rowniez.
    napiecie na wyswietlaczu jest odpowiednie..
    nie wiem co... :(
    piny lacze ,tzn przez malutka plytke przejsciowa... gdzie jest potencjometr tylko i zlacze na tasme.
    aha piny od podswietlania mam odlaczone..

    0
  • #7 28 Lut 2007 19:58
    korneliuszo
    Poziom 16  

    Co z pinem RW i proponuję ustawić to w ustawieniach BASCOMA

    Z tego co piszesz to wygląda że ma problem z inicjacją

    0
  • #8 28 Lut 2007 20:14
    Elektricon
    Poziom 12  

    RW do masy.
    chyba tak mozna ;)
    podobno nieraz potrzeba zainicjowania w asemblerze zeby dzialalo z bascomem? ale nie jestem w stanie raczej tego zrobic sam:(

    0
  • #9 28 Lut 2007 20:48
    korneliuszo
    Poziom 16  

    Kiedyś próbowałem wklepać lepszą obsług lcd'ka do bascoma.

    Używałem funkcji bascoma i wyszło monstrum (brak assemblera!!)

    I to nawet działało

    0
  • #11 28 Lut 2007 21:25
    korneliuszo
    Poziom 16  

    Czy pozmieniał pan w bibliotece (mlcdlib.bas) na samej górze przypisania i używał funkcji z tgo pliku??

    Jak tak to jest coś z sprzętem.

    db0-3 mam wiszące (to chyba nie jest w tym rzecz)

    0
  • #12 28 Lut 2007 21:34
    Elektricon
    Poziom 12  

    na tyle mysle zeby pozmieniac podstawowe linie w biblioteki ;)
    ale nadal nic z tego,polaczenia sa identyczne jak na schemacie.

    0
  • #13 28 Lut 2007 23:21
    M. S.
    Poziom 34  

    Usuń Config Lcdbus = 4 jeśli LCD podłączony jest bezpośredno do końcówek µC. Mam nadzieję, że wyświetlacz ma odpowiedni sterownik.

    0
  • #14 28 Lut 2007 23:24
    korneliuszo
    Poziom 16  

    Moim zdaniem to może być wina tego egzemplarza procesora (spalony port) lub połączeń (sprawdzić diodą z rezystorem i programikiem migającym wyjściami)

    Zauważyłem też, że w tym moim programiku nie ustawia odpowiednich stanów na DDRx

    PS:LCD'ek zakładam że sprawny.

    PS2:Jak pan chce to mogę napisać (TESTOWY) programik komunikujący się z HD4470U zgodnie z notą katalogową (4 bity).

    PS3: Ten wpis to moim zdaniem nie to (config lcdpin jest po config lcdbus)

    0
  • #15 28 Lut 2007 23:56
    Elektricon
    Poziom 12  

    testowalem rozne programiki,to Config Lcdbus = 4 doszlo w trakcie,liczylem ze cos poprawi.. ;)
    testowane na 2 egzemplarzach atmegi,wiec napewno to nie to..
    czasami bywa ze potrzeba cos inicjujacego zeby odpalilo,wiec moge taki programik pomoze,byloby milo, jezeli nie sprawiloby to problemu :)
    a moze trzeba jakos dobrac opoznienie na starcie albo zmniejszyc kwarc,bo nie wyrabia... nie mam pojecia co to moze byc..
    kontrast sie zmienia,wiec chyba lcd nie padniety jest...

    0
  • #17 01 Mar 2007 10:22
    Elektricon
    Poziom 12  

    dzieki :)
    jakies bledy wyrzuca kompilator ,ale sprobuje usunac...

    0
  • #18 01 Mar 2007 10:45
    Bastek79
    Poziom 13  

    Witam serdecznie,

    mam podobny problem z atmegą 16 + LCD 2x16, żeby nie mnożyć wątków to podpinam się pod ten temat może wspólne rozwiązanie pomoże i koledze i Mi ;)

    testowałem z programikiem powyżej jak z innymi i po załadowaniu na wyświetlaczu mam cały czas zapalony pierwszy rząd kwadracików czarnych.

    również korzystam z portc, wszystko prawidłowo mam ustawione, wyświetlacz sprawny i w tej konfiguracji działa na 100%.

    programator to STK200, potrafię odczytać Lock and Fuse Bits i zapisywać po zmianie i nawet resecie (power off/on) ustawienia są właściwe.

    jeżeli będzie potrzeba to zamieszczę schemat, co do kodu to przetestowałem wszystko co znalazłem do tej pory i efekt ten sam. NIe mam jedynie pewności co do programatora. Jednak skoro odczytuje i rozpoznaje procka, po ładowaniu kodu jest veryfikacja OK.

    0
  • #19 01 Mar 2007 13:05
    Elektricon
    Poziom 12  

    dodam ze mam jeszcze cos takiego,jak krecilem wtyczka(bezposrednio tez przylaczalem do plytki) to udalo mi sie wygenerowac jakies krzaki...
    a teraz pierwsza linijka co byla,zostala poprzecinana przez poziome paski(wygaszone) ,nie moge sie ich pozbyc....(zasilanie,reset,inny progs,kontrast).
    moze tutaj jest jakas wskazowka...

    0
  • #20 01 Mar 2007 13:31
    genetix
    Poziom 24  

    Może spróbuj podłączyć LCD pod inny port i przekonfiguruj firmware - może ruszy, albo zauważysz jakieś fakty...

    Dodano po 15 [minuty]:

    zobacz czy to Ci zadziała, tylko najpierw skoryguj ustawienia portu itp. Jeśli to nie puści, to masz coś zwalone w hw.

    Code:
    ;*H**************************************************************************************
    
    ;* Project: HD44780                           *
    ;* Source : HD44780.v1.04.asm                        *
    ;* S_type : avrasm2                           *
    ;* Release: v1.01 2007-01-09                        *
    ;* Descr  : LCD basic control functions                     *
    ;* Date   : 2006-12-21                           *
    ;* Author : genetix                           *
    ;* Company: ---                              *
    ;* For    : ---                              *
    ;* System : ATmega8535 + 4x16 LCD (HD44780)                  *
    ;* AddLibs: m8535def.inc                        *
    ;* Compile: AVR Studio v4.12                        *
    ;* Usage  : first, run    HD44780_InitInterface, then HD44780_InitController.      *
    ;* Notes  : tested on ATmega8535 + HLM3165 (4x16 HD44780-based LCD)         *
    ;* History: v1.02 -    [+] lcdbus_d nibble selection, separation of ctrl and data bus   *
    ;*       v1.03 -   [+] fixed/added comments, [+] simple demo application      *
    ;*       v1.04 -    [+] LCD_getxy                     *
    ;****************************************************************************************





    ;*I* Included files:      *********************************************************
    .include "m8535def.inc"      ; standard register definitions

    ;*R* CPU Register definitions:   *********************************************************
    .def temp   = r16      ; temporary multifunctional   
    .def data   = r17      ; data register (i.e.
    .def addr   = r18      ; CGRAM address, DDRAM address, screen position (x,y)
    .def delay   = r19      ; value for delay_x1ms function
    .def nloops   = r20      ; loop counter

    ;*P* Port definitions:      *********************************************************
    .equ lcdbus_d   = PORTC      ; output data bus (LCD - pin 11..14)
    .equ lcdbus_ddir= DDRC      ; direction switching
    .equ lcdbus_din   = PINC      ; input data bus (LCD - pin 11..14)
    #define LCDBUS_NIBBLE 0      ; LCD data bus on (1=high / 0=low) port nibble

    .equ lcdbus_c   = PORTD      ; LCD control bus (LCD - pin 4..6 /see pin definitions/)
    .equ lcdbus_cdir= DDRD

    ;*p* Pin definitions:      *********************************************************
    .equ RS      = 6      ; register select    (LCD - pin 4)
    .equ RW      = 5      ; register read/write    (LCD - pin 5)
    .equ E      = 4      ; enable       (LCD - pin 6)

    ;*C* Constant definitions:   *********************************************************
    #define LCD_COLUMNS   16   ; x-size of display
    #define LCD_ROWS   4   ; y-size of display

    .equ LCD_CURSOR_BLINK   =   0x01   ; blinking cursor = on
    .equ LCD_CURSOR_VISIBLE   =   0x02   ;
    .equ LCD_DISPLAY_ON   =   0x04   ;

    .equ LCD_SHIFT_DISPLAY   =   0x08
    .equ LCD_SHIFT_RIGHT   =   0x04

    .equ LCD_INCREMENT   =   0x02
    .equ LCD_SHIFT_ENABLE   =   0x01

    ;*B* Bit definitions:      *********************************************************
    ;*D* RAM declarations:      *********************************************************
    ;*F* FLASH declarations:   *********************************************************
    ;*m* Macros         *********************************************************
    .MACRO _HD44780_latch
          sbi lcdbus_c, E         ; latch nibble in selected register
          nop
          nop
          cbi lcdbus_c, E
    .ENDM

    ;*V* Interrupt vectors:      *********************************************************
    .org 0x00
          rjmp MAIN_Start

    ;*M* Main program body:      *********************************************************
    MAIN_Start:   
                      ; Main program start
          ldi temp, low(ramend)
          out SPL, temp
          ldi temp, high(ramend)
          out SPH, temp

          rcall HD44780_InitInterface   ; Init IO port
          rcall HD44780_InitController   ; internal initialization by software

          rcall LCD_clear         

          ldi data, (LCD_DISPLAY_ON)
          rcall LCD_setcursor

          ldi data, (LCD_INCREMENT)
          rcall LCD_setentry
          

    MAIN_Loop:
          rcall LCD_clear
          ldi ZL, low(LINE0<<1)
          ldi ZH, high(LINE0<<1)
          rcall LCD_putfs

    MAIN_Idle:   rjmp MAIN_Idle         ; endless loop /exit by IRQ only/

    ;*Q* IRQ Handling routines               *************************
    ;*S* Subroutines:      *********************************************************
    ;************** SUBROUTINE **************************************************************
    ;* Name: LCD_puthex                           *
    ;* Dscr: print 2 digit hex number from [data] register               *
    ;* In  : [data]                              *
    ;* Out : HD44780                           *
    ;* Mod :                               *
    ;* Size: 25 (50B)                           *
    ;* Cycl:                               *
    ;* Uses: HD44780_wrdat                           *
    ;****************************************************************************************
    LCD_puthex:
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: LCD_putdec                           *
    ;* Dscr: print 8-bit decimal number, w/o leading zeros               *
    ;* In  : [data]                              *
    ;* Out :                               *
    ;* Mod : ---                              *
    ;* Size: 33 (66B)                           *
    ;* Cycl:                               *
    ;* Uses: HD44780_wrdat                           *
    ;****************************************************************************************
    LCD_putdec:
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: LCD_putc                           *
    ;* Dscr: Print ASCII character                        *
    ;* In  : [data] ascii character                        *
    ;* Out :                               *
    ;* Mod :                               *
    ;* Size:                               *
    ;* Cycl:                               *
    ;* Uses: HD44780_wrdat                           *
    ;****************************************************************************************
    LCD_putc:
    LCD_putchar:
          rcall HD44780_wrdat
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: LCD_clear                           *
    ;* Dscr: clear display, set address to 0x00                  *
    ;* In  : [data] ascii character                        *
    ;* Out :                               *
    ;* Mod :                               *
    ;* Size:                               *
    ;* Cycl:                               *
    ;* Uses: HD44780_wrins                           *
    ;****************************************************************************************
    LCD_clear:
          push data
          ldi data, 0x01         ; clear display instruction
          rcall HD44780_wrins      ; send to controller
          pop data
          ret

    LCD_setcursor:
          push data
          sbr data, 0b00001000      ; set cursor instruction + cfg bits
          rcall HD44780_wrins      ; send to controller
          pop data
          ret

    LCD_setshift:               
          push data
          sbr data, 0b00010000      ; set shift direction instr + cfg bits
          rcall HD44780_wrins      ; send to controller
          pop data
          ret

    LCD_setentry:
          push data
          sbr data, 0b00000100      
          rcall HD44780_wrins
          pop data
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: LCD_putrs                           *
    ;* Dscr: Print zero-terminated string from RAM                  *
    ;* In  : [Z] - string address                        *
    ;* Out :                               *
    ;* Mod :                               *
    ;* Size: 8 (16B)                           *
    ;* Cycl:                               *
    ;* Uses: HD44780_wrdat                           *
    ;****************************************************************************************
    LCD_putrs:
          ret            ; finito

    ;************** SUBROUTINE **************************************************************
    ;* Name: LCD_putfs                           *
    ;* Dscr: Print zero-terminated string from FLASH               *
    ;* In  : [Z] - string address                        *
    ;* Out :                               *
    ;* Mod :                               *
    ;* Size: 10 (20B)                           *
    ;* Cycl: ---                              *
    ;* Uses: HD44780_wrdat                           *
    ;****************************************************************************************
    LCD_putfs:
          push data         ; save register on stack
    lcd_putfs_loop:
          lpm            ; load byte from FLASH
          mov data, R0         ; place byte in [data] register
          tst data         ; check, if byte is the string terminator
          breq lcd_putfs_ret      ; if so, return from function
          rcall HD44780_wrdat      ; else print character
          adiw ZL, 1         ; increment FLASH pointer
          rjmp lcd_putfs_loop      ; repeat in loop
    lcd_putfs_ret:
          pop data         ; load previous register value from stack
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: LCD_gotoxy                           *
    ;* Dscr: set cursor position [R, C] R-row (0-3), C-column (0-15)         *
    ;* In  : [addr]   low nibble=column, high nibble=row               *
    ;* Out :                               *
    ;* Mod :                               *
    ;* Size: 21 (42B)                           *
    ;* Cycl:                               *
    ;* Uses: HD44780_wrins                           *
    ;****************************************************************************************
    LCD_gotoxy:   
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: LCD_getxy                           *
    ;* Dscr: get cursor position [R, C] R-row (0-3), C-column (0-15)         *
    ;* In  :                               *
    ;* Out : [addr]   low nibble=column, high nibble=row               *
    ;* Mod :                               *
    ;* Size:                               *
    ;* Cycl:                               *
    ;* Uses: HD44780_wrins                           *
    ;****************************************************************************************
    LCD_getxy:
          ret


    ;************** SUBROUTINE **************************************************************
    ;* Name: LCD_defchar                           *
    ;* Dscr: define custom character pattern                  *
    ;* In  : [Z] - address of pattern data, [addr] - character address in CGRAM [0-7]   *
    ;* Out : ---                              *
    ;* Mod : ---                              *
    ;* Size: 20 (40B)                           *
    ;* Cycl:                               *
    ;* Uses: HD44780_setcgramaddr, HD44780_wrdat                  *
    ;****************************************************************************************
    LCD_defchar:
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: HD44780_InitInterface                        *
    ;* Dscr: initialization of IO lines for communication with HD44780         *
    ;* In  : ---                              *
    ;* Out : lcdbus_cdir, lcdbus_ddir                     *
    ;* Mod : lcdbus_cdir, lcdbus_ddir                     *
    ;* Size: 7 (14B)                           *
    ;* Cycl: 14                              *
    ;* Uses: ---                              *
    ;****************************************************************************************
    HD44780_InitInterface:
          in temp, lcdbus_ddir      ; set 4-bit data port as output (default)
       #if (LCDBUS_NIBBLE == 1)
          sbr temp, 0xF0         ; if data bus on high nibble
       #else
          sbr temp, 0x0F         ; if data bus on low nibble
       #endif
          out lcdbus_ddir, temp      ; write new port settings
          sbi lcdbus_cdir, E      ;
          sbi lcdbus_cdir, RW      ; control lines - always output
          sbi lcdbus_cdir, RS      ;
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: HD44780_InitController                        *
    ;* Dscr: Internal initialization of HD44780 controller               *
    ;* In  : ---                              *
    ;* Out : ---                              *
    ;* Mod : ---                              *
    ;* Size: 17 (34B)                           *
    ;* Cycl:                               *
    ;* Uses: HD44780_wrnibble, delay_x1ms                     *
    ;****************************************************************************************
    HD44780_InitController:
          ldi delay, 16
          rcall delay_x1ms
          ldi data, 3
          rcall HD44780_wrnibble

          ldi delay, 5
          rcall delay_x1ms
          ldi data, 0x03
          rcall HD44780_wrnibble

          ldi delay, 1
          rcall delay_x1ms
          ldi data, 0x03
          rcall HD44780_wrnibble

          ldi delay, 1
          rcall delay_x1ms
          ldi data, 0x02
          rcall HD44780_wrnibble
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: HD44780_wrbyte                           *
    ;* Dscr: writes byte from [data] to HD44780 via 4-bit interface            *
    ;* In  : [data]                              *
    ;* Out :                               *
    ;* Mod : ---                              *
    ;* Size: 25 (50B)                           *
    ;* Cycl:                               *
    ;* Uses: ---                              *
    ;****************************************************************************************
    HD44780_wrbyte:
          push temp
                   ; SENDING HIGHER NIBBLE
          push data
          cbr data, 0x0F         ; clear lower nibble (transmit high)
          in temp, lcdbus_d      ; get current PORT value
       #if (LCDBUS_NIBBLE == 1)   ; if bus on high nibble
          cbr temp, 0xF0         ; clear our 4 bits (LCD data bus)
       #else            ; if bus on low nibble
          cbr temp, 0x0F         ; clear our 4 bits (LCD data bus)
          swap data         ; place higher nibble on lower position
       #endif
          or temp, data         ; add new nibble to existing other bits
          out lcdbus_d, temp      ; output data
          pop data         ; get back data byte
          _HD44780_latch         ; latch in register
                   ; SENDING LOWER NIBBLE
          push data         ;
          cbr data, 0xF0         ; clear higher nibble (transmit low)
          in temp, lcdbus_d      ; get current PORT value
       #if (LCDBUS_NIBBLE == 1)   ; if bus on high nibble
          cbr temp, 0xF0         ; clear our 4 bits (LCD data bus)
          swap data         ; place lower nibble on higher position
       #else            ; if bus on low nibble
          cbr temp, 0x0F
       #endif
          or temp, data
          out lcdbus_d, temp      ; output data
          pop data         ; restore data byte
          _HD44780_latch         ; latch in register
          
          pop temp
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: HD44780_wrnibble                        *
    ;* Dscr: writes lower nibble from [data] to HD44780 via 4-bit interface         *
    ;* In  : [data]                              *
    ;* Out :                               *
    ;* Mod :                               *
    ;* Size: 13/14 (26/28B)                           *
    ;* Cycl: 22/23                              *
    ;* Uses: ---                              *
    ;****************************************************************************************
    HD44780_wrnibble:
          push temp
          push data
          in temp, lcdbus_d      ; get current PORT value
       #if (LCDBUS_NIBBLE == 1)   ; if bus on high nibble
          cbr temp, 0xF0         ; clear our 4 bits (LCD data bus)
          swap data         ; place data on higher position
       #else            ; if bus on low nibble
          cbr temp, 0x0F         ; clear our 4 bits (LCD data bus)
       #endif
          or temp, data         ; add new nibble to existing other bits
          out lcdbus_d, temp      ; output data
          _HD44780_latch         ; latch in register
          pop data         ; get back data byte
          pop temp
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: HD44780_wrdat / HD44780_wrdat                     *
    ;* Dscr: writes byte from [data] to HD44780's instruction/data register         *
    ;* In  : [data]                              *
    ;* Out : ---                              *
    ;* Mod : ---                              *
    ;* Size: 5 (10B) / 6 (12B)                        *
    ;* Cycl: ---                              *
    ;* Uses: HD44780_wrbyte, HD44780_waitbusy                  *
    ;****************************************************************************************
    HD44780_wrdat:

          rcall HD44780_waitbusy      ; check if controller can exec new instr.
          sbi lcdbus_c, RS
          rcall HD44780_wrbyte
          cbi lcdbus_c, RS
          ret
    HD44780_wrins:
          rcall HD44780_waitbusy      ; check if controller can exec new instr.
          cbi lcdbus_c, RS
          rcall HD44780_wrbyte
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: HD44780_setcgramaddr / HD44780_setddramaddr               *
    ;* Dscr: set currnet CGRAM/DDRAM address                  *
    ;* In  : [addr]                              *
    ;* Out : ---                              *
    ;* Mod : ---                              *
    ;* Size: 7 (14B) / 6 (12B)                        *
    ;* Cycl: ---                              *
    ;* Uses: HD44780_wrins                           *
    ;****************************************************************************************
    HD44780_setcgramaddr:
          ret

    HD44780_setddramaddr:
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: HD44780_HD44780_waitbusy                     *
    ;* Dscr: polling busy flag, return when controller ready for next transmission      *
    ;* In  : [data]                              *
    ;* Out : ---                              *
    ;* Mod : ---                              *
    ;* Size: 26 (52B)                           *
    ;* Cycl:                               *
    ;* Uses: ---                              *
    ;****************************************************************************************
    HD44780_waitbusy:
          push temp
          push data

          in temp, lcdbus_ddir      ; set 4-bit data port as input(for reading)
       #if (LCDBUS_NIBBLE == 1)
          cbr temp, 0xF0         ; if data bus on high nibble
       #else
          cbr temp, 0x0F         ; if data bus on low nibble
       #endif
          out lcdbus_ddir, temp

          sbi lcdbus_c, RW
          nop         ; tAS= min 40ns - address set
    hd44780_waitbusy_loop:
          sbi lcdbus_c, E
          nop         ; tDDR= max 160ns - data delay
          nop
          in data, lcdbus_din      ; read busy flag & address counter high
          cbi lcdbus_c, E
          sbi lcdbus_c, E
          nop         ; tDDR= max 160ns - data delay
          nop
          in temp, lcdbus_din      ; read busy flag & address counter high
          cbi lcdbus_c, E
       #if (LCDBUS_NIBBLE == 1)
          sbrc data, 7
       #else
          sbrc data, 3
       #endif
          rjmp hd44780_waitbusy_loop

          in temp, lcdbus_ddir      ; set 4-bit data port as output (default)
       #if (LCDBUS_NIBBLE == 1)
          sbr temp, 0xF0         ; if data bus on high nibble
       #else
          sbr temp, 0x0F         ; if data bus on low nibble
       #endif
          out lcdbus_ddir, temp

          pop data
          pop temp
          cbi lcdbus_c, RW
          ret

    ;************** SUBROUTINE **************************************************************
    ;* Name: HD44780_getddramaddr                        *
    ;* Dscr: get current DDRAM address                     *
    ;* In  : ---                              *
    ;* Out : [addr]                              *
    ;* Mod : ---                              *
    ;* Size: 32 (64B)                           *
    ;* Cycl: ---                              *
    ;* Uses:                               *
    ;****************************************************************************************
    HD44780_getddramaddr:
          ret


    ;************** SUBROUTINE **************************************************************
    ;* Name: delay_x1ms                           *
    ;* Dscr: loop for approx. [delay] x 1miliseconds               *
    ;* In  : [delay]                           *
    ;* Out : ---                              *
    ;* Mod : ---                              *
    ;* Size: 15 (30B)                           *
    ;* Cycl: ---                              *
    ;* Uses: ---                              *
    ;****************************************************************************************
    delay_x1ms:
          push r21
          push r20
          push delay

    delay_x1ms_loop1:
          ldi r21, 15
          ldi r20, 89
    delay_x1ms_loop:
          dec r20
          brne delay_x1ms_loop
          dec r21
          brne delay_x1ms_loop
          dec delay
          brne delay_x1ms_loop1
          
          pop r20
          pop r21
          pop delay
          ret

    LINE0:      .db "HD44780", 0

    ;************** EOF *********************************************************************


    Nie wyrażam zgody na komercyjne wykorzystywanie powyższego kodu ani w całości ani we fragmentach.
    Usunięte funkcje są oczywiście dostępne po uzgodnieniu szczegółów.

    Dodano po 2 [minuty]:

    PS. Czemu elektroda.pl nie uznaje "standardowej" szerokości tabulacji == 8 znaków??

    0
  • #21 01 Mar 2007 14:03
    Elektricon
    Poziom 12  

    Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portd.7 , Db7 = Porta.7 , E = Portc.3 , Rs = Portc.2

    ktore miejsca dokladnie zmienic w programie,nie moge sie wszystkich pinow doczytac niestety :(

    0
  • #22 01 Mar 2007 14:07
    genetix
    Poziom 24  

    Elektricon napisał:
    Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portd.7 , Db7 = Porta.7 , E = Portc.3 , Rs = Portc.2

    ktore miejsca dokladnie zmienic w programie,nie moge sie wszystkich pinow doczytac niestety :(


    zależy co chcesz zrobić, bo motasz strasznie....

    0
  • #23 01 Mar 2007 14:16
    Elektricon
    Poziom 12  

    najpierw chcialem sprawdzic,czy pod pinami pod ktorymi mam podpiety lcd bedzie to chodzic...wiec to sie wiaze ze zmiana podstawowych linii komunikacji w programie... na te ktore napisalem wczesniej

    0
  • #24 01 Mar 2007 14:20
    genetix
    Poziom 24  

    zgadzam się, ale tutaj:

    Code:
    Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portd.7 , Db7 = Porta.7 , E = Portc.3 , Rs = Portc.2 
    masz totalny, że się tak wyrażę... bajzel. Nie można podpiąć wszystkiego do jednego portu, żeby było przynajmniej przejrzyście?

    0
  • #25 01 Mar 2007 14:22
    Elektricon
    Poziom 12  

    moglbym ale narazie tak mam na plytce....wiec narazie pod to chce zrobic..
    tak wyszlo w projektowaniu bo inaczej ciezko mialbym z niektorymi rzeczami...ale mniejsza o to..

    0
  • #26 01 Mar 2007 14:22
    genetix
    Poziom 24  

    i czy ten wasz "superintelignenty" bascom dopuszcza rozbicie magistrali danych na 3 porty?

    Podłącz sobie linie danych do jednego portu, po kolei jak idą bity. Potem podłącz linie sterujące. Minimalizuj ryzyko pomyłki - czas to pieniądz...

    0
  • #27 01 Mar 2007 14:52
    Bastek79
    Poziom 13  

    widzę że temat nieco ruszył ;)

    Opisałem swój problem kilka postów wyżej - czy mógłby mi ktoś wskacać co robię źle. jedyny efekt to 1 linia czarnych kwadratów ... obojętnie co bym nie załadował do procka. Jtag disabled. Oscylator wewnętrzny ustawiony na 1 MHz

    Code:

    $crystal = 1000000
    Config Portc = Output
    Config Lcd = 16 * 2                                 
    Config Lcdmode = Port

    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2

      Do
         Cls
       
           Lcd "Hello world."
           Wait 1
            Cls
              Wait 2
               Lcd "aaaaa"
              Wait 1                                                   
       Loop


    i schemat podłączenia

    0
  • #28 01 Mar 2007 14:55
    genetix
    Poziom 24  

    :arrow:Bastek79
    a gdzie

    Code:
    Config Lcdbus = 4 
    ?

    0
  • #29 01 Mar 2007 15:23
    Elektricon
    Poziom 12  

    moze to wlasnie chodzi o ten porc c ktory wykorzystujemy....
    mimo ze jtag wylaczony nadal nie funkcjonuja prawidlowo
    ustawic bit JTD w rejestrze MCUCSR,moze w ten sposob ale jak?

    0
  • #30 01 Mar 2007 16:21
    Bastek79
    Poziom 13  

    Code:
    Config Lcdbus = 4


    bez zmian, testowałem już to na wszystkie modele !

    poniżej na zdjęciu widać to co mam na wyświetlaczu.

    0