Advertisement
Guest User

ftdi bitbang tutorial

a guest
Jul 8th, 2014
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. /* pwmchase.c: 8-bit PWM on 4 LEDs using FTDI cable or breakout.
  2.    This example uses the D2XX API.
  3.    Minimal error checking; written for brevity, not durability. */
  4.  
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <math.h>
  8. #include <ftd2xx.h>
  9.  
  10. #define LED1 0x08  /* CTS (brown wire on FTDI cable) */
  11. #define LED2 0x01  /* TX  (orange) */
  12. #define LED3 0x02  /* RX  (yellow) */
  13. #define LED4 0x14  /* RTS (green on FTDI) + DTR (on SparkFun breakout) */
  14.  
  15. int main()
  16. {
  17.     int i,n;
  18.     unsigned char data[255 * 256];
  19.     FT_HANDLE handle;
  20.     DWORD bytes;
  21.  
  22.     /* Generate data for a single PWM 'throb' cycle */
  23.     memset(data, 0, sizeof(data));
  24.     for(i=1; i<128; i++) {
  25.         /* Apply gamma correction to PWM brightness */
  26.         n = (int)(pow((double)i / 127.0, 2.5) * 255.0);
  27.         memset(&data[i * 255], LED1, n);         /* Ramp up */
  28.         memset(&data[(256 - i) * 255], LED1, n); /* Ramp down */
  29.     }  
  30.  
  31.     /* Copy data from first LED to others, offset as appropriate */
  32.     n = sizeof(data) / 4;
  33.     for(i=0; i<sizeof(data); i++)
  34.     {
  35.         if(data[i] & LED1) {
  36.             data[(i + n    ) % sizeof(data)] |= LED2;
  37.             data[(i + n * 2) % sizeof(data)] |= LED3;
  38.             data[(i + n * 3) % sizeof(data)] |= LED4;
  39.         }
  40.     }  
  41.  
  42.     /* Initialize, open device, set bitbang mode w/5 outputs */
  43.     if(FT_Open(0, &handle) != FT_OK) {
  44.         puts("Can't open device");
  45.         return 1;
  46.     }
  47.     FT_SetBitMode(handle, LED1 | LED2 | LED3 | LED4, 1);
  48.     FT_SetBaudRate(handle, 9600);  /* Actually 9600 * 16 */
  49.  
  50.     /* Endless loop: dump precomputed PWM data to the device */
  51.     for(;;) FT_Write(handle, &data, (DWORD)sizeof(data), &bytes);
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement