LCDInfo.com

http://www.lcdinfo.com
It is currently Tue Apr 16, 2024 9:14

All times are UTC + 2 hours




Post new topic Reply to topic  [ 1 post ] 
Author Message
PostPosted: Thu Nov 03, 2005 14:36 
Offline

Joined: Thu Nov 03, 2005 14:20
Posts: 1
I'm trying to read the data back from the display to a Atmel microcontroller.

A device drives the display, then I want to disconnect the connection between device and display, and after all I want to read out all the pixels from the display. The hardware I made is ok and tested.

The code below is not ok, it always returns B1h to Hyperterminal instead of the display data. I don't know what I'm doing wrong !


Could somebody help me with this problem?

Code:
// Includes
//========================================================================================
#include <mega163.h>
#include <stdio.h>
#include <delay.h>
 
void         start         (void);
void            stop         (void);
void         strobe         (void);
void          command_w        (void);
void          data_w            (void);
void         data_r         (void);
unsigned char    statusreturn   (void);
void          statuscheck    (void);

int i;
unsigned char ucData;
unsigned char ucStatus1;
unsigned char ucStatus2;


// Defenities
//========================================================================================
#define CELO  PORTC.4 = 0
#define CEHI  PORTC.4 = 1
#define WRLO  PORTC.3 = 0
#define WRHI  PORTC.3 = 1
#define RDLO  PORTC.5 = 0
#define RDHI  PORTC.5 = 1
#define CDLO  PORTC.7 = 0
#define CDHI  PORTC.7 = 1


// Functies
//========================================================================================
void start (void)
{
    // Control lijnen voor display configureren
   PORTC   = 0x07;     
   PORTC.3 = PIND.5;
   PORTC.4 = PIND.3;
   PORTC.5 = PIND.4;
   PORTC.6 = PINC.2;
   PORTC.7 = PIND.2;
   
    // Uitgang display = ingang computer
   PORTA = PINB;
   
   // Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
   // State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
   DDRA=0xFF;
   
   // Func0=In Func1=In Func2=In Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
   // State0=P State1=P State2=P State3=0 State4=0 State5=0 State6=0 State7=0
   DDRC=0xF8;

   // Schakelaar onderbreken
   PORTD.7 = 1;   
}
//========================================================================================

void stop (void)
{
    // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
   // State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=P
   PORTA=0xFF;
   DDRA=0x00;

   // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
   // State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=P
   PORTC=0xFF;
   DDRC=0x00;
     
   // Schakelaar verbinden
   PORTD.7 = 0;
}
//========================================================================================

void strobe (void)
{
    CELO;
      
      #asm
       nop
        nop
         nop
       nop
        nop
    #endasm
 
    CEHI;
}
//========================================================================================

void command_w (void)
{
   CDHI;
    WRLO;
    RDHI;
   statuscheck();
   strobe();   
}
//========================================================================================
 
void data_r (void)
{
    CDLO;
    RDLO;
    WRHI;
}
//========================================================================================

void data_w (void)
{     CDLO ;
    CDLO;
   WRLO ;                 
    RDHI ;
    statuscheck();       
    strobe();
}
//========================================================================================

unsigned char statusreturn (void)
{                               
   unsigned char ucStatus;
   
    // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
   // State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=P
    DDRA=0x00;   
   
    CDHI ;
    RDLO ;
    WRHI ;
    CELO ;
   
    delay_us(10);
    ucStatus = PINA;
    CEHI ;
     
    DDRA = 0xFF;
     
   return (ucStatus);
}
//========================================================================================

void statuscheck (void)
{
   unsigned char ucStatus1;
   unsigned char ucStatus2;
   
    // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
   // State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=P
      DDRA=0x00;
      
    CDHI ;
    RDLO ;
    WRHI ;
   
    // Wait while STA0 & STA1 == 1
    do
    {
       CELO ;
       
       #asm
          nop
          nop
       #endasm
        
       ucStatus1 = PINA;
       CEHI ;   
       
       ucStatus2 = ucStatus1 & 0x03;
    }
    while (ucStatus2 != 0x03);
   
    DDRA = 0xFF;
}
//========================================================================================

void main(void)
{
   // Port A initialisatie
   // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
   // State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=P
   PORTA=0xFF;
   DDRA=0x00;

   // Port B initialisatie
   // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
   // State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=P
   PORTB=0xFF;
   DDRB=0x00;

   // Port C initialisatie
   // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
   // State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=P
   PORTC=0xFF;
   DDRC=0x00;

   // Port D initialisatie
   // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=Out
   // State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=0
   PORTD=0x7F;
   DDRD=0x80;

   // UART initialization
   // Communication Parameters: 8 Data, 1 Stop, No Parity
   // UART Receiver: On
   // UART Transmitter: On
   // UART Baud rate: 9600
   UCSRA=0x00;
   UCSRB=0x18;
   UBRR=0x33;
    UBRRHI=0x00;
       
    delay_ms(10000);
   
    start();
    
    PORTA = 0x00;   // Set pointer to 0000h
    data_w();
    PORTA = 0x00;
    data_w();
    PORTA = 0x24; 
    command_w();

    
    PORTA = 0xb1;  // Set display in AUTOMODE
    command_w();

    for (i = 0; i<10000; i++)
    {
       do
       {       
            ucStatus1 =   statusreturn();
          ucStatus2 = ucStatus1 & 0x08;
       }
       while (ucStatus2 != 0x08);       
    
       DDRA = 0x00;
       ucData = PINA;
printf("%c", ucData); // Send data to terminal
       DDRA = 0xff;
    
    }
   
    PORTA = 0xb2; // Bring LCD back to normal operation
    command_w();
    stop();
 
   while (1)
    {
           
   };
}
//========================================================================================


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC + 2 hours


Who is online

Users browsing this forum: No registered users and 10 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group