Washing Machine Controller Using AVR ATMEL ATmega8 Microcontroller Using Assembly Language (NOT Arduino)
A brief history about why I decided to make my own controller :-
I have a washing machine, with control board problems. I did changed the control board from OEM 2 times, each time it cost Rs.3900 + 300 for service charges. So, I spent Rs.8200/- since 2008. Actual machine cost is Rs.12,000/- Now in year 2016 the same control board SMPS failure . The washing machine model is Whirlpool Splash 55. Seems the designer of the board is a beer addict during design ! Very sad that not only for me for those having this model is having the same issue!!!. But this time I'm decided to design my own control board with my experiences. My control board costs less than Rs.500 and all of the components are from my junk box. not spent a paisa but time.
Basic operation sequence of a washing machine :-
There is just 4 relays to be controlled in a regular sequence, not a rocket science either. The basic operation sequence is like this- Water filling (at actual time)
- Agitronic soak (15mins)
- First wash (15mins)
- First drain (4mins)
- Second wash or call it as first rinse (10mins)
- Second drain (4mins)
- Spin (5mins)
- Buzzer chim (15sec)
Program Time / Cycle time for each mode
All values in minutes
Agitronic Normal Speedy R+S S only
Soak 20 - - - -
Wash 20 20 9 - -
Rinse 16 16 16 8 -
Spin 8 8 6 6 6
And there is a very nice recommendation from Bureau Of Energy Efficiency
Energy Labeling Scheme For Washing Machines by Bureau Of Energy Efficiency
https://www.beestarlabel.com/Content/Files/Schedule12-WM.pdf
From the above given recommendation i choose following timings
soakTime = 15 mins
washTime = 15 mins (For one wash cycle)
rinseTime = 8 mins
spinTime = 5 mins
At this point of time, there is no selector / program selector available on the controller. But it's on my wish list.
Why decided to use AVR Assembly language and not to use Arduino C
For this washing machine controller i decided to use assembly language, and it'll be my first AVR assembly language project. I'm using AVR Studio 4.19 and ProgISP to compile and upload.
I personally do not recommend higher version of AVR Studio. V 4.19 is lite and there is not much improvement on ASM compiler between V4.19 and V6.2. (Both IDE's assembler version is 2.1.xx)
Since 2006 i'm using Arduino, now i'm feeling limited with arduino resources when there is really a lot of things can be done with AVRs other line of products like ATtiny13, 2313, etc....Arduino will not help to develop codes for this. The size of HEX code for LedBlink in arduino is 890 bytes, the same LedBlink in assembly will be just 34 bytes !!!! Wow ahh.. Excess 856 bytes of code dumped inside my ATmega8 for nothing. When comes to industrial application the unwanted junk of code will generate lot of issues. That's why the Arduino's liquidCrystal library is not recommended by most of developers as it collide with interrupt cycle or millis() library.
Arduino is for kids and new comers. For real time application Arduino is not the right tool to write my code. Best to go for ASM Assembly language for AVR.
Since 2006 i'm using Arduino, now i'm feeling limited with arduino resources when there is really a lot of things can be done with AVRs other line of products like ATtiny13, 2313, etc....Arduino will not help to develop codes for this. The size of HEX code for LedBlink in arduino is 890 bytes, the same LedBlink in assembly will be just 34 bytes !!!! Wow ahh.. Excess 856 bytes of code dumped inside my ATmega8 for nothing. When comes to industrial application the unwanted junk of code will generate lot of issues. That's why the Arduino's liquidCrystal library is not recommended by most of developers as it collide with interrupt cycle or millis() library.
Arduino is for kids and new comers. For real time application Arduino is not the right tool to write my code. Best to go for ASM Assembly language for AVR.
Hardware setup
I had my own ATmega8 break out board with 6 inputs and 4 outputs. I'm using this pcbs for most of my project. Here is the schematic diagram of controller.Inputs
Water level pressure switchLoading door open / close switch. (in my project, i'm not using this sensor)
Outputs
BuzzerMotor forward
Motor reverse
Water inlet solenoid
Water drain traction motor
( In my model Whirlpool Splash 55, Its single motor for slow spin and fast spin, it's the drain traction motor change the gear wheel between slow and fast spin )
Wish list : heartbeat LED, sequence indication LEDs, start / pause button, EEPROM storage of electricity failure recovery, etc...
Here is my complete source code in ASM language for ATMEL ATmega8 controlled Washing Machine
AVR-ATMEL-ATmega8-Microcontroller-controllerd-washing-machine- Using-Assembly-Language.asm
Complete project file in zip file (asm, HEX, etc..)
AVR-ATMEL-ATmega8-Microcontroller-controllerd-washing-machine- Using-Assembly-Language