www.mikrocontroller.net

Forum: Gesperrte Threads LCD Display Seriell Ansteuern


Autor: HannoHupmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielleicht könnt ihr mir weiter helfen, im Forum hab ich dazu noch 
nichts gefunden.

Mein Auftrag ist es, ein Display Seriell anzusteuern. D.h. ich hab nicht 
die möglichkeit für die weit verbreitete 4-bit oder 8-bit Ansteuerung.
Folgendes Display kommt zum Einsatz: EA DIP204-4 (Datenblätter und 
Referenzen auf www.lcd-module.de).

Das Display arbeitet mit einem Internen ks0073 Controler und wird über 
einen µC angesteuert. Dabei werden die Pins P5.0 CS (chipselect), P5.1 
SO, P5.2 SI, P5.3 SCLK und P5.4 RESET verwendet.
Es muss seriel sein und in C programmiert, das ist die Vorgabe.

Mein erster Gedanke war jetzt ein Programm zu schreiben, welches den 
Pin5.2   so auf High und Low zieht wie es im Datenblatt des KS0073 
gefordert wird. Nach jedem Bit wird die SCKL auf Low gesetzt um eine 
fallende Flanke zu erzeugen.

Wenn ich mir das ganze mittels Oszis ansehe schaut der Verlauf des 
Signals auch aus wie vom Datenblatt gefordert nur leider zeigt das 
Display trotzdem keine Zeichen an.

Ab hier komm ich nicht mehr weiter und hoffe dass einer von euch 
eventuell schon mal ein Display Seriell angesteuert oder zuminderst 
erfahrung im  serieller Datenübermittlung hat und mir weiter helfen 
kann.



PS: Was ich noch probiert und überbrüft habe:
- Kontrast komplett durchlaufen lassen
- Hintergrundbeleuchtung an/aus
- Pin5.1 verwenden.
- Längere Pausen nach jedem Signal um die Daten nicht zu schnell an das 
Display zu schicken.

PPS: Der bisherige Code:
#define HINTERGRUND 1
#define CONTRAST 2

void LCDClock(void);
void LCD_control(unsigned int LCD, unsigned int lcd_value);

void main(void){

int c; 

WDTCTL = WDTPW + WDTHOLD;                   // Stop WDT
BCSCTL1 |= XTS;                           // XT = HF XTAL
    
ADC12CTL0 = !REF2_5V + REFON;                // Internal 1.5V ref on
DAC12_0CTL = DAC12IR + DAC12AMP_5 +DAC12ENC;   // internal reference gain 1 encode

P1SEL &= 0xDF; // Ausgang für Hintergrund
P1DIR |= 0x20; // Ausgang für Hintergrund

P5SEL = 0x00; // Ausgänge für LCD
P5DIR = 0x1F; // P5.0 bis P5.4 ==> Output
P5OUT = 0x00;

P5OUT |= 0x01;  //CS high
P5OUT |= 0x08;  // Clock auf High
P5OUT &= 0xEF;   // Reset auf LOW 
  
  
LCD_control(HINTERGRUND,ON);
LCD_control(CONTRAST, 0xFFFF);

// Initialiase
  
  
  wait(50000);
  LED_control(1,GELB);
  c=0;
  

//############################# LCD Clear 
  P5OUT &= 0xFE;  //CS low beginn of Data
  P5OUT |= 0x04;  // --> 1     
  LCDClock();   // SID = 1  Synchronisieren    
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1 

  P5OUT &= 0xFB;   // --> 0
  LCDClock();  // SID = 0  
  LCDClock();  // SID = 0  
  LCDClock();  // SID = 0
  
  P5OUT |= 0x04;   // --> 1      Reset
  LCDClock();  // SID = 1    D0
  P5OUT &= 0xFB;   // --> 0
  LCDClock();  // SID = 0    D1   
  LCDClock();  // SID = 0    D2
  LCDClock();  // SID = 0    D3
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0    D4
  LCDClock();  // SID = 0    D5  
  LCDClock();  // SID = 0    D6
  LCDClock();  // SID = 0    D7
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0  
  LCDClock();     // SID = 0        
  LCDClock();  // SID = 0     
  LCDClock();  // SID = 0  
  
  P5OUT |= 0x01;  // CS high 
//############################# LCD Clear   
  
  LED_control(1,GRUEN);
  wait(5000);
  LED_control(1,GELB);
  
//############################# Return Home 
    P5OUT &= 0xFE;  //CS low beginn of Data
    P5OUT |= 0x04;  // --> 1     
  LCDClock();     // SID = 1  Synchronisieren    
  LCDClock();    // SID = 1
  LCDClock();    // SID = 1
  LCDClock();    // SID = 1
  LCDClock();    // SID = 1 

  P5OUT &= 0xFB;   // --> 0
  LCDClock();    // SID = 0
  LCDClock();    // SID = 0
  LCDClock();    // SID = 0
  
  P5OUT |= 0x04;   // --> 1Return Home
  LCDClock();  // SID = 1    D0  
  LCDClock();  // SID = 1    D1   
  P5OUT &= 0xFB;   // --> 0
  LCDClock();  // SID = 0    D2
  LCDClock();  // SID = 0    D3
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();     // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0    D4
  LCDClock();  // SID = 0    D5  
  LCDClock();  // SID = 0    D6
  LCDClock();  // SID = 0    D7
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0  
  LCDClock();  // SID = 0        
  LCDClock();  // SID = 0     
  LCDClock();  // SID = 0  
  
  P5OUT |= 0x01;          // CS high /
//############################# Return Home 
  
  LED_control(1,GRUEN);
  wait(5000);
  LED_control(1,GELB);
  
//############################# Entry Mode Set 

  P5OUT &= 0xFE;  //CS low beginn of Data
  P5OUT |= 0x04;  // --> 1     
  LCDClock();   // SID = 1  Synchronisieren    
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1 

  P5OUT &= 0xFB;   // --> 0
  LCDClock();  // SID = 0
  LCDClock();     // SID = 0  
  LCDClock();  // SID = 0
  
  P5OUT &= 0xFB;   // --> 0    Entry Mode
  LCDClock();  // SID = 0    D0  
  LCDClock();  // SID = 0    D1   
  P5OUT |= 0x04;   // --> 1  
  LCDClock();  // SID = 1    D2
  P5OUT &= 0xFB;   // --> 0
  LCDClock();  // SID = 0    D3
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();     // SID = 0    D4
  LCDClock();  // SID = 0    D5  
  LCDClock();  // SID = 0    D6
  LCDClock();  // SID = 0    D7
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0  
  LCDClock();  // SID = 0        
  LCDClock();  // SID = 0     
  LCDClock();  // SID = 0  
  
  P5OUT |= 0x01;          // CS high /

//############################# Entry Mode Set 

  LED_control(1,GRUEN);
  wait(5000);
  LED_control(1,GELB);
  
//############################# Display ON/OFF Control 
  P5OUT &= 0xFE;  //CS low beginn of Data
  P5OUT |= 0x04;  // --> 1     
  LCDClock();     // SID = 1  Synchronisieren    
  LCDClock();  // SID = 1
  LCDClock        // SID = 1
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1 

        P5OUT &= 0xFB;   // --> 0
  LCDClock();     // SID = 0
  LCDClock();  // SID = 0
  LCDClock();  // SID = 0
  P5OUT &= 0xFB;   // --> 0        
  LCDClock();  // SID = 0    D0  
  P5OUT |= 0x04;   // --> 1  
  LCDClock();     // SID = 1    D1   
  LCDClock();  // SID = 1    D2
  LCDClock();  // SID = 1    D
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0    D4
  LCDClock();  // SID = 0    D5  
  LCDClock();  // SID = 0    D6
  LCDClock();  // SID = 0    D7
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0  
  LCDClock();  // SID = 0        
  LCDClock();  // SID = 0     
  LCDClock();  // SID = 0  
  
        P5OUT |= 0x01;  // CS high /

//############################# Display ON/OFF Control 
  
  LED_control(1,GRUEN);
  wait(5000);
  LED_control(1,GELB);
  
//############################# Mode 

  P5OUT &= 0xFE;  //CS low beginn of Data
  P5OUT |= 0x04;  // --> 1     
  LCDClock();   // SID = 1  Synchronisieren    
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1 

        P5OUT &= 0xFB;   // --> 0
  LCDClock();     // SID = 0
  LCDClock();  // SID = 0  
  LCDClock();  // SID = 0
  
  P5OUT |= 0x04;   // --> 1        
  LCDClock();  // SID = 1    D0    
  LCDClock();  // SID = 1    D1   
  LCDClock();  // SID = 1    D2
  LCDClock();  // SID = 1    D3
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();     // SID = 0    
  LCDClock();     // SID = 0    
  LCDClock();     // SID = 0    
  LCDClock();     // SID = 0
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0    D4
  LCDClock();  // SID = 0    D5  
  LCDClock();  // SID = 0    D6
  LCDClock();  // SID = 0    D7
  
  P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0  
  LCDClock();  // SID = 0        
  LCDClock();  // SID = 0     
  LCDClock();  // SID = 0  
  
    P5OUT |= 0x01;  // CS high /

//############################# Mode 
  LED_control(1,GRUEN);
  wait(5000);
  LED_control(1,GELB);

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


  c=0;
  while(c!=100)
    {
//############################# DATA 
        
P5OUT &= 0xFE;        //CS low beginn of Data
      wait(1000);
        
P5OUT |= 0x04;  // --> 1     
  LCDClock();   // SID = 1  Synchronisieren    
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1
  LCDClock();  // SID = 1 
    
P5OUT &= 0xFB;   // --> 0
  LCDClock();  // SID = 0    R/W
P5OUT |= 0x04;  // --> 1  
        LCDClock();  // SID = 1    RS
P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0
      
P5OUT &= 0xFB;   // --> 0      
  LCDClock();  // SID = 0    D0  schreibe f  
P5OUT |= 0x04;   // --> 1  
  LCDClock();  // SID = 1    D1   
  LCDClock();  // SID = 1    D2
P5OUT &= 0xFB;   // --> 0
  LCDClock();  // SID = 0    D3
      
P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0    
  LCDClock();  // SID = 0
P5OUT &= 0xFB;   // --> 0    
  LCDClock();  // SID = 0    D4
P5OUT |= 0x04;   // --> 1
  LCDClock();  // SID = 1    D5  
  LCDClock();  // SID = 1    D6
P5OUT &= 0xFB;   // --> 0
  LCDClock();  // SID = 0    D7
      
P5OUT &= 0xFB;   // --> 0    
        LCDClock();  // SID = 0  
        LCDClock();  // SID = 0        
        LCDClock();  // SID = 0     
  LCDClock();  // SID = 0  
      
  P5OUT |= 0x01;    // CS high /
  
//############################# DATA 

    LED_control(1,ROT);  
    wait(1000);
    c++;
    }
  
  LED_control(1,GRUEN);
}

void wait(unsigned int i) // delay function
{
  unsigned int j;
  for(j=0;j<i;j++);
}




void LCDClock(void)
{
     P5OUT |= 0x08;   //  High
   wait(1000);
  P5OUT &= 0xF7;  // Clock auf low
  wait(1000);
  P5OUT |= 0x08;   //  High
  wait(1000);
}

void LCD_control(unsigned int LCD, unsigned int lcd_value){
  if(LCD == HINTERGRUND){
    if(lcd_value == 0){
    P1OUT &= 0xDF; // Hintergrundbeleuchtung ausschalten
    }
    if(lcd_value >= 1){
    P1OUT |= 0x20; // Hintergrundbeleuchtung einschalten
    }
  }
  if(LCD == CONTRAST){
    DAC12_0DAT = lcd_value; //setze Kontrastwert
  }
  if(LCD == INIT){
    
  }  
}

  

Autor: Jack Braun (jackbraun)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Wichtige Regeln - erst lesen, dann posten!

Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, bitte.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.