Dumping firmware/software...and/or reflashing??

Helpful tip: It is possible to download a binary version of the program from the Paintball gun. You may want to do this early in your project so you have a backup.

Great news about the processor. That will make your development effort go much more smoothly.

You guys are geniuses ha.

Sorry if I haven't contributed much (anything) this project Mike. You clearly have a greater understanding of all this, but I will certainly be learning.

Helpful tip: It is possible to download a binary version of the program from the Paintball gun. You may want to do this early in your project so you have a backup.

Great news about the processor. That will make your development effort go much more smoothly.

How would you go about doing this and how would you end up using it in the long run?

I tried to read the flash from the device to backup the program, however the data that came out (no errors reported) was essentially blank. I did notice that there's a lock bit set "PROG_VER_DISABLED", but I have no idea what that means. I can't seem to find a definition of these lock bits anywhere. I'm guessing this is why I cannot backup the chip?

I really don't want to lose the original program, so I make have to solder the chip off the board (:astonished:). Once my new program is working I won't need to solder anymore boards, but until I know I have a working program, I need to keep the original safe.

I think I found a description of the lock bit in the Atmel datasheet:

Further programming and verification of the Flash and EEPROM
is disabled in High-voltage and Serial Programming mode. The
Fuse bits are locked in both Serial and High-voltage
Programming mode.(1) debugWire is disabled.

Well...I've bit the bullet so to speak. I've desoldered the original chip and soldered it to an SOIC-to-DIP adapter, and soldered a shiny new ATtiny44 to the phenom board. I've also built a test bed around the original chip with LED's and resistors and have correctly identified the trigger (actually uses 2 pins), solenoid, red LED, green LED, and push button.

I would also like to figure out how to use debugWire so I would only have to worry about 3 pins (Vcc, GND, debugWire) rather than the regular 6 (Vcc, GND, RESET, SCK, MISO, MOSI). I know I have to set a fuse to use it, but I'm not sure what else may be involved (if it will work with my Atmel mkII).

At this point, it's only a matter of writing the appropriate software to drive the new chip in the phenom board.

Mike, has anyone told you that you're amazing??? If not, you're amazing haha. What is your "test bed" currently doing? And how did you got about confirming the trigger uses two pins?

lol...thanks, though I wouldn't have anything if it weren't for the excellent assistence from Coding Badly.

Here's a quick video of my test bed. Check it out:

Does the red LED maybe have anything to do with the programming mode (setting denounce time and other features??)

I agree, coding badly has been extremely valuable in this project. If I could I'd by him a drink (if he drinks....otherwise a root beer ....I personally would take ge root beer ha)

Great video demonstration btw.

mikedehaan:
I tried to read the flash from the device to backup the program, however the data that came out (no errors reported) was essentially blank. I did notice that there's a lock bit set "PROG_VER_DISABLED", but I have no idea what that means. I can't seem to find a definition of these lock bits anywhere. I'm guessing this is why I cannot backup the chip?

Oh bugger! I completely forgot about the lock-bits. You will not be able to make a backup. Sorry about that.

mikedehaan:
I would also like to figure out how to use debugWire so I would only have to worry about 3 pins (Vcc, GND, debugWire) rather than the regular 6 (Vcc, GND, RESET, SCK, MISO, MOSI). I know I have to set a fuse to use it, but I'm not sure what else may be involved (if it will work with my Atmel mkII).

Like TPI this is not the best place for debugWire help. In my case, I have no idea how to get debugWire working.

The core I mentioned in Reply #36 includes Tiny Debug Serial. It's similar to Serial available on a normal Arduino. I also have something better (but still similar to Serial) available. If you're interested send me a Personal Message with your email address.

lol...thanks, though I wouldn't have anything if it weren't for the excellent assistence from Coding Badly. ... I agree, coding badly has been extremely valuable in this project. If I could I'd by him a drink (if he drinks....otherwise a root beer ....I personally would take ge root beer ha)

My pleasure. And, yes, I do occasionally enjoy a beer. However, I will never ever refuse a...

https://www.google.com/search?q=dr+pepper+cane+sugar&tbm=shop

Don't let anyone try to fool you. With cane sugar is the only way to make Dr. Pepper!

In case I did not mention it earlier: The ATtiny84 is a drop-in replacement for the ATtiny44 with double the memory. If your new trigger code won't fit you can easily upgrade to a "bigger" processor.

Muhahahahaha!! ]:smiley:

My first version of my new code deployed on the new Attiny44 on the Phenom Board:

Next, I think I'm going to work on creating a menu system so you can change the firing mode without reprogramming. At the moment, I've created full auto and three round burst.

again, you're incredible lol.

Can I see the code you have so far?

Still plan on sharing this with the world and not shutting me out when its done? :wink:

As well what are the things I'll need when I am able to program this on my own?

bag06a:
Still plan on sharing this with the world and not shutting me out when its done? :wink:

No, now I have it and it's mine! ]:smiley: j/k

Of course! At the moment things are a mess, but you're more than welcome to have a look. I'm programming in the Atmel AVR studio, but things should transfer easily to Arduino if you choose. I'll paste the code at the end of this post.

bag06a:
...what are the things I'll need when I am able to program this on my own?

You will need an ISP, software that works with the ISP, some jumper wire, code (and/or binary file from me), and really steady hands. I bought an AVRISP mkII because I was concerned that I wouldn't get another ISP to work. On hand, I had a cheap USBasp ISP and an Arduino. I was able to get both the Arduino and the mkII to work. No luck with the generic USBasp.

I'll post better instructions once I build a proper forum for it. Perhaps I'll start a blog on it.

#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>

#define HIGH 1
#define LOW 0

int BALLS_PER_SECOND;
int ROUND_DELAY; // delay between shots in ms
int DEBOUNCE;  // Debounce in ms

void initialize() {
	BALLS_PER_SECOND = 30;
	DEBOUNCE = 8;
	ROUND_DELAY = (1000 - DEBOUNCE) / BALLS_PER_SECOND;
}

void delay_ms( int ms ){
	for (int i = 0; i < ms; i++) {
		_delay_ms(1);
	}
}

int getPinMask(int pinNumber) {
	if (pinNumber == 2) {
		return (1 << 0);
	} else if (pinNumber == 3) {
		return (1 << 1);
	} else if (pinNumber == 4) {
		return (1 << 3);
	} else if (pinNumber == 5) {
		return (1 << 2);
	} else if (pinNumber == 6) {
		return (1 << 7);
	} else if (pinNumber == 7) {
		return (1 << 6);
	} else if (pinNumber == 8) {
		return (1 << 5);
	} else if (pinNumber == 9) {
		return (1 << 4);
	} else if (pinNumber == 10) {
		return (1 << 3);
	} else if (pinNumber == 11) {
		return (1 << 2);
	} else if (pinNumber == 12) {
		return (1 << 1);
	} else if (pinNumber == 13) {
		return (1 << 0);
	}
	
	return 0;
}

void setInputPin(int pinNumber) {
	if (pinNumber >= 2 && pinNumber <= 5) {
		DDRB &= ~(getPinMask(pinNumber));
	} else if (pinNumber >=6 && pinNumber <= 13) {
		DDRA &= ~(getPinMask(pinNumber));
	}
}

void setOutputPin(int pinNumber) {
	if (pinNumber >= 2 && pinNumber <= 5) {
		DDRB |= (getPinMask(pinNumber));
	} else if (pinNumber >= 6 && pinNumber <= 13) {
		DDRA |= (getPinMask(pinNumber));
	}
}

void pinOutput(int pinNumber, int state) {
	if (pinNumber >= 2 && pinNumber <= 5) {
		if (state == HIGH) {
			PORTB |= (getPinMask(pinNumber));
		} else {
			PORTB &= ~(getPinMask(pinNumber));
		}
	} else if (pinNumber >= 6 && pinNumber <= 13) {
		if (state == HIGH) {
			PORTA |= (getPinMask(pinNumber));
		} else {
			PORTA &= ~(getPinMask(pinNumber));
		}
	}
}

int pinHasInput(int pinNumber) {
	if (pinNumber >= 2 && pinNumber <= 5) {
		return (PINB & (getPinMask(pinNumber))) <= 0;
	} else if (pinNumber >= 6 && pinNumber <= 13) {
		return (PINA & (getPinMask(pinNumber))) <= 0;
	} else {
		return 0;
	}
}

void threeRoundBurst() {
	for (int i = 0; i < 3; i++) {
		pinOutput(6, HIGH);
		delay_ms(DEBOUNCE);
		pinOutput(6, LOW);
				
		// don't delay on the last round
		if (i < 2) {
			delay_ms(ROUND_DELAY);
		}
	}
}

void fullAuto() {
	while (pinHasInput(7)) {
		pinOutput(6, HIGH);
		delay_ms(DEBOUNCE);
		pinOutput(6, LOW);
		delay_ms(ROUND_DELAY);
	}	
}

int main (void) {
	
	initialize();
	
	setOutputPin(12);
	setOutputPin(11);
	setInputPin(7);
	setInputPin(5);
	setOutputPin(6);
	setInputPin(3);
	
	////////////////////////////////////
	// Enable pull up on trigger inputs
	////////////////////////////////////
	
	// Trigger
	pinOutput(5, HIGH);
	pinOutput(7, HIGH);
	
	pinOutput(3, HIGH);
	pinOutput(13, HIGH);
	pinOutput(10, HIGH);
	pinOutput(9, LOW);
	pinOutput(8, LOW);
	pinOutput(12, LOW);
	
	// turn on green LED
	pinOutput(11, HIGH);
	
	while(1) {
		if (!pinHasInput(7)) {
			
			delay_ms(DEBOUNCE);
			while (!pinHasInput(7)) {
				// NOOP
			}
			
			// Fire!
			//threeRoundBurst();
			fullAuto();
		}		
	}
	return 1;
}

Ok...The code is a mess (it's been a long time since I've coded in C), but it seems to work. I want to add one more firing mode, but for now the code supports full-auto, three round burst, and auto-response. To enter configuration mode, turn off the board, hold the trigger, power on the board and release the trigger after 2 seconds. The rest of the configuration is very similar to the Tippmann manual. I'm not allowing Debounce and Dwell to be changed at the moment.

My next task is to setup a blog or other site so I can post some instructions on how to program your own chip. I'm not sure which programmer you may have, but I'm going to need your help with figuring that part out. I know I can program the chip with the Atmel AVRISP mkII, but I'd like to find a solution using either the Arduino or another programmer (USBasp) for a lower cost solution.

I've included the latest code and hex dump.

ATtiny44Phenom.hex (11.3 KB)

Phenom.zip (42.4 KB)

Does the tactile button have no function now then? Also They way u described your programming mode it sounds similar to the x7 classic. Do u have classic or phenom?

I have a Phenom X7. I decided to change the programming around a little because I don't want to have to whip out a special tool to get to programming. I was planning on using the button for "reset to factory default" (e.g. on startup, hold the button for 5 seconds to reset the board).

Also, just a warning, I have not tested this latest code on the actual board yet. I hope to get to that this weekend. I'm mostly worried about the red LED. Everything else has already been proven.

Hahaha, well...my plans were foiled. I just tested out the new build in the full system and found that you cannot hold the trigger down and switch from the "F" position to "FA" (to turn on the board). So I switched the programming to use the pushbutton rather than the trigger to enter programming mode.

Other than that, I made some tweaks to Auto-Response and the new build mostly works. I say mostly because successBlink is not working for some odd reason. I'm baffled why it is not working on the board when it does on the testbed, but I'll figure that out later. successBlink is supposed to blink green + red three times to indicate that your changes have been saved to the EEPROM.

I'm starting a google code project with everything I do. I expect to put documentation, pictures, videos, etc up there.

http://code.google.com/p/phenomx7-etrigger/

If you'd like to contribute to some of the documentation etc, let me know. I think all I need is an email address of yours to set you up.

From this point forward, new code and builds will be posted there.

mikedehaan:
Hahaha, well...my plans were foiled. I just tested out the new build in the full system and found that you cannot hold the trigger down and switch from the "F" position to "FA" (to turn on the board). So I switched the programming to use the pushbutton rather than the trigger to enter programming mode.

Other than that, I made some tweaks to Auto-Response and the new build mostly works. I say mostly because successBlink is not working for some odd reason. I'm baffled why it is not working on the board when it does on the testbed, but I'll figure that out later. successBlink is supposed to blink green + red three times to indicate that your changes have been saved to the EEPROM.

I'm starting a google code project with everything I do. I expect to put documentation, pictures, videos, etc up there.

Google Code Archive - Long-term storage for Google Code Project Hosting.

If you'd like to contribute to some of the documentation etc, let me know. I think all I need is an email address of yours to set you up.

From this point forward, new code and builds will be posted there.

Hello mikedehaan, any news about your firmware?

What things I need to flash my phenom with your firm?

Correct me if I'm wrong:

  1. ATTINY44A-PU
    http://www.ebay.com/itm/2x-8-bit-Microcontroller-ATTINY44A-PU-/221023275589?pt=LH_DefaultDomain_2&hash=item3376038a45

  2. PROGRAMER
    http://www.ebay.com/itm/ATtiny24A-SSU-ATtiny24-ATtiny44-ATtiny84-AVR-SOIC14-150-mil-Programming-Adapter-/261012681784?pt=LH_DefaultDomain_0&hash=item3cc5917438

  3. Your HEX File

================================

I need desolder the original chip from my board? or exist the posibility to program it directly in the board? Or is read only?

Your work is awesome!

Sorry for my very poor English... (Entiendes español?)