Problem att styra min dogm163w display med PIC
Problem att styra min dogm163w display med PIC
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.
- 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
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
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
Re: dogm163w, en snabb fråga
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.
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.
Re: dogm163w, en snabb fråga
Ä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"
Re: Problem att styra min dogm163w display med PIC
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...
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...
- 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
Det finns en stor risk att tråden spårar ur...
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

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
Re: Problem att styra min dogm163w display med PIC
Jag har kopplat den för att använda serial interface och fått den att lysa.
main.c,
lcd-funktioner,
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)
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);
}
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);
}
}
(p.s tack för tipsen swech)
Re: Problem att styra min dogm163w display med PIC
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...
- 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...
Re: Problem att styra min dogm163w display med PIC
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.
Re: Problem att styra min dogm163w display med PIC
> 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...
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...

Re: Problem att styra min dogm163w display med PIC
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?).
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?).
Re: Problem att styra min dogm163w display med PIC
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 ?
> "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 ?
Re: Problem att styra min dogm163w display med PIC
Enligt databladet:
1 = The transmission/reception is complete (must be cleared in software)
0 = Waiting to transmit/receive
1 = The transmission/reception is complete (must be cleared in software)
0 = Waiting to transmit/receive
Re: Problem att styra min dogm163w display med PIC
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.
(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.