Temperaturmesssystem (Deutsch)
Contents
PROJEKT Temperaturmessung
Einleitung
- ZIEL: Eine einfache Temperaturmessung mit dem DS1820 im parasitären Modus.
- ZIEL: Die Ausgabe einer Temperaturvariable via integrierten Webbrowser oder telnet.
- ZIEL: Die Firmware muss via Netzwerk neu flashbar sein.
- Abgeändertes vereinfachtes etherrape Board.
- Zwei Spannungsregler, ein atmega644p, ein enc28j60, und etwas 0805 Hühnerfutter.
Schaltung
Das Layout passt in folgendes Gehäuse. Vorher am besten nochmal genau nachmessen. ;)
Conrad Bestell-Nr.: 531441 / Axxatronic CNMB-2-KIT-CON
- Erstellt mit Eagle Version 7.1.0 für Windows
- PDF Schaltung
- PDF Layout gespiegelt
- Eagle Schaltung
- Eagle Layout
Software
Ethersex (Linux) - https://github.com/ethersex/ethersex Avrdude (Windows) - http://download.savannah.gnu.org/releases/avrdude/ (avrdude-6.1-mingw32.zip) tftpd (Windows) - http://tftpd32.jounin.net/tftpd32_download.html (v4.52 tftpd64 standard edition (zip))
Firmware/Bootloader
Die ethersex Firmware selbst wird für zwei Sachen verwendet. Den Bootloader UND die Firmware. Der Bootloader wird sozusagen einmal in den ersten Bereich des Mikrocontrollers geschrieben und bleibt dort auch. Er wird später die Firmware via Netzwerk entgegennehmen und in den Controller schreiben. Somit befindet sich in den ersten 10% unser Bootloader und in den restlichen 90% der Code den wir wollen. Das zu Verstehen war für mich an Anfang der schwierigste Teil, ist aber dann doch sehr einfach. Ich kann somit ohne ISP-Programmer eine Firmware in den Controller schreiben. Hier grob noch die nächsten Schritte:
- Als erstes ist der Bootloader zu konfigurieren, dann via ISP zu programmieren.
- Der ISP-Programmer wegräumen. ;)
- Als zweites ist die Firmware zu konfigurieren, dann holt sich der Bootloader unsere Firmware via Netzerk/tftpd.
BOOTLOADER
Bootloader bauen
Ab nun befinde ich mich auf einem virtuellen Debian Rechner wo ich die Firmware herunterlade und daraus den Bootloader erstelle.
WICHTIG: Die IP und MAC-Adresse müssen natürlich verändert werden. Die selbe IP und MAC-Adresse müssen in der Firmware später auch benutzt werden.
- Bei einem neuen Debian System müssen mit "apt-get" ein paar Sachen nachinstalliert werden. Hier zu finden Preparation_(Deutsch)
- So eine art DHCP wäre auch möglich, nennt sich BOOTP. Darauf gehe ich hier nicht ein.
# cd /home/avr/ # mkdir ethersex_IP_60 // Mein "Arbeitsordner" # cd ethersex_IP_60/ // Ordner für das Board mit der IP 192.168.123.60 # git clone git://github.com/ethersex/ethersex.git // ethersex Firmware herunterladen Cloning into ethersex... remote: Counting objects: 37366, done. remote: Total 37366 (delta 0), reused 0 (delta 0), pack-reused 37366 Receiving objects: 100% (37366/37366), 11.27 MiB | 1.22 MiB/s, done. Resolving deltas: 100% (26538/26538), done. # cp -r ethersex bootloader // Ich kopiere den ethersex Ordner zu dem bootloader Ordner. 1:1 Kopie # cd bootloader/ // In den Bootloader Ordner wechseln # make menuconfig // Einstellungen für Bootloader im nächsten Schritt
│ │ Load a Default Configuration ---> │ │ (*) Ethernet Bootloader │ │ General Setup ---> │ │ (ATmega644) Target MCU │ │ (20000000) MCU frequency │ │ [*] Build a bootloader │ │ [*] Teensy build │ │ Network ---> │ │ Hostname: "esex060" // Hostname ändern │ │ [*] Ethernet (ENC28J60) support ---> │ │ MAC address: "02:ca:fe:3f:10:07" // MAC ändern mit "Randomize MAC address" │ │ Randomize MAC address │ │ --Static IPv4 configuration │ │ IP address: "192.168.123.60" // Wenn IP nicht vorhanden BOOTP deaktivieren! │ │ Netmask: "255.255.255.0" │ │ [*] UDP support │ │ [*] UDP broadcast support │ │ [ ] BOOTP (DHCP-like) support // BOOTP deaktivieren! │ │ Applications ---> │ │ [*] TFTP support ---> │ │ [*] TFTP-o-matic │ │ TFTP-server IPv4 address: "192.168.123.233" // Server wo TFTPD läuft │ │ TFTP image to load: "esex060.bin" // Diesen Dateinamen ladet später unser Board via Netzwerk/tftpd jetzt noch EXIT und SPEICHERN.
# make clean && make // Befehl zum kompilieren =======The ethersex project======== Compiled for: atmega644 at 20000000Hz Imagesize: 5902/8192 bytes (72.4%) [=====================---------] Program (.text + .data) : 5902 bytes Data (.data + .bss) : 1902 bytes ===================================
- Kompilierte Datei die wir benötigen ethersex.hex
Bootloader flashen via ISP
Ich flashe hier einfacher weise mit meinem Windows 7 Notebook. Ich habe avrdude einfach unter C:\ liegen. Dort kopiere ich nun die ethersex.hex hin.
Somit kann man mit dem flashen den Bootloaders loslegen.
avrdude -cusbasp -pm644p -U lfuse:w:0xff:m -U hfuse:w:0xd8:m -U efuse:w:0xfc:m // gilt nur für atmega644p und vermutlich auch 644 avrdude -cusbasp -pm644p -U flash:w:ethersex.hex avrdude -cusbasp -pm644p -U lock:w:0x0F:m
Der Mikrocontrollerboard ist nun vorbereitet für die eigentliche Firmware. Der ISP-Programmer kann nun bei Seite gelegt werden und wird soweit alles richtig konfiguriert ist auch nicht mehr benötigt.
Nun erfolgt das Erstellen der Firmware.
FIRMWARE
Firmware bauen
- WICHTIG: IP, MAC Adresse, Gateway, Netmask, Hostname MUSS gleich sein wie bei dem Bootloader!
- Der integrierte Webserver ist in der original Firmware schon aktiviert. ( Applications --> [*] HTTP Server )
# cd /home/avr/ethersex_IP_60/ # cd ethersex/ # make menuconfig
│ │ Load a Default Configuration ---> │ │ (*) Etherrape │ │ General Setup ---> │ │ (ATmega644) Target MCU // atmega644p bei mir │ │ (20000000) MCU frequency // 20MHz Quarz │ │ [ ] VFS (Virtual File System) support // Benötige ich hier nicht. │ │ [*] control6 script // Hier wird unsere DS1820 Temperatur in eine Variable geschrieben für den implementieren Webserver. │ │ Network ---> // WICHTIG: IP, MAC Adresse, Gateway, Netmask, Hostname MUSS gleich sein wie bei dem Bootloader! │ │ Hostname: "esex060" │ │ [*] Ethernet (ENC28J60) support ---> │ │ MAC address: "02:ca:fe:3f:10:07" │ │ Randomize MAC address │ │ --Static IPv4 configuration │ │ IP address: "192.168.123.60" │ │ Netmask: "255.255.255.0" │ │ │ │ Default gateway: "192.168.123.10" │ │ I/O ---> │ │ [*] Onewire support ---> // Die allgemeine Onewire Unterstützung. │ │ [*] Onewire device detection support // Automatische Bauteilerkennung
In der etherrape.m4 Datei wird nun noch der Pin des atmega geändert wo der DS1820 angeschlossen ist. Im NANO Editor wird mit "STRG-O dann Enter" gespeichert und mit STRG-X beendet.
# nano pinning/hardware/etherrape.m4 // editieren der m4 Datei ----- ONEWIRE PIN ändern bei "ONEWIRE_PORT_RANGE(PD6, PD6)" zb. auf PD0 -----
Nun schreiben wir uns ein Script welches den Temperatursensor regelmäßig abfragt und in eine Globale Variable schiebt.
# rm control6/control6.src // Original Datei löschen # nano control6/control6.src // Anlegen der c6 Datei. Die Datei ist nun neu und leer.
C6_HEADER(`/* This will be in control6.h */') CONTROL_START ECMD_GLOBAL(temp01, 0, uint16_t); THREAD(start) temp01 = ONEWIRE_GET(1054698802080017); WAIT(5) THREAD_END(start) ON STARTUP DO THREAD_START(start) END CONTROL_END
Kompilieren der eigentlichen Firmware.
# make // Befehl zum kompilieren =======The ethersex project======== Compiled for: atmega644 at 20000000Hz Imagesize: 24072/65536 bytes (36.73%) [===========-------------------] Program (.text + .data) : 24072 bytes Data (.data + .bss) : 2250 bytes ===================================
- Kompilierte Datei die wir benötigen ethersex.bin
Die eigentliche Firmware ist nun kompiliert und fertig um via Netzwerk/tftpd aufgespielt zu werden. Ich verwende im folgenden Schritt Windows 7. Beschreibung folgt.
Firmware flashen via TFTPD
Nun ladet ihr euch tftpd herunter und entpackt es. Ich habe dazu einen Ordner Namens "tftpd" in mein Benutzerverzeichnis "C:\Users\BANANE\tftpd\". Dort wird alles hinein kopiert.
Es muss eigentlich nicht viel eingestellt werden. Unter GLOBAL muss TFTP aktiviert sein und unter TFTP sollte das "Base Directory" angepasst werden. Eventuell noch die Bind IP berichtigen. Seht Ihr ja auf den Fotos. Jetzt das Programm noch einmal neu starten.
- Mikrocontrollerplatine ist abgesteckt.
- tftpd starten
- die Datei vom vorigen Schritt in den tftpd Ordner kopieren. ethersex.bin
- ethersex.bin umbenennen in "esex060.bin".
- Mikrocontrollerplatine Einstecken. Jetzt sollte auch schon was passieren, wie auf Bild 4 zu sehen ist.
- Bei meiner Firewall musste ich tftpd noch akzeptieren. tftpd hing beim ersten mal in einer Schleife.
- Und nochmals via Netzwerk wird die .bin geflasht, nicht die .hex Datei!