Chip Hall of Fame: Atmel ATmega8
spectrum.ieee.org
spectrum.ieee.org
Just the mere act of programming one was amazing, you'd have to use SDCC[2] (small device c compiler) to convert your C code to assembly that 89C92 understood, in process I built my own chip burner and use some combination of PonyProg[3] to burn it. We went through many chips due to mis-configured serial port connectors but it was so worth it.
[1] https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2992204/
[2] http://sdcc.sourceforge.net/
[3] http://www.lancos.com/prog.html
p.s. I air-quoted medical devices to make it abundantly clear that whatever we made was never ever ever used to diagnose any patients.
However, in the last years, following the Atmel acquisition by Microchip, the price rise on suppliers like Mouser started to make them look unattractive. But I still prefer the 8 bits ;-)
For example, recently I found that the fumes extractor in the kitchen of the flat I rented failed. The PIC on board got tazed with 10V from a broken PSU. I fixed the PSU (replaced cap and regulator, added TVS diode for protection), but the programming on the PIC was lost.
So I found that there is one AVR with matching pinout that I could use in place of the PIC. Thanks to AVRs being so easy to program I could program and test it in an hour or so, and even added some extra features.
I do other projects where I need more power (Cortex M3/M4), but AVR is hard to beat where it comes to how quickly you can get simple things going.
I haven't looked inside the fan because it worked correctly. I also didn't want to test it to see how it works so I figured it out by analyzing the PCB. Actually that was quite good idea because the relays seem to be connected in such a way as to only allow valid combination to be sent to the fan even in case of invalid input from the microcontroller.
I suspect bad things would happen if I sent incorrect inputs to the fan -- looking at how crappy the board was but at the same time that the person put effort into placing the relays to explicitly disallow invalid combinations of power lines to the fan.
Previously there would be one switch to control light, 3 switches to control speed modes and extra switch that I don't exactly know what it did -- probably it controlled some kind of timer.
The 3 switches that controlled modes were 0/1 (change speed to 1 if anything else than 1, turn off if it is currently 1), and 2 and 3 which would turn on 2 and 3 speed mode.
I have added a 500ms long press to 0/1 switch which means that whatever is happening it turns off both light and fan at the same time. You don't have to turn off light and fan separately and you don't have to press 0/1 twice to reduce the speed to 1 and then to turn it off.
As it was sometimes difficult to figure out which speed it was on without looking at the indicators (on the side and not on the front of the extractor) you never knew you had to press it once or twice which was quite irritating.
Agree for getting things going though - definitely faster and none of that PICkit crap to deal with.
For me there just isn't enough middle ground between 8-bit AVRs and ARM Cortex that would justify learning another platform.
I might be biased, as I learned starting with AVRs and then took to Cortex-M3/M4 when my projects outgrew 8-bit. If I started with PIC that would probably be PIC/Cortex-M, but AVR is so much easier on a newb like I was few years ago.
Want 8, 2 bit timers? Sure thing! One large 32bit timer? Done!
Having a CPLD to drive your peripherals so that you can reconfigure them is a brilliant idea. The fact that you can drop down to VHDL is an awesome bonus. They've also got some small reconfigurable op-amps built in as well that lets do you really clever things while sleeping.
I have almost 2 decades of interesting experience as a software dev. I am now learning hardware design so that I can create niche hardware products and use my dev experience as an advantage.
I decided to fix it only because I am of the opinion that if I want to act professional in any area I can't shy away from projects like that.
If I calculated the time I spent on this I could have easily bought few of these, new, for the time I was not spending on billable hours.
I know it's one of those compliance issues, but it might be a good idea to have an electrician come out. Last thing a renter wants to see, is bodged together "fire badness".
I'm not saying yours is by any means! But sane-ness and law hardly go together :/
My kitchen was completely miswired since the building was built. The ground exchanged with neutral line. I tested the lines and put it back together as it should. There were many complaints from previous tenants but nobody was able to figure out and fix it -- seems so basic but nobody could do it.
I get you - that your work is likely higher quality, and you could claim ignorance if anyone did have a complaint.
But yeah, on Sunday, I redid some of our outlets and switches. We live in a trailer, and some of the switches were getting intermittent, and some outlets were loose to the point of turning off stuff if they jiggled. But.. I did find out that 1 outlet in the bathroom, the hallway lights, and 1 wall of the living room were on 1 gang... (sigh). I have my work cut out for me if I actually want to do it right.
I think its best to start by utilizing your software experience as much as possible and having just enough hardware to get by. Also don't try to learn/solve too many problems at the same time.
Most of my projects is relatively little/simple hardware + lots of features in software.
For example -- one of my complicated projects requires very precise temperature measurement, precise regulation of mains AC power to 1kW heating element, dealing with PCB environment being very hot and humid (up to 80C), etc.
I am splitting the effort of learning all of those things, and first thing I am building is a precise, standalone thermometer. I will build some software features (data acquisition to SD card, USB, etc.) which is relatively simple compared to getting precise temperature measurement.
Then I will maybe build standalone power regulator that I could have many uses for especially when connected to the thermometer (for example control my oven to do reflow!).
Once I know the building blocks I will attempt building the complex project I have in mind.
Yes, of course, but it just doesn't look good when the price almost doubled in twelve months, specially when you have better and more powerful micros like the STM32 for less money.
If you can get both MCUs to do the same thing but one of them takes 1/10th the time to set up then which one is better?
Any investment in time or tools is orders of magnitude more than prices of these parts.
You can source predone boards for Maple Mini at $4/each either on eBay or aliexpress. To be honest, I can't even source the individual parts and 2(4?) layer boards for 4$/each. No bloody clue how the Chinese do. But as long as they do, they get my business and i'll keep using them in my build.
Maybe later on, I'll unfold the STM32f103 into its constituent parts and mount them on the board directly.. But still, damn the microUSB connectors are pricy.
https://www.aliexpress.com/item/10pcs-5pin-Female-Micro-USB-...
Also don't forget what is IMO the main advantage of STM32, which is the ST-Link programmer. Even the official ones are cheap and the clone ones are like $2, but you get a programmer that gives you real debugging. You can also reflash them with the Black Magic firmware and have a self-hosted GDB debug server for generic ARM.
Regarding directly breaking out the STM32f103, this gets at my main problem with the STM32F (and most 32 bit micros AFAIK), namely that it only comes in LQFP, which is pretty irritating to solder by hand without using an oven. There are a few TSSOP ARM micros which I don't mind soldering but it's a hassle to make a one-off quick project if I have to use LQFP or even worse QFN.
Looks like I'll have to find a component dealer and just buy a bunch of stock components from them. None too happy about 3-5 weeks leadtime, but damn they're a magnitude cheaper.
Oh, and I do hand SMT rework (thanks to my 20/15 eyesight). Doing some of the smaller packages isn't terrible. And Ive found that I can reliably do BGA in a converted toaster oven - as long as I flux correctly and do about 10c over recommended ball solder melt temp. It's a wee finicky, but ive only had 2 fail out of a dozen (I was too impatient and removed it hot - big mistake).
The nRF51 (used by micro:bit) and nRF52 chips are in general very nice to use. I'm really looking forward to more breakout and development boards coming out for nRF52840 which is just a great chip that can do just about everything (Bluetooth and Thread, at the same time even! Also USB! And PDM microphone input!)
Incidentally, these are also designed in Norway, by Nordic Semiconductors. A lot of the engineers from Atmel has jumped over to Nordic recently.
Disclaimer: I'm in a position where I'm obviously extremely biased (without being specific), but I'm also a hobbyist and I sincerely enjoy using these chips for smaller projects. Even if I don't use the radio.. they're just good microcontrollers.
In 2010 for one-off art project (lot's of MCUs on RS485 controlling LEDs and pushbuttons) we had to switch from ATmega8 to AT89C2051 because it was the only MCU that we could source in time for the event for reasonable price and we had (semi-)reliable programmer capable of programming it (notice the 89C, not 89S).
After that I pretty much switched to MSP430 for such things.
A lot of people seem to think everything needs at least a Cortex-M0 but in reality, an AVR or PIC is more than enough for most projects.
There's also a lot more accessibility with through hole projects. Sure it's larger and more expensive than buying a pre-built board, but for most beginners through hole is way more accessible than surface mount.
[1] - https://rawhex.com/
[2] - https://docs.hidiot.com/
[3] - https://rawhex.com/blogs/news/ghost-hunting-with-the-hidiot
My Annoyance is that to get more RAM/FLASH you tripple the price which is ridiculous. I also use PIC18K chips which are a similar price at 32KB/2KB but only cost $0.20 more to double the FLASH/RAM/CLOCK and so are much better value.
Clock for clock the AVR is a more efficient chip so Microchip have no real excuse not to do the decent thing and give us a 64K/4K version of it without the stupid price hike.
32 bit is so overkill for most applications but you just get so much more for your money with them.
Arduino solved the "easy on ramp" problem; that was the problem that needed solving.
This allowed a community to spring up (because now everyone had the same hardware [initially]) and so sharing was possible/easy in a way that bare AVRs on random breadboards didn't support.
When you are complete newb, you can't diagnose and fix problems. By definition you can't yet understand how things work which is prerequisite to debugging.
This first step is then most critical -- if it doesn't work immediately many people will be just put off completely.
If it works, people can tinker with it, see result, learn, etc. They can't learn in the absence of feedback.
Newbs will not be able to judge if IDE is "poor" or C++ preprocessor is "horrible". What's most important is that it works right away.
I'm also fairly sure thats why its popular with more artistic people.
I've tried using some, such as a brief stint with Atmel Studio some years ago, Eclipse, and a couple others I can hardly remember. My biggest complaint was how tedious it was to start a project. They start asking you questions that a hobbyist isn't going to have enough background to answer.
Arduino takes those and hides them. Yeah, it means you might have less flexibility, but by the time those important hardware details actually become relevant, the user has probably amassed enough experience and knowledge on micros and AVR chips that they'll now be able to use those fancy IDEs.
Arduino isn't about being the final product, or for becoming the next best IDE, it's about teaching, learning, and prototyping. It's about teaching a generation that programming, hacking, and technology isn't out of their reach or understanding. I've taught middle schoolers from rural areas in Puerto Rico how to control things with an Arduino.
One of them build a timer/thermostat for their house using scavanged IR leds from a broken TV remote, a few passives, and a temperature sensor that costs about $0.50USD. He now has a system that will turn on and adjust the Mini-split AC unit in his room, so it cools his room down slightly before he gets home. His unit was an older, cheaper model that did not have a built in thermostat (or the thermo died, I'm not completely sure). That student now wants to go into Electrical Engineering in college, and now thinks he stands a chance at getting into college, where he didn't before.
That is why Arduino is so popular.
Between the impossible setup, the non existing documentation, the examples that don't work if there are any. Just kidding, there are never any example at all.
Arduino can actually run a program and do shit. You can turn on a led in your first hour. And if you are an experienced programmer you can google the name of the function and see what arguments it takes and turn the led off and on. Amazing.
Blinking a led is a 3 weeks project on a normal hardware platform. And that's when it goes well.
Maybe there was another board that could do this, but if even I didn't learn about it, they sucked at promotion.
Average cost is gonna be about $100 for the board. Oh, did I mention you'll need another $80 for the programmer? It only runs on Windows XP, by the way. Closed source custom USB driver that no one understands. Wine chokes out, so no running it on Mac or Linux. PS: The programmer was the "student edition". You'll only be able to program their low end series of chips, and hardware debugging is disabled.
I forgot to mention. You're limited to the free assembler / IDE, that only allows you to use 4k of space. If you want to use any more, you need to purchase a license for $250. And by "integrated", I mean no using your own makefiles or editors.
There's no "stack overflow" style community, either. Your support is limited to poorly written app notes behind a crumby web portal.
And then the Arduino came out. $20 gives you the board, and programmer. No licenses. No drivers. Open documentation. Works with a fork of GCC. Want to use VIM and Makefiles? An Eclipse based IDE? Work on a Mac? Comes with a vibrant community, a repository of examples, and inexpensive addon hardware.
TL;DR - Want your product to die? Force me to use your crumby closed source / "evaluation period" tools from the 90's, lock everything away behind NDA's and web portals, and provide no support community for your product.
Looking at you, FPGA manufacturers. Does your revenue come from selling chips, or selling crap development environments?
FPGA development process is aimed squarely at corporations and rightly so.
There is very few hobbyist projects that really require FPGA. Most of cases where I saw FPGA in use was not because it was needed but because the person didn't know how to achieve the result using other, more appropriate means.
Sure, I wouldn't burn too much money advertising FPGAs to makers and hackers. But I wouldn't design my platform to exclude them.
The accessibility and hackability of the Arduino and the Raspberry Pi helped create the IOT field (for better or for worse). The only reason the Raspberry Pi exists is because there was an insider at broadcom that was able to convince them to sell a smaller quantity of chips.
> We were able to get our foot in the door to discuss buying chips in much smaller numbers than they usually sell (you’re right about millions of chips) because Eben works there and was able to get access to the right people, who were right on side once we had explained the goals of the charity. [1]
Alienating and raising the barrier for smaller players hinders business development. What cool projects would exist now if FPGA vendors weren't so stuffy?
[1] - https://www.raspberrypi.org/blog/qa-with-our-hardware-team/
I think the comparision is like between CPU and GPU. GPUs are fantastic at solving some of the problems but you don't see people rushing to use GPUs in every computing application.
Chances are, if you can implement it on MCU you will want to implement it on MCU because:
1) you need an MCU anyway either separate or FPGA based one
2) FPGA programming is sucha a hassle and not because of the tools but because it is genuinely hard
3) learning FPGA development well is a major effort as it requires different type of thinking. It is much more of a change that going from one programming language to another as entire concept of what is a program changes.
4) if you need more power, it is typically easier to step to more powerful MCU than to FPGA.
As I understand, we need some number of very specialized people that can invest the time to learn hardware design on FPGA and the rest is better off spending that time thinking of fun MCU-based projects:)
VHDL is a different thing entirely from any programming language. It's not ranked as a programming language by the way. It might be easier to learn if you don't know any programming but know how to make integrated circuit boards.
I do agree about the expensive programmers though. However, there were people out there who wired up their own using the STK200 configuration and put the schematics online for the community's use.
Programmers (irrespective of micros) have always been relatively expensive - even the home-brew ones. It's only recently (say in the past 5-8 years) they've become cheaper thanks to people's interest in hobby boards like the Rasberry Pi.
The biggest problem was the availability of JTAG debuggers. Atmel had the reference, closed-source implementation. Although the community managed to eventually reverse engineer their implementation and cheaper ones became available on eBay (usually from China).
The variant of C it uses is actually not bad at all for what you end up doing with AVR's. I have looked at Lua and MicroPython and for me the problem is that they do a little too much abstracting away of the hardware. I mean on the one hand, great I can write Python. On the other hand it might not work because you don't have the low level control you need inside interrupt handlers to not screw up your state. As for the pre-processor, well again it's not something most casual users use. I remember looking through WordPress's core code about 10 years ago and there was a statement in there that amounted to variable assignment... but using a damn eval(). Does an average WP user care?
When I was brand new to embedded development I spent dozens of hours struggling with a bare ATMega8 before finally getting an LED to blink. It was all simple stuff, but overwhelming when you're in a new and unfamiliar environment.
After playing around with that for a while I got an Arduino, and was able to blink an LED in minutes, and there was a clear path to move on to more sophisticated things.
I completely agree that the Arduino IDE is horrible to use, but it makes up for that by making it easy for beginners to get started.
I'm a professional embedded systems engineer and I do tons of side jobs with Arduino because I can build a one-off in an hour whereas on a bare AVR, even starting with my own prebuilt framework, I'd be looking at many multiples of that time.
Right now I'm working on precision motion control using resolvers and I'm still building with Arduino because of all the readily available parts in that ecosystem.
The community.
If you can write a PID loop, you aren't the target audience.
If you have an old toaster oven and need to control the temperature and you have no idea what a PID loop is, you are the target audience. You can go get an implementation from the community for "the thing that controls temperature" and get on with life.
And Atmel released in 2008 a video with the two co-creators of the chip describing its history[2].