Den fungerade fint på labbkortet och var inkopplad på exakt samma sätt som nu. Koden för LCD-displayen som fungerade bra på labbkortet fungerar inte på mitt etsade kort.
All annan funktionalitet fungerar bra, som t ex toggla lysdioder, känna av switchar och annat.
Kortet ser ut så här:

När man kör koden får man två rader med fyrkanter på displayen. Jag antar att det ser ut så om displayen inte initieras ordentligt?

Jag har tittat på alla utsignaler på PORTD (som är den som är kopplad till displayen) och allt som kommer verkar vara VCC på alla portar som hör till displayen.
Om jag istället kopplar bort displayen och gör en PORTD=~PORTD i en while-loop så får man en fin fyrkantsvåg i oscilloskopet. Så E, RS, D4-D7 har möjlighet att kunna komma fram till displayen iaf.
Jag använder MikroC och deras LCD-bibliotek (Jag vet, "skriv din egen funktion.") Men det som är märkligt är att E och RS är helt tysta (bara konstant VCC vad det verkar) när man kör ut text i while-loopen? Det borde väl märkas på oscilloskopet att nåt händer där?
Jag råkade designa kortet med R/W på RC6 och inte någonstans på port D. Men jag har kopplat RW på displayen till jord. När man initierar displayen med Lcd_Config så har jag sagt att R/W finns på RD1 (eftersom jag inte använder den till något annat). Kan det vara det som är problemet? Fast jag hade inte R/W inkopplad på labbplattan heller.
Min testkod:
Kod: Markera allt
#define POWERLED PORTA.F4
#define SCANLED PORTA.F5
#define FAULTLED PORTA.F3
#define UV1 PORTA.F6
#define UV2 PORTC.F0
#define UV3 PORTC.F1
#define UV4 PORTC.F2
#define BUZZER PORTD.F0
#define ROTBUTTON1 PORTA.F0
#define BUTTON2 PORTA.F1
void main(void) {
TRISC = 0x0;
SPPCON = 0x0;
SPPCFG = 0x0;
PORTC= 0x0;
PORTB = 0x0;
UCON = 0x12;
UCFG = 0x08;
TRISB = 0xE0;
PORTA = 0x0;
ADCON1 = 0x0F;
CMCON = 0x07;
TRISA = 0x0;
OSCCON = 0xFF;
UV1=0;
UV2=0;
UV3=0;
UV4=0;
PORTD.F0=0;
POWERLED=1;
SCANLED==0;
FAULTLED=0;
count=0;
// RS = 2, EN = 3, R/W = 1, D7-D4 = 7-4
TRISD = 0x0;
Lcd_Config(&PORTD, 2,3,1,7,6,5,4);
Lcd_Cmd(LCD_CLEAR);
Lcd_Cmd(LCD_CURSOR_OFF);
delay_ms(500);
while(1) {
Lcd_Out(1,1,"test");
// PORTD= ~PORTD;
if(ROTBUTTON1==1) {
BUZZER = ~BUZZER;
SCANLED=~SCANLED;
}
if(BUTTON2==1) {
SCANLED=~SCANLED;
}
}
}