AS1130 First attempt - working

Yeah, learning a new tool set is a real pain, you just want to get on with the job but keep falling over stuff because you aren't familiar with it.

The standard IDE is way too frustrating to use IMO. That said you can split your code into multiple tabs, I've not done so (because I don't use the IDE :)) but that should allow you to move all the crap at the top of the file. Try clicking on the small down arrow at the right of the tab area, that gives a menu with a "New tab" option. I assume you do that and move code across but as I said I haven't done it myself.

I feel your pain re the lack of proper debugging tools. I've been using LPCs for a while now and it's fantastic to have a real debugging environment. Maybe you should try the Visual Micro IDE, that's based on VS2008/10/12 and it's pretty nice. It does have debugging although I've only just downloaded it and haven't got it working yet.

http://www.visualmicro.com/


Rob

Thanks for the comments guys. :smiley:

I've managed to get the data into another file now, so I'll stick with it I think.

Aparently the compiler goes through the files and headers in alphabetical order...so you have to make sure defines and declarations are in the right place!

Oh well...still here for the duration.... :wink:

PS the VS stuff looks useful.

Update:

I haven't given up... :grin:

I now have a board with 2 AS1130s and a 24 x 11 Matrix up and running.
Still waiting for the rest of the LEDs from China.
Sync works fine.

Interrupts now work...I'm currently coding an example.

I'll post a video and the code as soon as I have it in good shape. :wink:

Well...

Here's the video anyway...I've had so much trouble with the I2C on the Arduino, I've given up on it for the duration and written this for the PIC18F4550. :fearful:

My other 500 LEDs arrived today so I'll be getting on with the soldering and finalising the 24 x 22 Matrix code on the PIC, then if I can get it reliably working I'll port it to the AVR.

Sorry it's the usual crappy quality but at least you get the idea. :grin:

This is AS1130 #1 providing the clock for #2 and it works very well. IRQs are still a little strange but I've got a handle on it now I think. ]:slight_smile:

..still working on the code but I'll email it to you as soon as it's ready. :wink:

Hello,

could you please edit your last post and call me binarygod? i don't want that anybody knows my real name...
by the way: how do you know my real name?

done

change your youtube name to something that doesn't include your real name if you want to remain incognito... :roll_eyes:

Are you hiding for some reason? :grin: :stuck_out_tongue:

"AS1130.h" is an included file and not a library and I use it to get it out of my way.

It's just a way of splitting a file into 2 parts so that I don't have to scroll past all the defines etc. while I'm programming.

When you program in C, you create what are called "header" files. They contain all the class definitions for the methods used. You generally split the class definition and the class implementation parts of the class. Its just how it works. You can have the class implementation in the class definition file but it gets annoying to have to scroll past all the definitions.

Sorry I've been absent lately, I've been working on an FPGA and I've slowly been realizing how much more awesome it is.

All true and helpful....except :fearful: you can't have classes in C...that's why they invented the OOP version C++ :stuck_out_tongue:

Nice to see you back mate...what FPGA are you playing with?

Ah, well I'm learning c++ now in my defense! :smiley:

I'm working with a Spartan 6 FPGA on the Nexys-3 board from diligent.

Looks like anice bit of kit...did your Uni supply it or are you rich? :grin: :grin:

but I still have to scroll past all the defines because I'm using Dev-C++.

Are you saying that it doesn't allow include files? Yikes, what sort of compiler is that?


Rob

@binarygod

Yikes, yea, you should put those in a separate file and just include it. Just like how you do with the wire library.

@Hexadec

I wish I was rich. Then I could get touchscreen lcds all up in this uni. No my uni has them. My semester ends here soon so I think i'll just check on out over winter break.

To be honest mate...if you insist on using your own compiler, then you are going to run into problems as I said earlier.

I don't know how long the Mods or Admin will allow the discussion of porting code to another system.... :astonished:

Having said that...I would look up how YOUR compiler works with the I2C bus and concentrate on that. The Wire library is a wrapper for I2C and as such will just confuse you if you don't know the I2C protocol.

Here is some of my code for the CCS C compiler...I hope I don't get banned or repremanded for posting it here.

It may help because it looks like it is closer to your compiler....

/*****************************************************************************/
/*                      COMMUNICATIONS FUNCTIONS                             */
/*****************************************************************************/

/***** Function to write configuration settings to I2C bus *******************/
void AS1130_config(char AS_addr, char ram_reg, char command, char data)
{
	i2c_start();
	i2c_write(AS_addr);
	i2c_write(REGISTERSELECTION);
  	i2c_write(ram_reg);
	i2c_stop();
	
	i2c_start();
	i2c_write(AS_addr);
  	i2c_write(command);
	i2c_write(data);
	i2c_stop();
}
/*****************************************************************************/
/*                 EXT EEPROM COMMUNICATIONS FUNCTIONS                       */
/*****************************************************************************/

/***** Function to write data to external EEPROM *****************************/
//Standard I2C Protocol (see datasheet)
void write_ext_EEPROM(long int address, BYTE data)
{
   short int status;
   i2c_start();
   i2c_write(EEPROM_WRITE_ADDR);
   i2c_write(address>>8);
   i2c_write(address);
   i2c_write(data);
   i2c_stop();
   i2c_start();
   status=i2c_write(EEPROM_WRITE_ADDR);
   while(status==1)
   {
      i2c_start();
      status=i2c_write(EEPROM_WRITE_ADDR);
	//	delay_cycles(200);
   }
   i2c_stop();
}
/***** Function to read data from external EEPROM ****************************/
//Standard I2C Protocol (see datasheet)
BYTE read_ext_EEPROM(long int address)
 {
   BYTE data;
   i2c_start();
   i2c_write(EEPROM_WRITE_ADDR);
   i2c_write(address>>8);
   i2c_write(address);
   i2c_start();
   i2c_write(EEPROM_READ_ADDR);
   data=i2c_read(0);
   i2c_stop();
   return(data);
 }

Seriously, you need to understand the I2C protocol fully before Wire or bit banged (or anything in between) I2C will make any sense.

Here is a link to the EEprom's datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/21754M.pdf
Sections 4, 5 and 6 are pretty revealing as is the I2C description in the AS1130 datasheet.

This is a discussion that should be open for all. The only issue I can see is that it is programmed on a PIC. Anything other than that is needless problems. Please develop in proper IDEs. If you have problems with I2C, understanding it and all. I can write something up if you like.

It's arduino code so there can nobody tell me I'm in the wrong topic

ROFLMAO :grin: :grin:

I did post at the beginning somewhere that this is my first attempt at using the Arduino system and the AtMega chips....before I started this project I'd never heard of the Wire library... :stuck_out_tongue:

I can read though...and have a background in electronics and computer science. ]:smiley:

The code is not optimised or elegant...I just posted it to show how I got the AS1130 working with an Arduino.

Anyway....

I now have the 24 x 11 version working and am starting this weekend to solder up the other 2 chips and 264 LEDs which will give me 24 x 22. My plan then is to look into optimising the code and porting it to the Arduino...then I'll look at RGB, but I haven't found any RGB LEDs that I can solder in a very tight matrix.... :frowning:

Until the code is optimised and debugged I don't really want to share it because I am changing it all the time...and I haven't even started to include blinking and dot correction yet :fearful:

To answer your question...the begin method initialises the I2C bus and sets the internal pullups on SDA and SCL. The beginTransmission method does exactly what it says.... :smiley:

Just another thought Mr God of the Binaries...

If you look in the Arduino installation on your computer, you can find all the code for the libraries and follow what they do and how they work...

...the only problem is that they are written as C++ classes and you need to understand the basics of the Class system and how to create them.

Me....I'm working class and proud of it.... :grin: :grin:

  • Idk
  • Idk
  • Yes
  • that is just the serial baud rate between the arduino and the computer. 9600 is just a convention. Its just your go to baud rate. The choice has no affect on the actual operation of the AS1130.

^^^^Please done forget to answer binaries questions^^^^

Once we seem to have no more questions ever coming up and have this AS1130 thing figured out completely, we'll start a new thread with concise descriptions and all that so that people can do it. It'll still be a discussion thread but we'll try to boil it down to get all the fluff out. We are at 15 pages and thats kind of a lot to read through when you aren't sure if you'll get your answer.