Here it is! The AT90USB646-based homebrew programmable logic controller. It’s not quite a Simatic S7 (and it’s not even completed in most parts), but it’s a nice start. A more complete and IEC-ish environment on the development software part (among many other things) would be nicer, but… the code is (will be) here, so extend it to whatever you want. But, whatever you may want to do with it, keep in mind it’s more of a “proof-of-concept” thing than a production-ready device.
In order to use the Arduino MsTimer2 library on AT90USB646 microcontroller you have to minimally modify the source code of the library. First, download the library, unpack it into the “libraries” directory of your Arduino installation (it’s a subdir of “hardware”) and open the file MsTimer2.cpp.
I wanted to use the port F in Teensy++ board as ordinary digital inputs/outputs and it turned out that there is an extra step involved to ordinary DDR stuff. I’m coding using the Teensy port of core Arduino libraries to AT90USB646 chip. After checking the chip datasheet, I found that the proper port initialization includes setting the DIDR0 register (setting desired pins of port F to digital instead of analogue). So the full initialization should look like
Few years ago when I was searching the net for similar projects to gather some stuff for my potential graduate thesis, there was just a plain void. On techie forums ocasionaly some excited novice popped up with greeny questions about what would take to make a PLC, etc., just to get a bunch of “smart” answers about how stupid one has to be for trying to make something that someone somewhere can eagerly sell him. Not much useful, indeed. Sure, people wrote about projects and “PLCs” they’ve made, but almost all of them were just a kind of a relay…