Nu ska vi se.
Display från Kjell & Co: http://www.kjell.com/?item=90215&path=2 ... ,290000000
PIC: PIC16F628A
Strömkälla: 5.16V
Jag hade alldeles för bråttom att kopla in allt så mitt i glädjen att det lös så fint så brände jag bakgrundsbelysningen.

Jag har nu prövat att initiera LCDn med en kod som är en komposit av guiden i Wikin och Sodjans exempelkod på hans sida.
Problemet jag har är att jag inte ser något på displayen. Alltså jag lyckas inte ens se de Svarta(vita) rutorna som ska vara på den ena raden vid startup. Jag har bara fått ett par "dassiga" pixlar som tonar bort när jag kopplat på strömen på kretsen. Det "Dassiga" pixlarna har bara varit utspridda på de fyra första (Eller fyra sista) tecken rutorna.
Jag är lite orolig att jag bränt hela displayen så jag börjar från början med frågorna.
Jag undrar vad det absoluta minimum som jag behöver koppla in för att HD44780 ska köra sin egna startup så att jag ska kunna se de 16 rutorna på den övre raden? Ska det räcka med VSS och VDD? I sånna fall är displayen körd.

Här är koden i fall någon skulle vara intresserad/orka titta på den:
Kod: Markera allt
;**********************************************************************
; This file is a basic code template for assembly code generation *
; on the PIC16F628A. This file contains the basic code *
; building blocks to build upon. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler (Document DS33014). *
; *
; Refer to the respective PIC data sheet for additional *
; information on the instruction set. *
; *
;**********************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
; *
;**********************************************************************
; *
; Files Required: P16F628A.INC *
; *
;**********************************************************************
; *
; Notes: *
; *
;**********************************************************************
list p=16f628A ; list directive to define processor
#include <p16F628A.inc> ; processor specific variable definitions
errorlevel -302 ; suppress message 302 from list file
errorlevel -312
__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.
#define LCD_E PORTA, 0
#define LCD_RS PORTA, 1
#define LCD_PORT PORTA
;***** VARIABLE DEFINITIONS
cblock H'20'
w_temp ;Interuppt temp värden
status_temp
d1 ;Delay rutinernas minnen
dd1
dd2
ddd1
ddd2
ddd3
LCD_TMP1 ;LCD tempregister
LCD_TMP2
endc
;**********************************************************************
ORG 0x000 ; processor reset vector
goto main ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
; isr code can go here or be located as a call subroutine elsewhere
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
main
;---------------------------------------------------------------------
; Set up I/O
;---------------------------------------------------------------------
banksel TRISB ;
clrw ; Make all PORTB bits output
movwf TRISB
movwf TRISA ;
banksel PORTA ; Back to bank 0
movwf PORTA ;Avstängda
movwf PORTB ;Avstängda
; remaining code goes here
start
call delay_1s
call lcd_init_hd44780
call delay_1s
movlw b'00110001'
call lcd_send_data
loop ; Gör ingenting....
movlw b'11111111'
xorwf PORTB
call delay_1s
goto loop ;loop forever, remove this instruction, for test only
lcd_init_hd44780
;
call delay_1s ; Ge LCD'n tid att starta...
bcf LCD_E ; Se till att E och RS är
bcf LCD_RS ; nollade...
; Skicka initkoder enligt manual för HD44780.
; För detaljer, se manual för HD44780 eller datablad för en LCD.
;
movlw h'30'
call lcd_send_4_bit
call delay_5ms
movlw h'30'
call lcd_send_4_bit
call delay_5ms
movlw h'30'
call lcd_send_4_bit
call delay_100us
movlw h'20' ; Byt till 4-bitars interface !
call lcd_send_4_bit
call delay_100us
; movlw h'20'
; call lcd_send_4_bit
; call delay_100us
; movlw h'80'
; call lcd_send_4_bit
; call delay_100us
; movlw h'00'
; call lcd_send_4_bit
; call delay_100us
; movlw h'80'
; call lcd_send_4_bit
; call delay_100us
; movlw h'00'
; call lcd_send_4_bit
; call delay_100us
; movlw h'10'
; call lcd_send_4_bit
; call delay_100us
; movlw h'00'
; call lcd_send_4_bit
; call delay_100us
; movlw h'60'
; call lcd_send_4_bit
; call delay_100us
;
; Allt härefter sänds som två
; 4-bittars "nibbles". Först
; den höga delen (bit 4-7) sedan
; den låga (bot 0-3).
; Se lcd_send_cmd och lcd_send_data för detaljer.
movlw b'00101000' ; Function set
call lcd_send_cmd
call delay_100us
movlw b'00010100' ; Display/curs shift
call lcd_send_cmd
call delay_100us
movlw b'00001110' ; Display/curs on/off
call lcd_send_cmd
call delay_100us
movlw b'00000110' ; Entry mode set
call lcd_send_cmd
call delay_100us
movlw b'00000010' ; Display/curs home
call lcd_send_cmd
call delay_100us
movlw b'00000001' ; Display clear
call lcd_send_cmd
call delay_100us
;
; För detaljer kring varje kommando oven hänvisas till
; manual för HD44780 eller ett datablad för en LCD.
;
return
lcd_toggle_E
;
; Toggla E p LCD'n så att data på D4-D7 läses in.
;
banksel LCD_PORT
bsf LCD_E
nop
bcf LCD_E
nop
return
;
lcd_send_4_bit
; Data i W-reg bit 4-7 överförs till LCD_PORT bit 4-7.
; LCD_PORT bit 0-3 lämnas som de är.
;
banksel LCD_PORT
movwf LCD_TMP1 ; Spara LCD data...
movlw b'00001111' ; "Mask" för LCD_PORT
andwf LCD_PORT, w ; Läs av LCD_PORT bit 0-3
iorwf LCD_TMP1, w ; Kombinare med LCD data bit 4-7
movwf LCD_PORT ; Skriv tillbaka till LCD_PORT.
call lcd_toggle_E ; Och överför till LCD.
return
lcd_send_cmd
; Data i W överförs till LCD som ett "kommando".
;
banksel LCD_PORT
bcf LCD_RS ; RS = "0" för kommando.
call lcd_send_byte ; Skicka
call delay_5ms ; Vänta 5 ms efter ett kommando.
return
lcd_send_byte
; Data i W överförs till LCD som två 4-bitars bitar.
;
movwf LCD_TMP2 ; Spara W tillfälligt
movlw B'11110000' ; Mask för bit 4-7
andwf LCD_TMP2, w ; Nolla bit 0-3
call lcd_send_4_bit ; Skicka bit 4-7
swapf LCD_TMP2, f ; Byt plats på 0-3 <-> 4-7
movlw B'11110000' ; Mask för bit 4-7 (nu 0-3 !!)
andwf LCD_TMP2, w ; Nolla bit 0-3 (nu 4-7 !!)
call lcd_send_4_bit ; Skicka bit 4-7 (nu 0-3 !!)
return
lcd_send_data
; Data i W överförs till LCD som "data".
;
banksel LCD_PORT
bsf LCD_RS ; RS = "1" för data
call lcd_send_byte ; Skicka
call delay_100us ; Ge LCD'n tid att bearbeta datat.
return
;
;---------------------------------------------------------------
; Delay rutiner
;---------------------------------------------------------------
; Delay = 0.0001 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.0001 seconds = 100 cycles
; Error = 0 %
delay_100us
;94 cycles
movlw 0x1F
movwf d1
delay_100us_0
decfsz d1, f
goto delay_100us_0
;2 cycles
goto $+1
;4 cycles (including call)
return
; Delay = 0.005 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.005 seconds = 5000 cycles
; Error = 0 %
delay_5ms
;4993 cycles
movlw 0xE6
movwf dd1
movlw 0x04
movwf dd2
delay_5ms_0
decfsz dd1, f
goto $+2
decfsz dd2, f
goto delay_5ms_0
;3 cycles
goto $+1
nop
;4 cycles (including call)
return
; Delay = 1 seconds
; Clock frequency = 4 MHz
; Actual delay = 1 seconds = 1000000 cycles
; Error = 0 %
delay_1s
;999990 cycles
movlw 0x07
movwf ddd1
movlw 0x2F
movwf ddd2
movlw 0x03
movwf ddd3
delay_1s_0
decfsz ddd1, f
goto $+2
decfsz ddd2, f
goto $+2
decfsz ddd3, f
goto delay_1s_0
;6 cycles
goto $+1
goto $+1
goto $+1
;4 cycles (including call)
return
; initialize eeprom locations
ORG 0x2100
DE 0x00, 0x01, 0x02, 0x03
nop
END ; directive 'end of program'
Jaja, vi får höra vad ni har att säga.
MVH Peter F