Where the idea came from: Actually, I was considering buying one of the last raspberry pi, and at the same time had my eyes on one of these cool mini-computers (the CHUWI Larkbox). For me, the main argument of the RPI was the 40 pins headers, and I started wondering 'What if I could add this to the Larkbox? Or any old laptop lying around?'. So I went with the Larkbox and started this project! In the end, I don't know if it is going to be so useful, but it was a nice way to learn about the atmega8 functionalities.
Key point: The best selling arguments is that it's very cheap to make! You can probably build it for less than 5$. Compared to the price of some development boards, if don't need anything too advanced, it may be a good option. Of course, you could also go for a cheap arduino clone. But the purpose here is different, you don't have to upload a program, you just control the atmega as a device plugged into your computer. You can even control it remotely with an ssh connection. So I guess it's just different.
Another key point: Since most of the atmega functionalities are implemented, you can just steal some code for other projects if needed :D
Main problem: Of course, the main problem is the speed, due to the delay introduced by the serial communication (I measured about 4ms between two instructions). I used a 12MHz external oscillator to improve the baud rate. And for timing-sensitive applications, I added the possibility to execute a set of ~10 instructions recorded beforehand. Note also that, contrary to arduino or esp-type devices, it is not a standalone device, it has to be always connected to a computer.
Applications: A kind of applications I have in mind is controlling scientific experiments remotely. Using Python, you can easily perform some measurements (analogueRead), control another device, or do some simple task with a servo. Again, you could do it with an arduino, but it may be quicker to implement it with the Santtalgi as you don't have to write and upload any program, and deal with the serial communication and so on. Simply use the python library and you're good (any good scientist knows python these days, no? ;).
- I used the atmega8 because I had one around, but it shouldn't be hard to write a similar code for the atmega328 or any atmel chip with UART.
- It can be powered either by the usb port of the computer (used for serial) or by an external 5V power source. In this way, you should avoid frying your usb port if something goes wrong as only the serial communication link the atmega to the computer.
- When a command is sent, the atmega returns either 'OK' if everying went well, or an error code 'ER1',... if something went wrong. This is mostly useful for debugging.
Conclusion: Maybe I got a bit carried away and this kind of stuff already exists in dozens of versions. But it was fun to make anyway. And I just love my Santtalgi \o/