]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2006-01-05 19:27:26 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Thu, 5 Jan 2006 19:27:26 +0000 (19:27 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Thu, 5 Jan 2006 19:27:26 +0000 (19:27 +0000)
HD44780 power supply from parport

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@609 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

drv_HD44780.c
lcd4linux.conf.sample

index 63a1cc7144e95ad43c17a5af776c0bf6408f54b0..f69816ece844990d47b2c5323043e65b7c83905c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drv_HD44780.c,v 1.60 2006/01/05 18:56:57 reinelt Exp $
+/* $Id: drv_HD44780.c,v 1.61 2006/01/05 19:27:26 reinelt Exp $
  *
  * new style driver for HD44780-based displays
  *
@@ -32,6 +32,9 @@
  *
  *
  * $Log: drv_HD44780.c,v $
+ * Revision 1.61  2006/01/05 19:27:26  reinelt
+ * HD44780 power supply from parport
+ *
  * Revision 1.60  2006/01/05 18:56:57  reinelt
  * more GPO stuff
  *
@@ -313,8 +316,9 @@ static int Capabilities;
 
 /* Timings */
 static int T_CY, T_PW, T_AS, T_AH;
-static int T_INIT1, T_INIT2, T_EXEC, T_WRCG, T_CLEAR, T_HOME, T_ONOFF;
-
+static int T_POWER, T_INIT1, T_INIT2, T_EXEC, T_WRCG, T_CLEAR, T_HOME, T_ONOFF;
+static int T_GPO_ST, T_GPO_PW;
+static int T_POWER;
 
 static int Bits = 0;
 static int numControllers = 0;
@@ -333,6 +337,7 @@ static unsigned char SIGNAL_ENABLE3;
 static unsigned char SIGNAL_ENABLE4;
 static unsigned char SIGNAL_BACKLIGHT;
 static unsigned char SIGNAL_GPO;
+static unsigned char SIGNAL_POWER;
 
 /* maximum time to wait for the busy-flag (in usec) */
 #define MAX_BUSYFLAG_WAIT 10000
@@ -718,6 +723,8 @@ static int drv_HD_PP_load(const char *section)
            return -1;
        if ((SIGNAL_GPO = drv_generic_parport_hardwire_ctrl("GPO", "GND")) == 0xff)
            return -1;
+       if ((SIGNAL_POWER = drv_generic_parport_hardwire_ctrl("POWER", "GND")) == 0xff)
+           return -1;
     } else {
        if (Bits == 8) {
            if ((SIGNAL_RS = drv_generic_parport_wire_ctrl("RS", "AUTOFD")) == 0xff)
@@ -746,11 +753,13 @@ static int drv_HD_PP_load(const char *section)
            if ((SIGNAL_ENABLE4 = drv_generic_parport_wire_data("ENABLE4", "GND")) == 0xff)
                return -1;
        }
-       /* backlight and GPO are always control signals */
+       /* backlight GPO and power are always control signals */
        if ((SIGNAL_BACKLIGHT = drv_generic_parport_wire_ctrl("BACKLIGHT", "GND")) == 0xff)
            return -1;
        if ((SIGNAL_GPO = drv_generic_parport_wire_ctrl("GPO", "GND")) == 0xff)
            return -1;
+       if ((SIGNAL_POWER = drv_generic_parport_wire_ctrl("POWER", "GND")) == 0xff)
+           return -1;
     }
 
     /* clear capabilities if corresponding signal is GND */
@@ -773,6 +782,15 @@ static int drv_HD_PP_load(const char *section)
     T_AS = timing(Name, section, "AS", 140, "ns");     /* Address setup time */
     T_AH = timing(Name, section, "AH", 20, "ns");      /* Address hold time */
 
+    /* GPO timing */
+    if (SIGNAL_GPO != 0) {
+       T_GPO_ST = timing(Name, section, "GPO_ST", 20, "ns");   /* 74HCT573 set-up time */
+       T_GPO_PW = timing(Name, section, "GPO_PW", 230, "ns");  /* 74HCT573 enable pulse width */
+    } else {
+       T_GPO_ST = 0;
+       T_GPO_PW = 0;
+    }
+    
     /* HD44780 execution timings [microseconds]
      * as these values differ from spec to spec,
      * we use the worst-case default values, but allow
@@ -785,18 +803,33 @@ static int drv_HD_PP_load(const char *section)
     T_CLEAR = timing(Name, section, "CLEAR", 2250, "us");      /* Clear Display */
     T_HOME = timing(Name, section, "HOME", 2250, "us");        /* Return Cursor Home */
     T_ONOFF = timing(Name, section, "ONOFF", 2250, "us");      /* Display On/Off Control */
+    
+    /* Power-on delay */
+    if (SIGNAL_POWER != 0) {
+       T_POWER = timing(Name, section, "POWER", 500, "ms");
+    } else {
+       T_POWER = 0;
+    }
 
     /* clear all signals */
     if (Bits == 8) {
-       drv_generic_parport_control(SIGNAL_RS |
-                                   SIGNAL_RW | SIGNAL_ENABLE | SIGNAL_ENABLE2 | SIGNAL_ENABLE3 | SIGNAL_ENABLE4 | SIGNAL_BACKLIGHT | SIGNAL_GPO, 0);
+       drv_generic_parport_control(SIGNAL_RS | SIGNAL_RW | 
+                                   SIGNAL_ENABLE | SIGNAL_ENABLE2 | SIGNAL_ENABLE3 | SIGNAL_ENABLE4 |
+                                   SIGNAL_BACKLIGHT | SIGNAL_GPO | SIGNAL_POWER, 0);
     } else {
+       drv_generic_parport_control(SIGNAL_BACKLIGHT | SIGNAL_GPO | SIGNAL_POWER, 0);
        drv_generic_parport_data(0);
     }
 
     /* set direction: write */
     drv_generic_parport_direction(0);
 
+    /* raise power pin */
+    if (SIGNAL_POWER != 0) {
+       drv_generic_parport_control(SIGNAL_POWER, SIGNAL_POWER);
+       udelay (1000*T_POWER);
+    }
+
     /* initialize *all* controllers */
     if (Bits == 8) {
        drv_HD_PP_command(allControllers, 0x30, T_INIT1);       /* 8 Bit mode, wait 4.1 ms */
@@ -851,6 +884,7 @@ static void drv_HD_PP_stop(void)
                                    SIGNAL_RW | SIGNAL_ENABLE | SIGNAL_ENABLE2 | SIGNAL_ENABLE3 | SIGNAL_ENABLE4 | SIGNAL_BACKLIGHT | SIGNAL_GPO, 0);
     } else {
        drv_generic_parport_data(0);
+       drv_generic_parport_control(SIGNAL_BACKLIGHT | SIGNAL_GPO | SIGNAL_POWER, 0);
     }
 
     drv_generic_parport_close();
@@ -1141,11 +1175,11 @@ static int drv_HD_GPO(const int num, const int val)
     drv_generic_parport_data(GPO);
 
     /* 74HCT573 set-up time */
-    ndelay(20);
+    ndelay(T_GPO_ST);
 
     /* send data */
-    /* 74HCT573 enable pulse width = 24ns */
-    drv_generic_parport_toggle(SIGNAL_GPO, 1, 230);
+    /* 74HCT573 enable pulse width */
+    drv_generic_parport_toggle(SIGNAL_GPO, 1, T_GPO_PW);
 
     return v;
 }
index 5d33622feccf489c3a10cf5029cca932fc8eac4a..355830b42032763151c7fdb137ec83d0c754395f 100644 (file)
@@ -118,6 +118,7 @@ Display HD44780-generic {
        ENABLE  'STROBE'
        ENABLE2 'GND'
        GPO     'INIT'
+       POWER   'GND'
     }
 }
 
@@ -135,6 +136,7 @@ Display HD44780-winamp {
        ENABLE  'STROBE'
        ENABLE2 'GND'
        GPO     'GND'
+       POWER   'GND'
     }
     Timing {
        # low-level communication [ns]
@@ -150,6 +152,11 @@ Display HD44780-winamp {
        CLEAR 2250  # Clear Display
        HOME  2250  # Return Cursor Home
        ONOFF 2250  # Display On/Off Control
+       # GPO timing [ns]
+       GPO_ST  20  # 74HCT573 set-up time
+       GPO_PW 230  # 74HCT573 enable pulse width
+       # Power supply timing [ms]
+       POWER  500  # power-on delay
     }
 }
 
@@ -167,6 +174,7 @@ Display WDC2704M {
        ENABLE  'STROBE'
        ENABLE2 'SLCTIN'
        GPO     'GND'
+       POWER   'GND'
     }
 }
 
@@ -183,6 +191,7 @@ Display HD44780-kernelconcepts {
        ENABLE  'STROBE'
        ENABLE2 'GND'
        GPO     'GND'
+       POWER   'GND'
     }
 }
 
@@ -198,6 +207,7 @@ Display SC1602D {
        RS     'AUTOFD'
        ENABLE 'STROBE'
        GPO    'INIT'
+       POWER  'GND'
     }
 }
 
@@ -908,12 +918,12 @@ Layout testMySQL {
 #Display 'SerDispLib'
 #Display 'LCD-Linux'
 #Display 'LCD2041'
-Display 'LK202'
+#Display 'LK202'
 #Display 'LK204'
 #Display 'MI240'
 #Display 'CW12232'
 #Display 'HD44780-generic'
-#Display 'HD44780-WinAmp'
+Display 'HD44780-WinAmp'
 #Display 'WDC2704M'
 #Display 'SC1602D'
 #Display 'LCM-162'