Problem att styra min dogm163w display med PIC

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
bigx
Inlägg: 7
Blev medlem: 21 januari 2011, 13:14:18

Problem att styra min dogm163w display med PIC

Inlägg av bigx »

Jag har en dogm163w display som jag tänkte arbete lite med. Jag undrar om man behöver använda interrupts för att kunna kommunicera med displayen. Skulle någon snäll själ kunna hjälpa mig?
Senast redigerad av bigx 21 januari 2011, 13:40:57, redigerad totalt 1 gång.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: dogm163w, en snabb fråga

Inlägg av Swech »

http://www.elektronikforumet.com/forum/ ... php?t=6942

Här är en gammal tråd om den

Du måste nog komma med mer info för att någon skall kunna svara

Swech
bigx
Inlägg: 7
Blev medlem: 21 januari 2011, 13:14:18

Re: dogm163w, en snabb fråga

Inlägg av bigx »

Jag har kommit så här långt med hjälp av en bok:

void LCD_CMD(const unsigned char cmd)
{
unsigned char i;
LCD_RS = 0;
PIR1bits.SSP1IF = 0;
LCD_CS = 0;
SSP1BUF = cmd;
while(PIR1bits.SSP1IF != TRUE);
LCD_CS = 1;
Delay1KTCYx(2);
}


Men jag vet inte var jag ska nolla flaggan. Det står i data bladet för pic:en, "It must be cleared in software". Jag har tittat i den tråden du gav länk på innan jag skapa en ny tråd men tyckte den inte gav mig något.
Användarvisningsbild
PeterH
Inlägg: 8640
Blev medlem: 15 mars 2006, 15:57:10
Ort: Gävle/Valbo

Re: dogm163w, en snabb fråga

Inlägg av PeterH »

Ändra rubriken till något som tydligare säger vad du söker så hittar fler till tråden! Förslag "H:Problem att styra min dogm163w display med PIC"
bigx
Inlägg: 7
Blev medlem: 21 januari 2011, 13:14:18

Re: Problem att styra min dogm163w display med PIC

Inlägg av bigx »

Ändrat.

Skulle någon kunna hjälpa mig?
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Problem att styra min dogm163w display med PIC

Inlägg av Micke_s »

Du behöver inte använda interrupt, pollat går också.

Däremot så måste du vänta x us efter ett kommando, står http://www.lcd-module.de/eng/pdf/doma/dog-me.pdf

Det du behöver göra i PIC:en är att kolla om spi dataöverföringen är tom innan du laddar på med mer data.
Du behöver dessutom konfigurera din hårdvaru SPI-modul innan du kan börja sända data...
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Problem att styra min dogm163w display med PIC

Inlägg av Swech »

Det finns en stor risk att tråden spårar ur... :D

Det finns massor med folk som kan hjälpa dig här men
det är svårt att hjälpa om du inte mer tydligt förklarar:

Hur långt har du kommit. Är det kopplat, lyser det i displayen
eller helt svart, händer det något.

Vad är det för flagga du talar om? Det är omöjligt att veta för oss

Folk kommer att reta sig på att du inte lämnar info så att man
överhuvudtaget har en chans att hjälpa dig.
Notera att jag inte retar mig, jag försöker bara knuffa dig
lite hjälpsamt i rätt riktning

Swech
bigx
Inlägg: 7
Blev medlem: 21 januari 2011, 13:14:18

Re: Problem att styra min dogm163w display med PIC

Inlägg av bigx »

Jag har kopplat den för att använda serial interface och fått den att lysa.

main.c,

Kod: Markera allt

#pragma config OSC = INTIO67, FCMEN = OFF, IESO = OFF, PWRT = OFF, BOREN = SBORDIS, BORV = 3, WDT = OFF
#pragma config WDTPS = 32768, MODE = MC, ADDRBW = ADDR20BIT, DATABW = DATA16BIT, WAIT = OFF, CCP2MX = PORTC
#pragma config ECCPMX = PORTE, LPT1OSC = OFF, MCLRE = ON, STVREN = ON, LVP = OFF, BBSIZ = BB2K, XINST = OFF



#include 
#include 


#include "portmap.h"
#include "Init.h"
#include "features.h"
#include 


extern unsigned char LCD_Text[16];


void main( void )
{
InitPIC();
InitLCD();
LCD_BACKLIGHT();


//Write to LCD
sprintf(LCD_Text, "Hello world!!!!!");
lcd_txt(LCD_Text, LCD_ROW1);


}

lcd-funktioner,

Kod: Markera allt

void LCD_BACKLIGHT(void)
{
LCD_BL1 = 1;
LCD_BL2 = 0;
}


void delay_ms(long t)
{
do
{
Delay1KTCYx(4);
} while(--t);
}


void InitLCD(void)
{
//Initierar SPI
SSP1STATbits.SMP =1; // Input data sampled at end of data output time
SSP1STATbits.CKE =0; // Transmit occurs on transition from Idle to active clock state

SSP1CON1bits.SSPEN =1; // Enables serial port and configures SCKx, SDOx, SDIx and SSx as serial port pins
SSP1CON1bits.CKP =1; // Idle state for clock is a high level
SSP1CON1bits.SSPM0 =0; // SPI Master mode, clock = FOSC/16


LCD_CS = 1;     // Chipselect = 1
LCD_RST = 1;// Hardware reset of LCD
delay_ms(40);
LCD_CMD(0x39);// 8bit length, 2lines, instruction table 1
LCD_CMD(0x1D);// BS: 1/4, 3 line LCD
LCD_CMD(0x50);// Booster off, contrast C5, set C4
LCD_CMD(0x6C);// Set voltage, follower and gain
delay_ms(200);
LCD_CMD(0x7B);// Set contrast C3, C2, C1, C0
LCD_CMD(0x38);// Switch back to instruction table 0
LCD_CMD(0x0C);// Display on, cursor off
LCD_CMD(0x01);// Delete display, cursor at home
delay_ms(2);
LCD_CMD(0x06);// Cursor auto-increment
}


void LCD_CMD(const unsigned char cmd)
{
unsigned char i;
LCD_RS = 0;
PIR1bits.SSP1IF = 0;
LCD_CS = 0;
SSP1BUF = cmd;
Delay1KTCYx(2);
PIR1bits.SSP1IF = 1;
LCD_CS = 1;
Delay1KTCYx(2);
}


void lcd_txt(const unsigned char text[], unsigned char row)
{
unsigned char i;
LCD_CMD(LCD_DDRAM | row);


LCD_RS = 1;


for(i = 0; text[i] && (i < 16); i++)
{
PIR1bits.SSP1IF = 0;
LCD_CS = 0;
SSP1BUF = text[i];
Delay1KTCYx(2);
PIR1bits.SSP1IF = 1;
LCD_CS = 1;
Delay1KTCYx(2);
}
}


När jag gör en build får jag succed men när jag debuggar steg för steg fastnar jag i den första delayen i initLCD. Hjälp?

(p.s tack för tipsen swech)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem att styra min dogm163w display med PIC

Inlägg av sodjan »

En annan sak som kan vara av intresse...
- Har du kört SPI mot något annat tidigare ? D.v.s "kan" du SPI ?
- Är det hanteringen av SPI eller av LCD modulen som känns mest osäkert ?

> PIR1bits.SSP1IF = 1;

Varför sätter du interrupt flaggan själv direkt från koden ?
Normalt gör processorn det själv när det behövs.

Dessutom stämmer ju inte det där mot den kod du har i första inlägget !?
Vad är det som gäller ? Som andra har sagt, du får nog lägga ner lite mer
tid på dina frågor...
bigx
Inlägg: 7
Blev medlem: 21 januari 2011, 13:14:18

Re: Problem att styra min dogm163w display med PIC

Inlägg av bigx »

Ang. flaggan så står det i databladet, "It must be cleared in software" och det var så jag tolkade det. Jag har även som du sett i initLCD försökt initiera SSP enligt dokumentionen jag har läst. Ett problem jag har hittat är att mcc18:s inbyggda delay funktion som jag har försökt använda fastnar i en oändlig loop. Jag har väldigt svaga kunskaper om SPI.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem att styra min dogm163w display med PIC

Inlägg av sodjan »

> Ang. flaggan så står det i databladet, "It must be cleared in software" och det var så jag tolkade det.

Läs frågorna innan du svarar. Frågan var *vilken* "flagga" du syftade på. Visst, men skulla
kunna anta att det är interruptflaggan for SPI modulen, men det är bättre att
du säger det så blir det inga missförstånd.

> Jag har även som du sett i initLCD försökt initiera SSP enligt dokumentionen jag har läst.

OK, men, igen, svara på frågan. Är det *första* SPI applikationen du skriver ??

> Ett problem jag har hittat är att mcc18:s inbyggda delay funktion som jag har försökt använda fastnar i en oändlig loop.

OK, använd inte den då. Och hur vet du att den fastnar ?

Du har inte heller svarat på :

> - Är det hanteringen av SPI eller av LCD modulen som känns mest osäkert ?
>
> > PIR1bits.SSP1IF = 1;
> Varför sätter du interrupt flaggan själv direkt från koden ?

EDIT: Jag ser att det finns med i sitt senaste inlägg. Jag är osäker på om det
fanns där när jag skrev ovanstående, i så fall missade jag det. Aja, det är i alla
fall bra att veta hur pass säker du är på SPI i sig... :-)
bigx
Inlägg: 7
Blev medlem: 21 januari 2011, 13:14:18

Re: Problem att styra min dogm163w display med PIC

Inlägg av bigx »

Okej jag ber om ursäkt ska försöka vara mer tydlig.

Ja, detta är första gången jag försöker mig på något med SPI och det är där jag tycker det är klurigt att kunna kommunicera med lcd:n. Hur jag vet att den fastnar i delayen ser jag genom debuggen som aldrig lämnar loopen.

Som jag så ang. SSP1IF- flaggan tolkade jag "Must be cleared in software" som att jag själv sätter den till 1 när överföringen av kommandot är klar (dock så vet jag inte att överföringen är faktiskt klar?).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem att styra min dogm163w display med PIC

Inlägg av sodjan »

OK.

> "Must be cleared in software" som att jag själv sätter den till 1

"be cleared" = "sätta till 0".

> (dock så vet jag inte att överföringen är faktiskt klar?)

Jag gissar att SSP1IF blir = "1"...

EDIT: En annan fråga. Hur mycket har du använt interrupt tidigare ?
Daani4all
Inlägg: 6
Blev medlem: 21 januari 2011, 14:07:03

Re: Problem att styra min dogm163w display med PIC

Inlägg av Daani4all »

Enligt databladet:

1 = The transmission/reception is complete (must be cleared in software)
0 = Waiting to transmit/receive
bigx
Inlägg: 7
Blev medlem: 21 januari 2011, 13:14:18

Re: Problem att styra min dogm163w display med PIC

Inlägg av bigx »

Aha jag ser att jag har gjort ett fel där, den borde sättas till noll istället. Jag har använt interrupt ett fåtal gånger.

(Offtopic) Har du några idéer över hur jag kan lösa delay problemet? Det verkade väldigt bra att kunna använda dem inbyggda delayerna men det bara strular.
Skriv svar