# vim:sw=8:ts=8:si:et


This is the software for the tuxgraphics.org
ethernet weather station with LCD display. 

See http://tuxgraphics.org/electronics/

Copyright of most software and all diagrams: Guido Socher

Copyright of enc28j60.c/enc28j60.h Pascal Stang (http://www.procyonengineering.com/)
          and small modifications by Guido Socher

License for everything: GPL V2
See http://www.gnu.org/licenses/gpl.html
---------------------------------------------------------------------------

 All parts needed to build this AVR ethernet solution can be ordered from 
 http://shop.tuxgraphics.org/                                          
 Note that the magnetics need to fit exactly the requirements of the enc28j60
 chip. You can not just take any transformer.

compiling the software
----------------------

!! READ THIS FIRST !!
---------------------
! Edit the file main.c and change the 3 lines:
! static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x25};
! static uint8_t myip[4] = {10,0,0,25};
! static char baseurl[]="http://10.0.0.25/";

Check the file "Makefile" and make sure the MCU is set correctly:
MCU=atmega168
DUDECPUTYPE=m168
or
MCU=atmega88
DUDECPUTYPE=m88
or
MCU=atmega328p
DUDECPUTYPE=m328

For the first device you build you will not need to change the mymac line.
But you will probably need to change the IP address (myip). It must be a
free address from the address range in your home network.

There is a range of private addresses (not routed on the public internet)
which you can use:
Netmask          Network Addresses
255.0.0.0         10.0.0.0 - 10.255.255.255
255.255.0.0       172.16.0.0 - 172.31.255.255
255.255.255.0     192.168.0.0 - 192.168.255.255

Example: you wlan router might have 192.168.1.1, your PC might have
192.168.1.2. This means you could e.g use 192.168.1.10 and leave some
room for more PCs. If you use DHCP then make sure that the address it not
double allocated (exclude it from the DHCP range or reserve it for the
mac address of the avr ethernet board).

You need an avr-gcc development environment in order to compile this.
You need at least avrlibc-1.4.x !! The atmega88/atmega168 will not work 
with earilier versions.

To compile the final software use the command:
make

Note: windows users may use and modify the supplied win_cmp.bat to setup the
environment correctly.

The above command will compile the following hex files:
eth_rem_dev_weather.hex  test1.hex  test_readSiliconRev.hex
test0.hex                test2.hex  test_showRawADCval.hex


The command
make load

will execute the avrdude command to load the software.
E.g something like: 
   avrdude -p m88 -c avrusb500 -e -U flash:w:eth_rem_dev_tcp.hex

! Note your programmer might interfer with the enc28j60! For the avrusb500
! with 30cm cable you can normally leave the cable on. For all other programmers
! it is however saver to remove the programmer cable and power down/up the device.
! This is because the SPI interface is used for loading of the software and 
! communication to the enc28j60.

To see a list of all possible build targets run the command:
make help

Selecting the right clock source
--------------------------------
Tuxgraphics hardware sold as of march 2007 is prepared to use the clock
signal from the enc28j60. To use it you need to change the 
low fuse byte once from 0x62 to 0x60:
avrdude -p m88 -c avrusb500 -u -v -U lfuse:w:0x60:m

or just type in your Linux shell:
make fuse

After the programming of the lfuse the fuse bytes are as follows:
  low fuse:  0x60
  high fuse: 0xdf
  ext. fuse: 0x01

    details of the lfuse bits:
      CKDIV8 = 0
      CKOUT  = 1
      SUT1   = 1
      SUT0   = 0
      CKSEL3 = 0
      CKSEL2 = 0
      CKSEL1 = 0
      CKSEL0 = 0

Note: Older hardware must use the atmega88 internal clock (8MHz).
Don't try to change any fuse bytes on the older hardware!! You will
not easily be able to undo such an operation on the older hardware.
It will completely halt and nothing will work anymore.
The older hardware must use the factory default fuses which look like this:
low fuse:  0x62
high fuse: 0xdf
ext. fuse: 0x01

If you are unsure what the current fuse setting are on the atmega88 
then you can read the fuse settings with a command like: 
          avrdude -p m88 -c stk500v2 -v -q
      The result should be something like this (default factory settings):
          avrdude: safemode: lfuse reads as 62
          avrdude: safemode: hfuse reads as DF
          avrdude: safemode: efuse reads as 1

Compiling on non-Unix systems
-----------------------------
Please use the provided Makefile !!!

It will also work under Windows except for the loading
of the software. That is compiling will work but not
"make load". Use then whatever tools and commands to download
the resuting .hex file into the micrcontroller

Take also a look at the supplied win_cmp.bat file. This bat script
might be needed to set the environment correctly.


Loading the ethernet board test software
----------------------------------------
Test of the atmega88:
make test0.hex
make load_test0

This will case a LED on PB1 to blink with 1Hz

---------------
Edit the file test1.c and change the lines (see description above):
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x25};
static uint8_t myip[4] = {10,0,0,25};

make test1.hex
make load_test1

The program will perform a LED test for the LEDs on the magjack.
The LEDs will go on and off after startup and then the green LED
should stray on indicating that the link is up. When you ping the circuit
it will answer. The yellow LED should blink when the a packet arrives.
The red LED on PB1 should go on/off with every ping packet.

---------------
Edit the file test2.c and change the lines (see description above):
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x25};
static uint8_t myip[4] = {10,0,0,25};

make test2.hex
make load_test2

The green LED on the magjack should go on indicating that the link is up.
When you ping the circuit it will answer. The yellow LED should blink when 
the a packet arrives.

Point your web browser to the device: 
http://10.0.0.25
You should see a web page that says "OK, it works".

Using the eth_rem_dev_weather with TCP/HTTP 
-------------------------------------------
Load the final sofware (eth_rem_dev_weather.hex) and
point your web browser to
http://10.0.0.25   (or what ever IP address you have given your hardware)


You should get a web page like this:

AVR Weather Station

In-door temp : 14.5'C [58.1'F]
Out-door temp: 24.5'C [76.1'F]
Air pressure : 1016.5 hPa real
               1031.0 hPa at sea level


[refresh]
______________________________________

version 2.8, tuxgraphics.org


Revision history
----------------
2007-04-30: version 3.0 -- first public version, based on eth_rem_dev_weatherstation-2.8
2007-05-04: version 3.1 -- change analog.c to ensure correct calculation order
                           in integer math.
                        -- allow any valid url which contains the base-url
2009-02-14: version 3.2 -- adaptation to atmega328 and timing with new compiler.