Hi,
A fullblown PID is probably overkill but, for the record, incPID_mc is the multichannel version of the PID-filter. It works fine with a single channel but it takes a lot more codespace than the original incPID routine.
You can find v1.5 of the single channel version in this post. And with THAT said it still won't fit the 12F675 due to the limited amount of RAM available in that device.
What I'd do is probably something in the line of what Jerson showed but I'd also add a bias or feedforward based on the setpoint (not the error). If you know that in order to maintain a temperature of say 250°C you need a dutycycle of 40% then, once you're within the window of the regulator you enable the P(I) regulator and add the bias/feedforward to the output.
You'll need to work out a suitable bias/feedforward "gain" since it's not going to be perfectly linear. Since the system (probably) heats up faster than it cools down and you can't have "negative drive" you should err on the low side for the bias/feedforward so that IT alone can never drive the temp OVER the setpoint. If it does the regulator can't bring it down since it can never go "below" 0% PWM.
/Henrik.
EDIT: The original version of incPID, which can be found i post 1 in the thread above, compiles to 314 words on the 12F675 and uses 29 bytes of RAM. Depending on how many bytes of RAM your application uses it MIGHT fit but again, it's probably not worth it.
Bookmarks