NerdKits Site is Back!!

In case any fellow NerdKit owner is out there reading this, the site is back up…  Well partially right now.  Currently none of the member areas (Forums, Library, Member page) load.  I just get a 503 Error.  Also on the Store page, there are MySQL errors posted.  I’m guessing the database is still pretty mucked up.  At least they got the front end pages that didn’t use the database active to let people know they are still around.  This is definitely a step in the right direction.

Welcome Back Nerdkits.com 🙂

Rick

 

Posted in News | Leave a comment

To fellow Nerdkit users…

Many of you may have noticed the Nerdkits.com website has been offline for over a day now.  Do not worry though, the site is not going to disappear, they are just having some problems that they are working to fix.   I emailed Humberto Evans about this and this was his response.

“Hi Rick,

Our server had a severe system failure yesterday. We are in the process of recovering it.

Humberto”

I don’t know when the site will be back up and running, but I’m sure they are doing what they can to get it back.

 

Posted in News | Leave a comment

Update to the JY-MCU 3208 Lattice clock

I had a comment from Håkon Nessjøen stating that he had success in shrinking the code to fit in the standard mega8 onboard.  He stated that he had removed the links to the vprintf and vscanf libraries in the makefile and the code shrunk dramatically.  Thanks Håkon for pointing that out, that was a great catch.

I set out this morning to do this myself and am happy to say I was successful.  There were other changes that had to be made to the code to make it functional on the mega8.  Unfortunately I am pressed for time this morning so I will document those changes in detail later.  However, I have the updated code available for download here ( jy-mcu_mega8.zip ).

Here is a quick rundown of the changes I made:

  • Changed fuse settings in mega8 to turn off div/8 fuse to make it run at 8MHz
  • Changed F_CPU to 8000000 in 8x32matrix.c
  • Changed delay.c for only 2 NOP’s for a 1us delay at 8MHz
  • Changed timer naming for mega8 in 8x32matrix.c
  • Commented out all ADC functions and temperature reading in 8x32matrix.c
  • Re-worded demo text in 8x32matrix.c
  • Added extra delay to ledarray_flash to allow for on/off time setting in 8x32matrix.c
  • Removed linker flags in makefile for vprintf and vscanf
  • Added avr-size to makefile to see size after compile

I’ll cover these in detail at a later time, hope this helps some of you out who didn’t feel comfortable replacing the mcu.

Posted in News | 12 Comments

New board for I2C LCD Backpack

Anyone who has seen my unfinished post about the I2C LCD backpack probably thinks that is a long time forgotton project. Not really, I just wanted to take it a step farther than I had and didn’t. That is until now. I just discovered a very reasonable prototype PCB manufacturer. Where for a board that is less than 2″ x 2″, you can get ten boards for less than $20 shipped. Yes, less than $2 per board shipped. When I found that, I couldn’t pass it up. So, I finalized my board design and ordered them.

These boards are purchased from and shipped from China so I was expecting a long delay. I must say though, I was pleasantly surprised. I placed my order on February 4th and sent my files to them via email. I got a response from them that they had sent my designs to the fabricator on the 5th. On the 14th, they flagged my order as “Delivered” (Really meant shipped). On the 20th, Hong Kong tracking said it left Hong Kong. And on the 27th, they were at my home in N/W Indiana. Pretty good for a start to finish.

The boards look great too. Here is a shot of the front and back of the board.

Blank board top

IC side of board

Bottom of board

Back side

As you can see, the boards look good.

I did have one down side.  When I designed my backpack, I used a port expander I had sourced from Maxim.  It was a MAX7318AWG.  Since then, this part doesn’t seem to be available anywhere.  While there is a suitable pin for pin alternative, the MAX7311AWG, they are a bit pricey where I did find them.  Oh well, at least the boards will be usable :D.

I had on hand all the components to build the board except for the SMD Potentiomenter for contrast.  I know however, as long as the contrast line is biased to ground with a 1K resistor that the contrast works.  So, I just installed a 1/8W 1K resistor in place of the pot.

Here is the end product.

Board Top

IC side

Bottom

Bottom

Jumpers

Solder Jumpers for Pullups (Above R2 & R3)

Contrast Resistor

Contrast Resistor (1K) Tied from GND to LCD Pin 3

Installed

Board Installed in NerdKit LCD

Wired

Board Wired to NerdKit

Running

Showing familiar welcome screen.

I have zipped up the files for the board, the Gerbers for manufacture (If you want), and the test program and libraries.  They can be downloaded here http://www.rs-micro.com/files/I2C_LCD.zip.

This project was designed around a NerdKit.  The library files should be placed in the same folder as the default NerdKit libraries (libnerdkits).

Posted in Projects | 7 Comments

Beginning of JY-MCU-3208 code

Let me preface this post with the statement that the code found here is written with the assumption of a modified display (larger mcu and higher speed crystal). It also uses an LM34 Temperature IC placed where the DS18B20 would go.

Let me continue with that modification. As you know if you already have one of these boards, is that there are provisions for several extra components to be added. One such component is a Dallas Semiconductor DS18B20 Temperature sensor IC. This sensor looks like a transistor, uses the Dallas One Wire protocol, and has 3 pins VCC, Data, and GND.


I then looked at the schematic and noticed that the data output for the DS18B20 went to one of the ADC pins on the microcontroller (Notice the DQ line is ADC2 on the MEGA8).


This got me thinking… since I had some LM34 Temperature IC’s handy could I substitute that for the DS18B20? Again back to the schematic, there was only one thing that would be of issue. That would be the resistor that acts as a pullup for the data line of the DS18B20.


Once I removed the LM34 would be wired correctly. So I located that resistor on the board (which was a 10K instead of the 5.1K the schematic shows) and removed it.


I then installed the LM34 and it works perfectly.




That’s all the hardware changes I’ve made so far. As for coding this, a while back I had purchased some Sure Electronics 16×24 displays and had sourced some libraries for driving the HTC1632C on them. I found one that was pretty stripped down and went to work.

The job I had before me was this. I wanted to be able to use the routines I had written for my other LED Array projects. This meant whatever driver library I came up with, I had to be able to manipulate the display as an x/y grid in a memory array that would be compatible with my current functions. I had to be able to read the ADC value and interpret that to characters on the display. I wanted to use my current 5×8 font file.

You probably don’t care much about the how I went about all this, but suffice it to say, most of it was pretty simple except one part. That was coming up with the formula for determining what memory location in the HT1632C controller the data needed stored in. I spent hours on that one with many diagrams but finally it all came together.

This is the result so far.


As you can see, the special effects all seem to work well.

If you are interested in the files, they are available for download HERE FOR THE SOURCE and HERE FOR THE SCHEMATIC

There you have it. One thing, this source as compiled will not fit in the mega8 onboard a stock display. You may be able to modify it by eliminating some of the functions to shrink it down enough to fit, but I haven’t tried that.

Posted in News | 18 Comments

Dealextreme JY-MCU 3208 LED display

I’ve always been attracted to blinky objects… As I’m sure you can tell from my earlier posts. Well, a few months ago, I came across another LED array panel that caught my eye. The array touted a 32 x 8 matrix with an onboard HT1632C controller. OK I’m thinking, that really isn’t anything new, Sure Electronics has sold these for years. Then I looked a little closer and realized it also had an onboard ATMEGA8 microcontroller as well as provisions for several other addons. All this for less than $13 US. So, I ordered a couple and after a LONG wait, finally got them over 3 months later.

The board I’m speaking of is sold by DealExtreme.com and is their JY-MCU 3208 Lattice Clock HT1632C Driver with MCU & Support Secondary Development

Here is a photo of the board…


–Front—

–Back—

The board out of the box runs as a clock calendar with no battery backup and a few Chinese characters thrown into the date portion of the display. While this provides a decent demonstration of what the board can do, I wanted a little more. So on to my modifications.

The 1st thing I wanted to change was the microcontroller. While an ATMEGA8 is not a bad micro, I wanted more room for the program and data. Also, since the board has provisions for a real time clock IC, I decided it would be nice to replace the 32.768KHz crystal with a faster one.

Here is a close-up of the ATMEGA8L mcu onboard:


I really hate sacrificing good hardware and luckily with ChipQuik, a surface mount device like this can easily be removed with a standard soldering iron. If you aren’t familiar with ChipQuik, it’s a special metal allow with a low melting point that will mix with the existing solder and help keep it fluid longer. You simple add some of the ChipQuik flux, melt a little ChipQuik alloy over all the pins, go over them a few times and the SMD component will be free and can easily be removed. It works great. While I was removing the ATMEGA8L, I also removed the crystal. As you can see, the results were good. After a bit of flux cleanup with some alcohol I had a nice clean board ready for my new microcontroller and crystal.


I also used my solder sucker to clear the thru holes for the crystal.


At this point, I was ready to mount my new components. The parts I purchased were an ATMEGA328P-AU microcontroller, an 18.432MHz crystal in a cylinder case, and a couple of 10pf 805 smd caps for the load capacitors.


And here are the final results after installing the new parts.


Ok, so much for the hardware side of things. The next step will be programming this baby and get it running similarly to the 8×40 and 8×80 displays I’ve worked with here.

Until then…

Posted in News | 7 Comments

The Beginning of the 16 Row Display.

The parts have arrived for the interface board and I was able to squeeze enough time to begin the next step, making the display double tall – 16 rows.

I knew the 1st hurdle was going to be hardware so that was where I concentrated my effort for this 1st step.  My goal was to build an interface that would go between my micro-controller and the display.  This interface would have the row decoders on it as well as the differential line driver IC for the clock and data lines.

Luckily, the logic for this circuit would be pretty simple.  By using a 74HC238 3 to 8 decoder I could take a 3 bit binary output from the micro-controller and turn on a single output representing that number.  By cascading these, I could double the amout of ouputs to 16 and only need a 4 bit binary number.  This will be the way I go for the row drivers.

The 74HC238 has 3 address inputs, 3 enable lines, and 8 outputs (active High).  Two of the enables are active low while 1 is active high.  Using these 3 enables you can cascade the decoder to create a larger decoder.

This is the pinout of the 74HC238.

And the Chip layout.

To cascade the 3 to 8 into a 4 to 16, you simply connect the enables as follows:

Connect E1 on both chips to Ground, Connect E2 on IC1 to E3 on IC2, Connect E3 on IC1 to VCC, Connect E2 on IC2 to Ground.  The E2/E3 connection becomes your 4th address input.  When this connection is logic low, IC1 will be active and IC2 will be off, when this connection goes logic High, IC1 will be off while IC2 is active.  I also used E1 as an enable input for both chips so for my circuit, I did not tie these to ground.  Instead I ran them to the micro-controller to allow me to turn off all rows of the display during data transfer.

The other chip I put on the board was the SN75183 differential driver that I described in an earlier post.  Beyond that, just 3 bypass caps and some headers and wire finished the board out.

Here is a schematic of the final prototype.

You can get a better view of how the decoders are cascaded and the connection of the SN75183.  The Clock and Data lines are just paralleled between the two output connectors (SV2 & SV3).  Each out put connector though gets it’s own row data from one of the two decoders.

The input connector pinout is as follows:

  • Pin 1  –  GND
  • Pin 2  –  A0
  • Pin 3  –  A1
  • Pin 4  –  A2
  • Pin 5  –  A3
  • Pin 6  –  VCC (5V)
  • Pin 7  –  CLK
  • Pin 8  –  Data
  • Pin 9  –  Enable

This board reduces the amount of outputs needed while giving me more versatility.

This is the soldered up prototype.

And a back side View.

Here’s a couple more photo’s of the board installed.

Here you can see the board wired between my breadboard and the display boards.

I accidentally wired my displays backward and put the upper output harness on the lower display and the lower on the upper display…  It was just a proof of concept test run anyway :D.

 

Here is my breadboard with the micro-controller.  The red and green jumpers on the right are providing the 5V to the logic portion of the displays.  I have a 2.5A 5V supply powering the the LED drivers on the displays.  The connections from the micro to the protoype board are similar to the prior setup except I use PC4 as my enable line and no longer use PORTD for anything.

  • PB3  – CLK
  • PB5  – Data
  • PC0  – A0
  • PC1  – A1
  • PC2  – A2
  • PC3  – A3
  • PC4  – Enable

The software is just in the proof of concept stage.  I wanted to be sure the driver worked hardware wise before devoting a lot of time to the software.  So far the only software changes I have made is re-defining my ROWS and COLS to 16 and 40 respectively, Changed la_data to uint16_t to allow for the extra data width.  And I re-wrote the logic in the initialization  and interrupt functions.

/*
// - ISR(TIMER0_OVF_vect)  
// -  	Timer interrupt that actually shifts 
// -	the array data to the display
// -  Returns - nothing
*/


ISR(TIMER0_OVF_vect) {

  // Turn off all rows
  PORTC = 0x10;

  // increment row number
  if(++la_row == ROWS)
    la_row = 0;

  uint8_t j, data=0;

    //fill columns

    for(j=1; j<=COLS; j++) {
		data=ledarray_get(la_row,(COLS-j));

	  // Set data line high or low depending on value in array
		if(data==1){ 
		  PORTB |= (1<< PB5);}
		else{
		  PORTB &= ~(1<< PB5);}
		
	  // Toggle Clock to shift data into register
		PORTB |= (1<< PB3);
	    PORTB &= ~(1<< PB3);
	  }
    
	// Activate driver for current row
    PORTC |= (la_row);
	
	// Turn on rows
	PORTC &= ~(1<<PC4);
	 
}

/*
// - ledarray_init() 
// -  	Sets up the timer, and configures
// -	the ports to drive the display.
// -  Returns - nothing
*/



void ledarray_init() {
  // Timer0 CK/64 
  TCCR0B = (1<<CS01) | (1<<CS00);
  TIMSK0 = (1<<TOIE0);

  // Set the port c to output  
  DDRC |= (1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4); // set PortC as output

  // Blank All Rows  
  PORTC = 0x10;
  
  
  DDRB |= (1<<PB3)|(1<<PB5);
}

Lastly, here is a static image of the display in operation at 16 wide.  As you can see, there is an issue with the additional rows in the various functions that will have to be addressed.  But it appears that the hardware side of things is working as expected.  🙂

That’s all for now,  as you can see from the video, I have some software to sort out.  Until then…

 

Posted in News | Leave a comment

An oops moment.

After making my last post, and doing a bit more research, I found a 3-8 decoder that doesn’t invert the output (74HC238).  I purchased some of these and will use them in the 16 row builds.  I should be able to drive the display directly with these w/o needing the octal inverters.

Oh well, I’ll have some spare parts to mess with in the future when my original 74hc138’s and inverters arrive.  😀

I also have placed the order for 2 more displays they should arrive around 7/26.  So maybe by next weekend sometime I’ll be able to have a 16 x 80 running.  (fingers crossed)

That’s all for now…

Posted in News | Leave a comment

Led display to go 16 x 40

My next step with the LED Array panels will be to make it double tall (16 x 40).  However to do this, I will have to double my row control lines from 8 to 16 while still providing output for the clock and data lines.

The ATMEGA328P I’m using doesn’t have enough I/O while still leaving the chip setup as a Nerdkit Based platform.  For those of you unfamilliar with NerdKits, they offer a beginner package to get people started in micro-controllers.  They also have a great forum of users who are often very helpful.  You can find them at NerdKits.com.

I  have but three options.  I could break from the common platform used in the NerdKit and re-purpose some pins, or I could use a different micro-controller with more I/O (again breaking from the Nerdkit platform), or I could add more circuitry to decode a 4 bit binary row address into a 16 bit output.

I opted for the latter.  I have purchased some 3 to 8 decoders (I’ll cascade two of these to make a 4 x 16), and some octal inverters (the decoders have a low output and I need a high for the display).  Once thes parts arrive, I’ll play with the code to see what happens.

One last note, if anyone is attempting to build these.  I never really defined the connections from the display to the various components.  Here are the connections for the prior two setups (8×40 and 8×80):

  • PB3 to 75183 Pin10 (Clock)
  • PB5 to 75183 Pin4 (Data)
  • PC0 to J1 Pin2 (Row 1 Enable)
  • PC1 to J1 Pin3 (Row 2 Enable)
  • PC2 to J1 Pin4 (Row 3 Enable)
  • PC3 to J1 Pin5 (Row 4 Enable)
  • PD4 to J1 Pin6 (Row 5 Enable)
  • PD5 to J1 Pin7 (Row 6 Enable)
  • PD6 to J1 Pin8 (Row 7 Enable)
  • Pd7 to J1 Pin9 (Row 8 Enable)
  • 75183 Pin5 to J1 Pin14 (Data High Input)
  • 75183 Pin6 to J1 Pin13 (Data Low Input)
  • 75183 Pin8 to J1 Pin12 (Clock Low Input)
  • 75183 Pin9 to J1 Pin11 (Clock High Input)
  • Connect Pin7 of 75183 to Ground and Pin14 to VCC
  • Connect Jumpers between Pins 1, 2, 3, & 4 of 75183
  • Connect Jumpers between Pins 10, 11, 12, & 13 of 75183
  • Connect ground wire between breadboard and all ground connections of display to establish a common ground.
  • Connect 5V from microcontroller circuit to 5L on display
  • Connect Higher current 5v (I’m using a 2.5A supply) to 5D on display.
  • Connect ground of both supplies to common grounds.

Do not apply power until ALL connections are verified.  I am not responsible if you connect something improperly and damage your display, microcontroller, or all of the above.

Posted in News | Leave a comment

LED Matrix Update.

If you are interested in purchasing one of the displays I have now added the links to the seller to their posts.

Posted in News | Leave a comment