Gordons Projects

--> Projects Top-Level GIT

Added in the SN3218 LED controller IC - as used in the PiGlow
authorGordon Henderson <projects@drogon.net>
Tue, 23 Jul 2013 16:52:27 +0000 (17:52 +0100)
committerGordon Henderson <projects@drogon.net>
Tue, 23 Jul 2013 16:52:27 +0000 (17:52 +0100)
so write a little test program with it too.
Updated gpio to use the sn3218 too.

examples/Makefile
examples/piglow.c [new file with mode: 0644]
gpio/extensions.c
wiringPi/Makefile
wiringPi/sn3218.c [new file with mode: 0644]
wiringPi/sn3218.h [new file with mode: 0644]

index 8cc256f..8848b33 100644 (file)
@@ -42,7 +42,7 @@ SRC   =       blink.c blink8.c blink12.c                                      \
                nes.c                                                           \
                softPwm.c softTone.c                                            \
                delayTest.c serialRead.c serialTest.c okLed.c ds1302.c          \
-               rht03.c
+               rht03.c piglow.c
 
 OBJ    =       $(SRC:.c=.o)
 
@@ -139,6 +139,10 @@ ds1302:    ds1302.o
        @echo [link]
        @$(CC) -o $@ ds1302.o $(LDFLAGS) $(LDLIBS)
 
+piglow:        piglow.o
+       @echo [link]
+       @$(CC) -o $@ piglow.o $(LDFLAGS) $(LDLIBS)
+
 
 .c.o:
        @echo [CC] $<
diff --git a/examples/piglow.c b/examples/piglow.c
new file mode 100644 (file)
index 0000000..d3fe4b9
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * piglow.c:
+ *     Very simple demonstration of the PiGlow board.
+ *     This uses the SN3218 directly - soon there will be a new PiGlow
+ *     devLib device which will handle the PiGlow board on a more easy
+ *     to use manner...
+ *
+ * Copyright (c) 2013 Gordon Henderson.
+ ***********************************************************************
+ * This file is part of wiringPi:
+ *     https://projects.drogon.net/raspberry-pi/wiringpi/
+ *
+ *    wiringPi is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU Lesser General Public License as published by
+ *    the Free Software Foundation, either version 3 of the License, or
+ *    (at your option) any later version.
+ *
+ *    wiringPi is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU Lesser General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Lesser General Public License
+ *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <sn3218.h>
+
+#define        LED_BASE        533
+
+int main (void)
+{
+  int i, j ;
+
+  wiringPiSetupSys () ;
+
+  sn3218Setup (LED_BASE) ;
+
+  for (;;)
+  {
+    for (i = 0 ; i < 256 ; ++i)
+      for (j = 0 ; j < 18 ; ++j)
+       analogWrite (LED_BASE + j, i) ;
+
+    for (i = 255 ; i >= 0 ; --i)
+      for (j = 0 ; j < 18 ; ++j)
+       analogWrite (LED_BASE + j, i) ;
+  }
+}
index 8be0ec0..c7e5308 100644 (file)
@@ -49,6 +49,7 @@
 #include <mcp3004.h>
 #include <mcp4802.h>
 #include <mcp3422.h>
+#include <sn3218.h>
 
 #include "extensions.h"
 
@@ -467,6 +468,20 @@ static int doExtensionMcp4802 (char *progName, int pinBase, char *params)
 
 
 /*
+ * doExtensionSn3218:
+ *     Analog Output (LED Driver)
+ *     sn3218:base
+ *********************************************************************************
+ */
+
+static int doExtensionSn3218 (char *progName, int pinBase, char *params)
+{
+  sn3218Setup (pinBase) ;
+  return TRUE ;
+}
+
+
+/*
  * doExtensionMcp3422:
  *     Analog IO
  *     mcp3422:base:i2cAddr
@@ -531,6 +546,7 @@ struct extensionFunctionStruct extensionFunctions [] =
   { "mcp3422",         &doExtensionMcp3422     },
   { "max31855",                &doExtensionMax31855    },
   { "max5322",         &doExtensionMax5322     },
+  { "sn3218",          &doExtensionSn3218      },
   { NULL,              NULL                    },
 } ;
 
index 05dedec..ed4f6be 100644 (file)
@@ -54,6 +54,7 @@ SRC   =       wiringPi.c                                              \
                pcf8574.c pcf8591.c                                     \
                mcp3002.c mcp3004.c mcp4802.c mcp3422.c                 \
                max31855.c max5322.c                                    \
+               sn3218.c                                                \
                drc.c
 
 OBJ    =       $(SRC:.c=.o)
@@ -112,6 +113,7 @@ install-headers:
        @install -m 0644 sr595.h                $(DESTDIR)$(PREFIX)/include
        @install -m 0644 pcf8574.h              $(DESTDIR)$(PREFIX)/include
        @install -m 0644 pcf8591.h              $(DESTDIR)$(PREFIX)/include
+       @install -m 0644 sn3218.h               $(DESTDIR)$(PREFIX)/include
 
 .PHONEY:       install
 install:       $(DYNAMIC) install-headers
@@ -151,6 +153,7 @@ uninstall:
        @rm -f $(DESTDIR)$(PREFIX)/include/sr595.h
        @rm -f $(DESTDIR)$(PREFIX)/include/pcf8574.h
        @rm -f $(DESTDIR)$(PREFIX)/include/pcf8591.h
+       @rm -f $(DESTDIR)$(PREFIX)/include/sn3218.h
        @rm -f $(DESTDIR)$(PREFIX)/lib/libwiringPi.*
        @ldconfig
 
@@ -184,4 +187,5 @@ mcp4802.o: wiringPi.h wiringPiSPI.h mcp4802.h
 mcp3422.o: wiringPi.h wiringPiI2C.h mcp3422.h
 max31855.o: wiringPi.h wiringPiSPI.h max31855.h
 max5322.o: wiringPi.h wiringPiSPI.h max5322.h
+sn3218.o: wiringPi.h wiringPiI2C.h sn3218.h
 drc.o: wiringPi.h wiringSerial.h drc.h
diff --git a/wiringPi/sn3218.c b/wiringPi/sn3218.c
new file mode 100644 (file)
index 0000000..7ceb156
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * sn3218.c:
+ *     Extend wiringPi with the SN3218 I2C LEd Driver
+ *     Copyright (c) 2012-2013 Gordon Henderson
+ ***********************************************************************
+ * This file is part of wiringPi:
+ *     https://projects.drogon.net/raspberry-pi/wiringpi/
+ *
+ *    wiringPi is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU Lesser General Public License as
+ *    published by the Free Software Foundation, either version 3 of the
+ *    License, or (at your option) any later version.
+ *
+ *    wiringPi is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU Lesser General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Lesser General Public
+ *    License along with wiringPi.
+ *    If not, see <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <wiringPiI2C.h>
+
+#include "sn3218.h"
+
+/*
+ * myAnalogWrite:
+ *     Write analog value on the given pin
+ *********************************************************************************
+ */
+
+static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  int fd   = node->fd ;
+  int chan = 0x01 + (pin - node->pinBase) ;
+  
+  wiringPiI2CWriteReg8 (fd, chan, value & 0xFF) ;      // Value
+  wiringPiI2CWriteReg8 (fd, 0x16, 0x00) ;              // Update
+}
+
+/*
+ * sn3218Setup:
+ *     Create a new wiringPi device node for an sn3218 on the Pi's
+ *     SPI interface.
+ *********************************************************************************
+ */
+
+int sn3218Setup (const int pinBase)
+{
+  int fd ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((fd = wiringPiI2CSetup (0x54)) < 0)
+    return fd ;
+
+// Setup the chip - initialise all 18 LEDs to off
+
+//wiringPiI2CWriteReg8 (fd, 0x17, 0) ;         // Reset
+  wiringPiI2CWriteReg8 (fd, 0x00, 1) ;         // Not Shutdown
+  wiringPiI2CWriteReg8 (fd, 0x13, 0x3F) ;      // Enable LEDs  0- 5
+  wiringPiI2CWriteReg8 (fd, 0x14, 0x3F) ;      // Enable LEDs  6-11
+  wiringPiI2CWriteReg8 (fd, 0x15, 0x3F) ;      // Enable LEDs 12-17
+  wiringPiI2CWriteReg8 (fd, 0x16, 0x00) ;      // Update
+  
+  node = wiringPiNewNode (pinBase, 18) ;
+
+  node->fd          = fd ;
+  node->analogWrite = myAnalogWrite ;
+
+  return 0 ;
+}
diff --git a/wiringPi/sn3218.h b/wiringPi/sn3218.h
new file mode 100644 (file)
index 0000000..580d5f9
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * sn3218.c:
+ *     Extend wiringPi with the SN3218 I2C LED driver board.
+ *     Copyright (c) 2012-2013 Gordon Henderson
+ ***********************************************************************
+ * This file is part of wiringPi:
+ *     https://projects.drogon.net/raspberry-pi/wiringpi/
+ *
+ *    wiringPi is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU Lesser General Public License as
+ *    published by the Free Software Foundation, either version 3 of the
+ *    License, or (at your option) any later version.
+ *
+ *    wiringPi is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU Lesser General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Lesser General Public
+ *    License along with wiringPi.
+ *    If not, see <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int sn3218Setup (int pinBase) ;
+
+#ifdef __cplusplus
+}
+#endif