Temperaturmesssystem (Deutsch)

From Ethersex_Wiki
Revision as of 19:47, 27 March 2016 by Djmaster (talk | contribs) (Schaltung)
Jump to: navigation, search
meine Testplatine, Layout stimmt bis auf Kleinigkeiten überein
Testplatine beim Programmieren mit avrdude via ISP

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

  • Schaltung
  • 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

  • Putty Bild 1
  • Putty Bild 2
  • Putty Bild 3
  • Putty Bild 4
  • Putty Bild 5
  • Putty Bild 6
  • Putty Bild 7
  • Putty Bild 8

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 Quick_Start_Guide/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

  • avrdude Bild 1
  • avrdude Bild 2
  • avrdude Bild 3
  • avrdude Bild 4

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

  • c6_m4 Bild 1
  • c6_m4 Bild 2
  • c6_m4 Bild 3
  • 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);  // Die ID muss vorher aus dem Sensor ausgelesen werden. Erklärung ganz am Schluss.
       WAIT(5)
THREAD_END(start)

ON STARTUP DO
  THREAD_START(start)
END

CONTROL_END

Kompilieren der eigentlichen Firmware.

# make clean && make                                             // Befehl zum bereinigen & 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 im nächsten Schritt.

Firmware flashen via TFTPD

  • tftpd Bild 1
  • tftpd Bild 2
  • tftpd Bild 3
  • tftpd Bild 4


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.
  • Der Mikrocontroller ist nun via Webinterface erreichbar. Es können nur ecmd Befehle entgegengenommen werden.
  • erste Testverbindung zu unserem Mikrocontroller - http://192.168.123.60/ecmd?help
----AUSGABE----
c6 get 
c6 set 
wdreset
....
1w list
1w get
1w convert
help
version
  • Sollten wir eine neue Firmware kompiliert haben können wir den Controller via Webinterface neu starten. Befehl dazu ist "wdreset".
  • Also neue esex060.bin wieder in den tftpd Ordner kopieren, tftpd starten und via Web "wdreset" ausführen.
  • http://192.168.123.60/ecmd?wdreset
  • Nun ladet sich der Controller die esex060.bin wieder via tftpd.

Hinweise

- 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!

ONEWIRE

Auslesen der Sensor ID

----AUSGABE----
1054698802080017
OK
  • Nun könnt Ihr die richtige ID oben im Control6 Script einsetzten und die Firmware neu kompilieren.
  • Wir haben im C6 Script eine Temperatur variable definiert welche "temp01" lautet.
  • Aktualisiert wird die Variable alle 5 Sekunden, das ist ebenfalls im C6 Script angegeben.
  • Diese kann ich nun via Webinterface abfragen - http://192.168.123.60/ecmd?c6 get temp01
----AUSGABE----
temp01 241   // 24.1 Grad

Todoliste