-         

Ergebnis 1 bis 3 von 3

Thema: 18f242 displayansteuerung in c

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.04.2008
    Beiträge
    5

    18f242 displayansteuerung in c

    Anzeige

    Hi !
    Ich wollte mal probieren mit c (c18-compiler von microchip) ein mein display anzusteuern. aber irgendwie klappt wohl die Initialisierung des Displays nicht. Aber ich finde den Fehler nicht Könnt ihr da vielleicht mal drüber gucken? danke schonmal
    Gruß

    Code:
    /** I N C L U D E S **********************************************************/
    
    #include <p18f242.h>
    
    #include "delays.h"
    
     
    
    /** C O N F I G U R A T I O N ************************************************/
    
    #pragma config OSC  = HS   //CPU=20 MHz
    
    #pragma config PWRT = ON
    
    #pragma config BOR  = OFF
    
    #pragma config WDT  = OFF  //Watchdog Timer
    
    #pragma config LVP  = OFF  //Low Voltage ICSP
    
    
    
    /** D E C L A R A T I O N S **************************************************/
    
    #define XRS  LATCbits.LATC4
    
    #define XWR  LATCbits.LATC5
    
    #define E    LATCbits.LATC6
    
    #define text HALLO
    
    
    
    #define DISPLAY_BREITE 20
    
    
    
    /** C O D E **************************************************/
    
    #pragma code
    
    
    
    void LCD_Init(void);
    
    void LCD_send_cmd(char command);
    
    void send(void);
    
    void main(void)
    
    {
    
      LATB  = 0x00; 
    
      TRISB = 0x00;
    
      LATC  = 0x00;
    
      TRISC = 0x8f; //10001111, RC0 - RC3 input, RC4 - RC6 output
    
      LCD_Init();
    
    } //end main 
    
    
    
    
    
    //******************************** LCD ************************************
    //*************************************************************************
    //	LCD_Init():
    //
    //	Initialisierung des LCD-Displays.
    //
    //*************************************************************************
    
    void LCD_Init()
    {
    
    	LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
    	LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
    	LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
    	LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
    	LCD_send_cmd(0x0E); // Display On: ON, Cursor ON, ohne Blinken
    	LCD_send_cmd(0x01); // clear display
    	LCD_send_cmd(0x06); // Entry Mode Set: inkrementieren / Cursor automatisch
    
    } // LCD_Init
    
    //*************************************************************************
    //	LCD_send_char(char zeichen):
    //
    //	Ausgabe des Zeichens <zeichen> an der aktuellen Cursorposition.
    //
    //*************************************************************************
    
    void LCD_send_char(char zeichen)
    {
    
    
    	LATB  = zeichen;
    	send();
    	Delay10KTCYx(63);
    
    
    } // LCD_send_char
    
    //*************************************************************************
    //	LCD_send_cmd(char command):
    //
    //	Senden des Befehls <command> zum LCD-Display
    //
    //*************************************************************************
    
    void LCD_send_cmd(char command)
    {
    
    
    	LATB 	= command;
    	send();
    	Delay10KTCYx(255);
    
    
    } // LCD_send_cmd
    
    //*************************************************************************
    //	LCD_outtext(char x, char y,const char *text):
    //
    //	Ausgabe von <text> an der aktuellen Cursorposition.
    //
    //*************************************************************************
    
    void LCD_outtext(char x, char y, const char *text)
    {
    
    	switch(y)
    	{
    		case 1:
    
    			LCD_send_cmd(x + 0x07F);
    			break;
    		
    		case 2:
    			LCD_send_cmd(x + 0x0BF);
    			break;
    
    		case 3:
    			LCD_send_cmd(x + 0x093);
    			break;
    			
    		case 4:
    			LCD_send_cmd(x + 0x0D3);
    			break;
    			
    	} // switch(y)
    
    	while(*text && (x++ <= DISPLAY_BREITE)) LCD_send_char(*text++);
    	
    } // LCD_outtext
    
    
    
    void send()
    
    {
    
    	XWR   	= 0;
    
    	XRS   	= 1;
    
    	E	 	= 1;
    
    	Delay10TCYx(1);
    
    	E		= 0;
    
    	XRS		= 0;
    	XWR   	= 1;
    
    }

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    07.04.2008
    Beiträge
    5
    keine antwort?
    Also Grundsätzlich ist rigendwas mit der Initialisierungsroutine falsch denke ich weil ich nur 2 voll ausgefüllte zeilen auf dem display sehe...kennt sich da keiner mit aus?

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Ich hab zwar nicht den C18 compiler genutzt, aber so ein Fehler tritt bei mir auf, wenn ich die Zeiträume zwischen den Aufrufen nicht einhalte. Stimmt das bei dir wirklich? du verwendest ja immer die gleiche LCD_send_cmd Routine. Gerade bei der Initialisierung braucht er aber mehr Zeit, als später beim Betrieb. Delay10KTCYx 255 bedeutet eine verzögerung um 2.550.000 Taktzyklen? Bei was für nem Takt?
    Stimmen die Wartezeiten zwischen dem Einschalten des Enable-Pins und dem Ausschalten, das Display braucht einige µs um die Daten zu übernehmen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •