859 lines
29 KiB
Plaintext
859 lines
29 KiB
Plaintext
Coffee Making
|
||
Fotis Georgatos < gef@ceid.upatras.gr>
|
||
V1.0 2004-08-29
|
||
|
||
One of the most memorable comments about software ever said is whether
|
||
this or that piece of code can make coffee. Coffee is a world commod
|
||
ity that is second only to oil. Linux DOES make coffee; and it tastes
|
||
good as well!
|
||
______________________________________________________________________
|
||
|
||
Table of Contents
|
||
|
||
|
||
1. Introduction
|
||
|
||
1.1 Copyright
|
||
1.2 Disclaimer
|
||
1.3 Version
|
||
1.4 Translations
|
||
1.5 Credits
|
||
1.6 What do you drink/smoke while writing this?
|
||
1.7 Feedback
|
||
|
||
2. Menu
|
||
|
||
2.1 French
|
||
2.2 Nescafe
|
||
2.3 Frappe'
|
||
2.4 Freddo
|
||
2.5 Espresso
|
||
2.6 Cappuccino
|
||
|
||
3. Hardware
|
||
|
||
3.1 Driving voltage 0-5V from the computer
|
||
3.2 Controlling with a Relay
|
||
3.3 Controlling with TRIAC #1
|
||
3.4 Controlling with TRIAC #2
|
||
|
||
4. Software
|
||
|
||
4.1 Programming
|
||
4.2 Device driver
|
||
4.3 Connecting with the Internet
|
||
|
||
5. Building the Turing Complete Coffee Machine
|
||
|
||
5.1 An adequate assembly language
|
||
5.2 Hardware and interfacing
|
||
5.3 Software
|
||
5.4 A minor criticism on the Turing Machine
|
||
|
||
6. Overdose symptoms
|
||
|
||
7. Expansions
|
||
|
||
8. Further Information
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
1. Introduction
|
||
|
||
For a long time humanity has been wondering how could a computer make
|
||
coffee...
|
||
People need coffee to wake up, and stay awake for a long time in front
|
||
of the computer. It is common wisdom that coding is better at night!
|
||
|
||
|
||
The main trick is interfacing a coffee machine to the computer, so
|
||
that it can be controlled by software. This HOWTO will show you how to
|
||
do so.
|
||
|
||
At first, it demonstrates an ON/OFF switch implemented as an
|
||
electronic circuit which controls the coffee-machine's power supply.
|
||
Another chapter will tell you the secrets of building intelligent,
|
||
Turing Complete suitable, coffee machines!
|
||
|
||
This HOWTO was initially written as part of a debate in the mailing
|
||
list linux-greek-users, on whether linux can make coffee or not. It
|
||
then became an article in our online magazine called magaz. Just in
|
||
case you wondered, magaz is in Greek and it will surely look like that
|
||
to you!
|
||
|
||
|
||
Enjoy.
|
||
|
||
|
||
|
||
1.1. Copyright
|
||
|
||
Copyright © 2004-08-29 by Fotis Georgatos. You are free:
|
||
|
||
· to copy, distribute, display, and perform the work
|
||
|
||
· to make derivative works
|
||
|
||
· to make commercial use of the work Under the following conditions:
|
||
Attribution. You must give the original author credit. Share
|
||
Alike. If you alter, transform, or build upon this work, you may
|
||
distribute the resulting work only under a license identical to
|
||
this one.
|
||
|
||
· For any reuse or distribution, you must make clear to others the
|
||
license terms of this work.
|
||
|
||
· Any of these conditions can be waived if you get permission from
|
||
the author.
|
||
|
||
|
||
|
||
1.2. Disclaimer
|
||
|
||
Use the information in this document at your own risk. I disavow any
|
||
potential liability for the contents of this document. Use of the
|
||
concepts, examples, and/or other content of this document is entirely
|
||
at your own risk.
|
||
|
||
All copyrights are owned by their owners, unless specifically noted
|
||
otherwise. Use of a term in this document should not be regarded as
|
||
affecting the validity of any trademark or service mark.
|
||
|
||
Naming of particular products or brands should not be seen as
|
||
endorsements.
|
||
|
||
You are strongly recommended to take a backup of your system before
|
||
major installation and backups at regular intervals.
|
||
|
||
|
||
|
||
1.3. Version
|
||
|
||
The Coffee HOWTO is now called Coffee Making HOWTO and heads for
|
||
release v1.0, which will first appear somewhere here:
|
||
|
||
http://fotis.home.cern.ch/fotis/Coffee.html.
|
||
|
||
It is about time for everyone to know that Coffee Making is just one
|
||
of the standard features that come for free with *any* Linux
|
||
distribution. Or, does SCO have a patent on that, too? Gee...
|
||
|
||
|
||
1.4. Translations
|
||
|
||
You should be able to easily find a translation of this or previous
|
||
versions of the Coffee Making HOWTO in the following languages:
|
||
|
||
· Chinese
|
||
|
||
· Japanese
|
||
|
||
· Russian
|
||
|
||
· Indonesian
|
||
|
||
· Italian
|
||
|
||
· Polish
|
||
|
||
and hopefully many more... (Spanish and Portugeuse anyone?)
|
||
|
||
|
||
|
||
1.5. Credits
|
||
|
||
|
||
· Ethiopia: Identified as the originating country of coffee.
|
||
|
||
· Coffee was popular in the Middle East for ages, until a failed
|
||
invasion of the Turks at the city of Vienna at 1683 left behind
|
||
sacks with strange brown beans nobody wanted:
|
||
http://www.vienna.cc/ekaffeeh.htm/.
|
||
|
||
· Kostas Lialiambis is the one who dared claim he can't make coffee
|
||
with his Linux box, back then in year 1997.
|
||
|
||
· Panagiotis Vrionis et al for giving me interesting and humorous
|
||
notes and let the ball roll in the early days.
|
||
|
||
· NUMEROUS people on the internet with additions and remarks. Thank
|
||
you all, really! Even though I might have not replied to your
|
||
email.
|
||
|
||
|
||
1.6. What do you drink/smoke while writing this?
|
||
|
||
|
||
Well, to the best of my knowledge, this is a dope-free work.
|
||
|
||
But, I can tell you the secret of the music playing on the background:
|
||
nearly any song spelled by Zampetas or Mpithikotsis (bouzouki and
|
||
such).
|
||
|
||
|
||
|
||
1.7. Feedback
|
||
|
||
|
||
For your online commentary of your own DIY Coffee Machine steer at
|
||
http://coffee.sf.net/.
|
||
|
||
|
||
If you still have comments to say, emails get lost these days, so why
|
||
not send me a postcard with a picture from your great hometown, adding
|
||
a recommendation of your favourite cafe' in the area?
|
||
|
||
|
||
Fotis Georgatos,
|
||
Aliartou 32,
|
||
TK 11142 Athens,
|
||
GREECE
|
||
|
||
|
||
|
||
PS.
|
||
|
||
· Your suggestions won't be wasted, I really tend to travel quite a
|
||
lot these days and might be around before your realize it.
|
||
|
||
· Yes, I have been in Amsterdam and even lived there for three years;
|
||
coffee shops generally don't account as cafe's!
|
||
|
||
· Surprise: I actually prefer chocolate and tea over coffee. ;-)
|
||
|
||
|
||
2. Menu
|
||
|
||
|
||
|
||
2.1. French
|
||
|
||
Popular coffee among programmers because it doesn't need a lot of care
|
||
and its cooking is streamlined; just like commercial software. Its
|
||
exciting taste has inspired thousands of programmers in writing
|
||
incredible software, written in the very first hours of a day. M$
|
||
Windows for example has been written at 5:00 o'clock in the morning,
|
||
only thanks to coffee! A similar result is guaranteed.
|
||
|
||
|
||
2.2. Nescafe
|
||
|
||
Nescafe is a rather strong coffee, made by pouring hot water in a
|
||
mixture of coffee, sugar and some water. You usually take 1 spoon of
|
||
coffee and 1 spoon of sugar with just a bit of water, to mix it. In
|
||
the meantime you should have the water boiling. As soon as the water
|
||
is hot enough, you mix them all together and preferably add condensed
|
||
milk. Although you could use something simpler than a coffee-machine
|
||
to boil the water, I have seen this done so several times...
|
||
|
||
|
||
2.3. Frappe'
|
||
|
||
A popular variation of the above mentioned coffee. Actually, you
|
||
don't need a sophisticated coffee-machine, rather a refrigerator for
|
||
cold water and ice-cubes. It is very popular in South Eastern Europe
|
||
during the warm summer months.
|
||
|
||
|
||
2.4. Freddo
|
||
|
||
This is a complicated one, read coffee-faq (read further information)
|
||
|
||
|
||
2.5. Espresso
|
||
|
||
Espresso is a very strong, italian sort of coffee. You serve it in
|
||
small cups (You ask why? See chapter: Overdose Symptomes) with one or
|
||
two pieces of lump sugar. To produce a good espresso you need fresh
|
||
grinded coffee beans, water, lump sugar and a special machine. These
|
||
machines boil the water and press the very hot steam through the
|
||
grinded coffee beans. You can buy a super-duper-automatic machine for
|
||
a lot of money. But a low cost machine is usable, too.
|
||
|
||
OK., lets start. Fill water in your machine. Let it become hot. In the
|
||
meantime fill about 1 teespoon of coffeepowder in the filterhandle of
|
||
your machine. Press the coffeepowder down. Not too much. Now the water
|
||
is at the right temperature. Attach the filterhandle to the machine
|
||
and let the machine work. After about 30 seconds you can serve a
|
||
delicate, hot espresso. It is fine after a good meal. You feel good
|
||
and can code for a few more hours.
|
||
|
||
|
||
|
||
2.6. Cappuccino
|
||
|
||
(See also chapter: Espresso) If you have a more profi-like machine,
|
||
you can use it, to froth milk with it. You need this feature to make a
|
||
creamy sort of coffee. It is easy to prepare. Put some frothed milk in
|
||
a coffee pot and fill it up with espresso. Then decorade with some
|
||
chocolade flakes. That's it.
|
||
|
||
|
||
|
||
3. Hardware
|
||
|
||
A generic diagram could look like this:
|
||
|
||
|
||
|
||
--------- 0-5V --------- ~220V ----------------
|
||
| PC |====>====|Circuit|==========|Coffee-Machine|
|
||
--------- --------- ----------------
|
||
|
||
|
||
|
||
The concept is that we take a controling voltage from the computer,
|
||
which drives an electrically isolated circuit with a Relay or Triac.
|
||
|
||
|
||
You must choose a Relay circuit, if you have a coffee-machine greater
|
||
than 200W. You can use a triac-based one if your coffee machine isn't
|
||
high power.
|
||
|
||
All circuits presented are tested, but the results and risks are YOUR
|
||
OWN RESPONSIBILITY. If you have no experience with electronics you
|
||
should NOT try building it on these, otherwise you may get a bad
|
||
one...
|
||
|
||
|
||
|
||
You should be very careful while experimenting with 220V, and using an
|
||
appropriate fuse is absolutely advisable.
|
||
|
||
|
||
3.1. Driving voltage 0-5V from the computer
|
||
|
||
Here is a simple example to get a voltage 0-5V from the parallel port
|
||
of the computer.
|
||
|
||
|
||
|
||
Back View ----- Pin 10 - ACK
|
||
Male DB-25 | | Pin 9 - D7
|
||
Connector | | Pin 2 - D0
|
||
v v v Pin 1 -
|
||
~Strobe
|
||
____________________________________________________________
|
||
/ \
|
||
\ 13 12 11 10 9 8 7 6 5 4 3 2 1 /
|
||
\ /
|
||
\ 25 24 23 22 21 20 19 18 17 16 15 14 /
|
||
\______________________________________________________/
|
||
|
||
|
||
|
||
Pin 1 is Strobe (inverse logic)
|
||
|
||
Pins 2-9 is DATA BUS's signals, exactly what was written to the
|
||
parallel port's latches with an OUTB command.
|
||
|
||
Pin 10 is the acknowledge signal (ACK), controlled by you, so that you
|
||
can produce an interrupt to the CPU.
|
||
|
||
Pins 18-25 are short-circuited and this is the ground (GND).
|
||
|
||
|
||
In detail:
|
||
|
||
|
||
|
||
<= in DB25 Cent Name of Reg
|
||
=> out pin pin Signal Bit Function Notes
|
||
------ ---- ---- -------- --- -----------------------------
|
||
=> 1 1 -Strobe C0- Set Low pulse >0.5 us to send
|
||
=> 2 2 Data 0 D0 Set to least significant data
|
||
=> 3 3 Data 1 D1 ...
|
||
=> 4 4 Data 2 D2 ...
|
||
=> 5 5 Data 3 D3 ...
|
||
=> 6 6 Data 4 D4 ...
|
||
=> 7 7 Data 5 D5 ...
|
||
=> 8 8 Data 6 D6 ...
|
||
=> 9 9 Data 7 D7 Set to most significant data
|
||
<= 10 10 -Ack S6+ IRQ Low Pulse ~ 5 uS, after accept
|
||
<= 11 11 +Busy S7- High for Busy/Offline/Error
|
||
<= 12 12 +PaperEnd S5+ High for out of paper
|
||
<= 13 13 +SelectIn S4+ High for printer selected
|
||
=> 14 14 -AutoFd C1- Set Low to autofeed one line
|
||
<= 15 32 -Error S3+ Low for Error/Offline/PaperEnd
|
||
=> 16 31 -Init C2+ Set Low pulse > 50uS to init
|
||
=> 17 36 -Select C3- Set Low to select printer
|
||
== 18-25 19-30, Ground
|
||
|
||
|
||
3.2. Controlling with a Relay
|
||
|
||
|
||
The straight-forward circuit one can build is:
|
||
|
||
|
||
|
||
Vcc
|
||
|
|
||
+------+
|
||
| __|__
|
||
Relay /^\ Diode 1N4002
|
||
Coil /---\
|
||
| |
|
||
+------+
|
||
|
|
||
| /
|
||
4.7K B |/ C
|
||
parallel port >-\/\/\/\/---| NPN Transistor: BC547A or 2N2222A
|
||
data pi |\ E
|
||
| \
|
||
V
|
||
parallel port >--------------+
|
||
ground pin |
|
||
Ground
|
||
|
||
|
||
|
||
Connect Vcc with the same voltage as the relay type (usually 5 or
|
||
12V). Obviously, the relay's specifications should be scaled for your
|
||
coffee-machine.
|
||
|
||
Barmen, tend to put the relay AFTER the transistor, at the emitter (E)
|
||
pin instead of the collector (C) pin. This is bad practice because it
|
||
biases the transistor badly, and might result in bad coffee :-).
|
||
Diode 1N4002 is useful to protect the transistor from the relay's
|
||
currents. If you don't use it the transistor will sooner become dark
|
||
and smelly...
|
||
|
||
|
||
3.3. Controlling with TRIAC #1
|
||
|
||
If you only want a simple circuit, you can use Motorola's triac driver
|
||
MOC301[012], together with a general purpose TRIAC like SC141D. This
|
||
method has the advantage that you don't need any extra power supply.
|
||
|
||
|
||
For non-inductive loads, this is the circuitry:
|
||
|
||
|
||
|
||
270 1 +-------+ 6 180
|
||
+5v -VAVAVA-----+ +----VAVAVA-----+-------------- Line Hot
|
||
2 | MOC | |
|
||
TTL in ---------+ 3012 +nc VA SC141D
|
||
| | 4 / |
|
||
nc+ +------------/ |
|
||
+-------+ +----\/\/\/---- Line Neutral
|
||
LOAD
|
||
|
||
|
||
|
||
If you are going to work with 220V, try to obtain a 3021. Inductive
|
||
loads should be used in conjuction with bypass capacitors, better
|
||
consult Motorola Application Note AN-780. Coffee-machines are mainly
|
||
resistive loads and not inductive (like a motor), but who knows what
|
||
yours is?
|
||
|
||
|
||
3.4. Controlling with TRIAC #2
|
||
|
||
|
||
|
||
+5VDC
|
||
| 180 180 2.2k
|
||
+---/\/\/\----+-----+ +----/\/\/-+--/\/\/\---+-------> 120V
|
||
| 1| |6 | | Hot
|
||
| +=====+ | | MT1
|
||
| | MC | TRIAC | +-+
|
||
| | 3032| Driver | G | | TRIAC
|
||
| +=====+ | /| |
|
||
\ 2| |4 | / +-+
|
||
2N3904 |----+ | | | | MT2
|
||
/ | +--------- | -------+ |
|
||
V \ | | |
|
||
| / | \ |
|
||
| \ 43 .01u --- 10k / |
|
||
| / 500V --- \ |
|
||
| | | / |
|
||
+------+ | | | Neutral
|
||
| +--------+--+---o o--> 120V
|
||
/ load
|
||
>-/\/\--| 2N3904
|
||
\
|
||
V
|
||
|
|
||
---
|
||
///
|
||
|
||
This design is for 120V. You should change resistors accordingly for 220V.
|
||
|
||
|
||
|
||
Circuit description:
|
||
|
||
The MC3032 is an optoisolator TRIAC driver. The 180-ohm resistor sets
|
||
the current for the LED emitter in the optoisolator. Change the value
|
||
of this resistor - if necessary - to get a reasonable current (e.g.,
|
||
15 mA).
|
||
|
||
Note that you cannot test this circuit without a load. The TRIAC will
|
||
not switch unless connected to an AC voltage source, so you can't test
|
||
it for simple switching without applying AC and a load. Note the 500V
|
||
rating on the .01 capacitor.
|
||
|
||
|
||
|
||
4. Software
|
||
|
||
|
||
|
||
4.1. Programming
|
||
|
||
You will have to build an executable that will take the following
|
||
steps:
|
||
|
||
· Get permission to use I/O address space, by calling kernel, with
|
||
the call ioperm: eg ioperm( BASE, range ,1);
|
||
|
||
· Perform an out request instruction, to set the 0-5V voltage to the
|
||
parallel port, eg outb( 1, BASE );
|
||
|
||
· Wait enough time so the coffee is made. It would be nice if that
|
||
time is read by looking at the command line.
|
||
|
||
· Then it will turn off the coffee-machine: outb( 0 , BASE );
|
||
|
||
· Before ending it should give back the parallel port with an ioperm(
|
||
BASE, range, 0);
|
||
|
||
Change BASE = 0x3bc for /dev/lp0, 0x378 for /dev/lp1, and 0x278 for
|
||
/dev/lp2; range=8.
|
||
|
||
|
||
It would be useful if you had that program setuid, so that everybody
|
||
can drink coffee! You BOFH!
|
||
|
||
|
||
4.2. Device driver
|
||
|
||
|
||
Just read kernel hacker's guide, to implement a device driver; you
|
||
might also do it in user space. Please compile it as a module, so
|
||
that we won't need a kernel compile in every update. Then write:
|
||
|
||
|
||
echo cappuccino >/dev/coffee
|
||
|
||
|
||
|
||
And you will have a hot cup of coffee in minutes! Remember to give
|
||
the right permissions to /dev/coffee, depending on whether you want
|
||
only root making coffee or not.
|
||
|
||
|
||
The advantage of this method is that it supports feedback from the
|
||
coffee-machine by using the ACK of parallel port and such, so that
|
||
smart coffee-machines can produce an interrupt when ready.
|
||
|
||
|
||
Do it yourself, after reading the excellent book of Alessandro Rubini
|
||
and Jonathan Corbet Linux Device Drivers and studying the Cross
|
||
Reference Linux source code repository.
|
||
|
||
|
||
|
||
4.3. Connecting with the Internet
|
||
|
||
If you have implemented the controlling program in C (see above), you
|
||
just have to write a CGI script to turn ON and OFF the coffee-machine
|
||
or pass along more complex instructions. You should write some nice
|
||
webpages, explaining how to make coffee, and put them on an apache web
|
||
server...
|
||
|
||
|
||
...LAMP technology (Linux, Apache, MySQL, [Perl|Python|PHP]), will
|
||
help you to build a perfect user-customizable coffee system!
|
||
|
||
At some time in the future when the applications get rather complex,
|
||
you might want to extend on the basis of Flow-Based Programming:
|
||
http://www.jpaulmorrison.com/fbp/. What a great match for a great
|
||
Coffee Machine!
|
||
5. Building the Turing Complete Coffee Machine
|
||
|
||
|
||
Do you pine for the nice old days, when men were men and build their
|
||
own coffee machines?
|
||
|
||
|
||
This chapter is about assembling a smart, intelligent!, coffee
|
||
machine. It will be a computer designed with a von Neumann
|
||
architecture, comprised of a CPU, ROM/RAM and I/O and will also be
|
||
suitable for generic use, a.k.a. Universal Turing Machine.
|
||
|
||
|
||
|
||
5.1. An adequate assembly language
|
||
|
||
|
||
Unlike other complex, but popular, systems that are either CISC or
|
||
RISC, our machinery will be MISC: Mono-Instruction Set Computer!
|
||
|
||
Alas, our processor will understand just one command and yet, given
|
||
enough memory and time, it is able to perform any action that your
|
||
3GHz Pentium IV could do, or just simulate it alltogether; It can
|
||
solve any computable problem by running simple code like this:
|
||
|
||
|
||
|
||
SBN $mem1, $addr1
|
||
SBN $mem2, $addr2
|
||
SBN $mem3, $addr3
|
||
SBN $mem4, $addr4
|
||
SBN $mem5, $addr5
|
||
SBN $mem6, $addr6
|
||
[...]
|
||
|
||
|
||
|
||
The magic command is called SBN $mem, $addr (Subtract and Branch if
|
||
Negative), and does take the value of a memory cell $mem, subtract it
|
||
from the accumulator (A is the only available register in this
|
||
architecture) and store it back to the accumulator and memory $mem :
|
||
[mem] <= A <= A-[mem]. If the result is negative, and only then, it
|
||
jumps to the designated address $addr. If $addr points to the next
|
||
command, there is no conditional jump. Now, with that command at hand
|
||
you can subtract, add, zero memory addresses, move bytes around,
|
||
multiply, compare and so on, so forth. What's best of all, you can
|
||
easily build an optimizing compiler.
|
||
|
||
|
||
Voila. This is a great system for any Turing Complete problems plus,
|
||
it is even simpler in coding than the original Turing Machine!
|
||
|
||
|
||
5.2. Hardware and interfacing
|
||
|
||
|
||
The great thing with this innovative MISC processor is that you need 0
|
||
bits to store the opcode of your commands. This makes your CPU much,
|
||
much simpler: you only have to read a couple of operands each time.
|
||
You might wish to extend the capabilities of your processor by
|
||
extending the SBN instruction to 3 or 4 operands, so that it can
|
||
directly load and store data from main memory. This is an exercise
|
||
left to the reader; kudos to google.
|
||
The CPU diagram looks like this:
|
||
|
||
|
||
|
||
<========= ADDRESS BUS ==============>
|
||
= =
|
||
= +---------+ =
|
||
= | CONTROL | =
|
||
+---------+ +-----------------+
|
||
| ALU & A | | Program Counter |
|
||
+---------+ +-----------------+
|
||
= | LOGIC | =
|
||
= +---------+ =
|
||
= =
|
||
<=========== DATA BUS ===============>
|
||
|
||
|
||
|
||
Now, all you have to do is just hook together some memory chips, for
|
||
example by recycling static cache RAM from old 386 PCs, an ALU and a
|
||
few glue components. You may pick one of TTL or CMOS for logic gates
|
||
and latches; I'm a CMOS guy, but this really depends on your favourite
|
||
flavor. You may build an 8, 16, 32, 64 bit or whatever width system
|
||
you need. Just in case, for larger word widths, I have found
|
||
preferable building the ALU with pre-programmed 27128 EPROMS instead
|
||
of the harder-to-find 74x181s. Look around for a carry propagation
|
||
unit, too.
|
||
|
||
|
||
The monolithic nature of this system allows only memory-mapped I/O,
|
||
and requires special design provisions for bidirectional interfacing,
|
||
but nothing more peculiar than what is seen in older-generation
|
||
systems. AGC, the computer that drove Apollo 11 mission to the moon
|
||
was making use of such techniques, so it should be sufficient in this
|
||
case, too.
|
||
|
||
|
||
Note that the data bus has to be exactly as wide as the address bus,
|
||
that implies that the notion of a byte is only applicable to 8 bit
|
||
coffee machines, which you will eventually find that it is more of a
|
||
feature than a bug. You will be surprised with what a coffee you can
|
||
have for 8 or 16 bits bus! It is really a general-purpose piece of
|
||
hardware, built for peanuts.
|
||
|
||
|
||
|
||
5.3. Software
|
||
|
||
Such a pure system will make a good fit together with the, famous for
|
||
embedded systems controlling, FORTH programming language. The major
|
||
prerequisite for doing so is to have a stack mechanism, which in this
|
||
case can be constructed by a counter combined together with a memory
|
||
pool.
|
||
|
||
If you want to claim a serious coffee development platform, C
|
||
portability is an absolute must nowadays. Your choices might be
|
||
hacking one of gcc, lcc or sdcc, which with proper tweaking at the
|
||
back-ends will be able to spit out the specially crafted MISC assembly
|
||
code. One day you might even want to rewrite another language like C,
|
||
forget the D letter - it is taken already, so do not make again the
|
||
same mistakes with your compiler please:
|
||
http://www.gnu.org/software/gcc/projects/beginner.html
|
||
|
||
Just in case you thought of writing your own compiler, please read in
|
||
advance about flex, yacc and just a little bit of related theory. In
|
||
particular you will quickly appreciate Noam Chomsky's taxonomy on
|
||
languages:
|
||
|
||
· regular grammars (the abstract formalism for regular expressions),
|
||
|
||
· context free grammars (any BNF-described language is such) so on,
|
||
so forth. Read ahead on Computability Theory.
|
||
|
||
|
||
|
||
5.4. A minor criticism on the Turing Machine
|
||
|
||
Because of the way a Turing Machine works (see for that
|
||
http://plato.stanford.edu/entries/turing-machine/ ), it is a very
|
||
complicated device to program, and debug at the end of the day. The
|
||
reason is, that its behavior is a sequential process that is
|
||
completely determined by the following parameters:
|
||
|
||
· (1) the State the machine is in,
|
||
|
||
· (2) the Symbol (or number) on the square it is scanning, and
|
||
|
||
· (3) a Table of Instructions
|
||
|
||
The major contemporary disadvantage of the Turing Machine (TM) is that
|
||
it is of sequential nature, which implies that only a particular range
|
||
of problems can be mapped to it in a straightforward way. TMs are
|
||
suitable for problems that are described well on a serial storage
|
||
medium (tapes) and don't make use of indexes for data reference. This
|
||
is in contrast to the Coffee Machine (CM) that can handle any Random
|
||
Access algorithms as well (with no compromise of simplicity).
|
||
|
||
Add to this, that TMs impose a very high and unnecessary complexity on
|
||
item (3) in favor of keeping (1) and (2) simple. And just in case you
|
||
don't agree that the so called Table of Instructions gets trully
|
||
overwhelmed, have you ever tried to write a compiler for a Turing
|
||
Machine? A system that isn't easily programmable and is hard to
|
||
debug, should be considered a seriously questionable system, at least
|
||
as far as Computer Engineering (!= CS) is concerned. For instance,
|
||
try to simulate the Coffee Machine with a Turing Machine and vice
|
||
versa. Hey, if you still disagree, show me the code.
|
||
|
||
Bottom Line: The Coffee Machine (CM), is a much better model for the
|
||
von Neumann architecture and has a O(1) relationship with what is
|
||
standard practice of weighting algorithms, in the current form of
|
||
complexity theory.
|
||
|
||
|
||
|
||
6. Overdose symptoms
|
||
|
||
|
||
· excitement
|
||
|
||
· nervousness
|
||
|
||
· insomnia
|
||
|
||
· tachycardia or cardiac arhythmia
|
||
|
||
· restlessness
|
||
|
||
· Hypersensibility to light
|
||
|
||
· Annoyance in respect with various audio stimuli
|
||
|
||
· gastrointestinal disturbance
|
||
|
||
|
||
|
||
7. Expansions
|
||
|
||
|
||
|
||
· All hardware and software described here, can be expanded so that
|
||
it will support toast, beaf, applepies, etc.
|
||
|
||
· Cluster with 8 coffee-machines. This will let you have coffee even
|
||
when the first one gets off. Of course there will be a perfomance
|
||
hit.
|
||
|
||
· Parallel vector coffee-machine will be a future release.
|
||
|
||
· If you want the maximum automation you'll need more circuits and
|
||
sensors, so that you can control water flow, temperature, coffee
|
||
quantity etc.
|
||
|
||
· In the near future we will implement SNMP features.
|
||
|
||
· Serial coffee-machine at 115Kbps.
|
||
|
||
|
||
|
||
8. Further Information
|
||
|
||
|
||
|
||
· http://db.uwaterloo.ca/~alopez-o/Coffee/coffaq.html This is most
|
||
known Internet's Coffee-FAQ
|
||
|
||
· http://faculty.washington.edu/chudler/caff.html Caffeine and
|
||
effects of on the Nervous System
|
||
|
||
· http://www.gardfoods.com/coffee/coffee.coffee.htm A pretty
|
||
comprehensive, if informal, history of humans' interaction with the
|
||
coffee plant. People have been chewing coffee berries in Africa
|
||
for 100,000 years or so. Coffee was definitely growing in Yemen,
|
||
where it is not native (so must have been planted), in 525 AD.
|
||
|
||
· http://www.faqs.org/rfcs/rfc2324.html RFC2324: Hyper Text Coffee
|
||
Pot Control Protocol (HTCPCP/1.0)
|
||
|
||
· http://www.faqs.org/rfcs/rfc2325.html RFC2325: Definitions of
|
||
Managed Objects for Drip-Type Heated Beverage Hardware Devices
|
||
using SMIv2
|
||
|
||
· http://www.tldp.org/HOWTO/mini/IO-Port-Programming Programming of
|
||
I/O ports under popular operating system Linux.
|
||
|
||
· http://www.ee.washington.edu/circuit_archive/circuits/F_ASCII_Schem_PC.html
|
||
A lot of circuits in ASCII. Some of them are for parallel port.
|
||
|
||
· http://www.citr.auckland.ac.nz/~james/parport.html Whatever you
|
||
wanted to learn about a parallel port and didn't dare to ask.
|
||
|
||
· http://en.tldp.org/LDP/khg/HyperNews/get/khg.html How to write your
|
||
own device drivers. Come on, go ahead!
|
||
|
||
|
||
· http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html
|
||
Tomi Engdahl's web page is a *must see* for everyone who enjoys
|
||
electronics.
|
||
|
||
· http://dir.yahoo.com/Computers_and_Internet/Internet/Devices_Connected_to_the_Internet/Coffee_Machines/
|
||
Coffee-machines on-line. Unfortunately, there are no benchmark
|
||
tests.
|
||
|
||
· http://www.cs.su.oz.au/~bob/Coffee/index.html This coffee-machine
|
||
offers only cappuccino. It has to be upgraded!
|
||
|
||
· http://einstein.et.tudelft.nl/~janssen/ Hot coffee from the the The
|
||
Netherlands.
|
||
|
||
· http://www.cl.cam.ac.uk/coffee/coffee.html The Trojan Room Coffee
|
||
Machine
|
||
|
||
· http://www.menet.umn.edu/coffeecam/ CoffeeCAM
|
||
|
||
The list of links in this chapter, often becomes outdated, therefore
|
||
you might wish to use the excellent Way-Back Machine to find them
|
||
again: http://www.archive.org/
|
||
|
||
|
||
|