What am I doing wrong? LPD8806 parallel output.

Status
Not open for further replies.
I have assembled an 8-panel LED wall using LPD8806 32 LED strips (744 total LED per strip) I have used the code that was linked to Starfucker (STRFKR) LED video wall build posted on Dokbot PDX.

We are using teensy++ 2.0, teendyduino and the correct LDP8806 library. The teensy Output pins are setup on port D0-D7 and port B0-D7. All ports have been tested for correct output via changing sketch to corresponding output pins.

Each wall panel is working successfully as an independent strip with FastLED, all sample sketch's and gLEDiator. (Can fake-out the wall to make some acceptable graphics for now)

I have not had any success with the 8-pin parallel code that was linked to the project or any other that I can find.

https://github.com/x37v/led_wall/blob/master/Serial2Parallel/Serial2Parallel.pde (unable to attach code, will later today)

Is there another library, sketch or step that I'm missing.

Apologize for being such a newbie. I am under an extreme time crunch, I committed to this build and have an entire high school band looking to me for a solution.
 
What software are you using on the PC to transmit to it? You realize it requires a very specific data format, right?

Paul,

The only software we're using on the PC is the gLEDiator java program, which outputs using its own protocol. I realize the code you've put together that's being used in the original built requires 64 bits to be transmitted to the teensy, but I'm not capable enough to know how much data is being output at once. Is there a specific program we should be using to output to the teensy?
 
Last edited:
Code

For reference, this is the code we've used with success on one panel. The trick is getting it to eight. The teensy doesn't have the memory to control all 5952 LPD8806 pixels at once on a single strand that I can figure out.

Teensy set to COM4 Serial, 8MHz.

Code:
/*
  This is a simple arduino sketch to use with your teensy2ledcontroller [0].
  You need to install the FastSPI_Led2 library [1] to compile this code.
  
  It is as straight forward as it gets.
  Open a Serial interface with 115200 Baud.
  Implement the Glediator [2] Protocol (0x01 startbyte followed by NUM_LEDS * 3 bytes of data).
  Display the data.
  Profit.
  


#include "FastLED.h"


//  how many pixels will connect in total?

#define NUM_LEDS 744



const int dataline = 0;
const int clockline = 20;

//const int startbutton = PIN_D3;


CRGB leds[NUM_LEDS];

void setup() {

        Serial.begin(1250000); // this is currently at 9600 .. but should be faster in the future .. just dont wonder if your current setup doesn't work out of the box with this baudrate
        Serial.println("Serial initalized!\nFeed me some data. njam njam.");
  
   	// For safety (to prevent too high of a power draw), the test case defaults to
   	// setting brightness to 25% brightness
        LEDS.setBrightness(255);


   	// LEDS.addLeds<LPD8806, dataline, clockline, GRB, DATA_RATE_MHZ(8)>(leds, NUM_LEDS);

   /*  
   //there is a button on the teensy2 ledcontroller.. but we dont use it for now..
   // initialize the pushbutton pin as an input:
   pinMode(startbutton, INPUT_PULLUP); 
   
   while (digitalRead(startbutton))
   {
     // show some animation till the button is pressed ..
   }
   
   */
   
}





// hacky hack implements blocking read() from serial.
int serialReadBlocking() {
  while (!Serial.available()) {}
  return Serial.read(); // one byte
}







void loop() {
   while (serialReadBlocking() != 1) {} // head of frame ...
   
//Serial.println("FRAMESTART");
   for (int i=0; i < NUM_LEDS; i++) {
     leds[i].r = serialReadBlocking();
     leds[i].g = serialReadBlocking();
     leds[i].b = serialReadBlocking();
   }
//Serial.println("FRAMEEND");   
    
   // display the received data on the matrix 
   FastSPI_LED.show();
}
 
we have downloaded Arduino 1.x.x (older version, will verify)

Our goal is to correctly run the 8-pin output before trying to have gLEDiator run the LED wall.

Again we have tested all 8-boards and the output of all 8-pins.

We are using the following code in our attempt to convert out serial signal into the 8-pin output.

/* Maximum speed USB Serial to Parallel Output
* http://www.pjrc.com/teensy/
* Copyright (c) 2012 Paul Stoffregen, PJRC.COM, LLC (paul@pjrc.com)
*
* This highly optimized example was inspired by Phillip Burgess's work at
* (http://www.paintyourdragon.com) with Adafruit's LPD light strips.
*
* Development of this code was funded by PJRC, from sales of Teensy boards.
* While you may use this code for any purpose, please consider buying Teensy,
* to support more optimization work in the future. :)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

// This example converts USB Serial to 8 bit parallel data. The computer MUST
// transmit in multiples of 64 bytes. The data bits are output on port D and
// clock signals are output in port B.

#include "usb_private.h"

#define NUM_DIGITAL_PINS 28

void setup() {
for (int i=0; i < NUM_DIGITAL_PINS; i++) {
pinMode(i, OUTPUT);
}
}

void loop() {
moveDataReallyFast(0xFF, 0x00);
}

// these delays allow for more reliable transmission on long wires
// 6 total "nop" are recommended for best speed
// 9 total may still allow max speed, if you're lucky...
// more than 9 will slow the speed

#define Setup() asm volatile("nop\nnop\nnop\n") // setup time before rising edge
#define Hold() asm volatile("nop\nnop\n") // hold time after falling edge
#define Pulse() asm volatile("nop\n") // lengthen clock pulse width

void moveDataReallyFast(byte strobeOn, byte strobeOff)
{
unsigned char c;

if (!usb_configuration) return;
UENUM = CDC_RX_ENDPOINT;
while (1) {
c = UEINTX;
if (!(c & (1<<RWAL))) {
if (c & (1<<RXOUTI)) UEINTX = 0x6B;
return;
}
c = UEDATX;
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
c = UEDATX;
Pulse();
PORTB = strobeOff;
Hold();
PORTD = c;
Setup();
PORTB = strobeOn;
UEINTX = 0x6B;
Pulse();
PORTB = strobeOff;
}
}

#if !defined (CORE_TEENSY_SERIAL)
#error "This program was designed for Teensy 2.0 using Tools > USB Type set to Serial. Please set the Tools > Board to Teensy 2.0 and USB Type to Serial, or delete this error to try using a different board."
#endif
 
Getting something...

//edit: HEY, so I read up on some more of the original project and ran across the software for GStreamer - looks like I need to figure that out... so that's my next problem.

Ok, so using this same code, we're able to get a strip of LEDs to flash randomly, or to get the whole board white, but I think there's got to be a problem with whatever I'm trying to output. Can anybody give me a suggestion for a program to run that will output 64 bits of data at a time via USB serial (com4) to our LED wall to show us that the code is working? Video is the goal... I know it's getting something, but how to make it intelligible is frustrating us.



Code:
/* Maximum speed USB Serial to Parallel Output
 * http://www.pjrc.com/teensy/
 * Copyright (c) 2012 Paul Stoffregen, PJRC.COM, LLC (paul@pjrc.com)
 * 
 * This highly optimized example was inspired by Phillip Burgess's work at
 * (http://www.paintyourdragon.com) with Adafruit's LPD light strips.
 *
 * Development of this code was funded by PJRC, from sales of Teensy boards.
 * While you may use this code for any purpose, please consider buying Teensy,
 * to support more optimization work in the future.  :-)
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

// This example converts USB Serial to 8 bit parallel data.  The computer MUST
// transmit in multiples of 64 bytes.  The data bits are output on port D and
// clock signals are output in port B.

#include "usb_private.h"

void setup() {
	for (int i=0; i < NUM_DIGITAL_PINS; i++) {
		pinMode(i, OUTPUT);
	}
}

void loop() {
	moveDataReallyFast(0xFF, 0x00);
}

// these delays allow for more reliable transmission on long wires
//   6 total "nop" are recommended for best speed
//   9 total may still allow max speed, if you're lucky...
//   more than 9 will slow the speed

#define Setup() asm volatile("nop\nnop\nnop\n")	// setup time before rising edge
#define Hold()  asm volatile("nop\nnop\n")	// hold time after falling edge
#define Pulse() asm volatile("nop\n")		// lengthen clock pulse width


/*
This firmware is tested on LPD8806.
the difference between LPD8806 and WS2801.
LPD8806: 7bit
WS2801: 8bit
the LPD8806 latch the data if some special frames are sent out (multiple zero bytes)
the WS2801 latch the data after the clock line is low for 500us.
*/
void moveDataReallyFast(byte strobeOn, byte strobeOff)
{
	unsigned char c;

	if (!usb_configuration) return;
	UENUM = CDC_RX_ENDPOINT;
	while (1) {
		c = UEINTX;
		if (!(c & (1<<RWAL))) {
		  // no data in buffer
			if (c & (1<<RXOUTI)) {
                          UEINTX = 0x6B;
                        }
			return;
		}

		c = UEDATX;       // take one byte out of the buffer, eead byte 0
		PORTD = c;        //DATA
		Setup();
		PORTB = strobeOn; //CLK

		c = UEDATX; //1
		Pulse();
		PORTB = strobeOff; //Only change data when clock is low!
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn; //Data is latched when clock goes high

		c = UEDATX; //2
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //3
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //4
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //6
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //7
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //8
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //10
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //12
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //14
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //18
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //20
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //23
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //26
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //29
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //32
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //33
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //35
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //37
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //38
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //40
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //43
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //45
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //47
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //50
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //53
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //56
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //60
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX;
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

		c = UEDATX; //63
		Pulse();
		PORTB = strobeOff;
		Hold();
		PORTD = c;
		Setup();
		PORTB = strobeOn;

                // Release the USB buffer
		UEINTX = 0x6B;
		Pulse();
		PORTB = strobeOff;
	}
}

#if !defined (CORE_TEENSY_SERIAL)
#error "This program was designed for Teensy 2.0 using Tools > USB Type set to Serial.  Please set the Tools > Board to Teensy 2.0 and USB Type to Serial, or delete this error to try using a different board."
#endif
 
Last edited:
Status
Not open for further replies.
Back
Top