Difference between revisions of "Temperaturmesssystem (Deutsch)"

From Ethersex_Wiki
Jump to: navigation, search
m (FIRMWARE)
m (BOOTLOADER)
Line 20: Line 20:
  
 
=BOOTLOADER=
 
=BOOTLOADER=
<gallery perrow=8>  
+
<gallery>  
 
File:Putty_bootl_tempmess01.png
 
File:Putty_bootl_tempmess01.png
 
File:Putty_bootl_tempmess02.png
 
File:Putty_bootl_tempmess02.png
Line 29: Line 29:
 
File:Putty_bootl_tempmess07.png
 
File:Putty_bootl_tempmess07.png
 
File:Putty_bootl_tempmess08.png
 
File:Putty_bootl_tempmess08.png
</gallery><br>
+
</gallery>
 
==Bootloader bauen==
 
==Bootloader bauen==
 
Ab nun befinde ich mich auf einem <b>virtuellen Debian Rechner</b> wo ich die Firmware herunterlade und daraus den Bootloader erstelle.<br>
 
Ab nun befinde ich mich auf einem <b>virtuellen Debian Rechner</b> wo ich die Firmware herunterlade und daraus den Bootloader erstelle.<br>

Revision as of 20:06, 27 January 2016

PROJEKT Temperaturmessung

Einleitung

  • ZIEL: Eine einfache Temperaturmessung mit dem DS1820.
  • ZIEL: Die Ausgabe einer Temperaturvariable via integrierten Webbrowser.
  • 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.

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

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.10"  // 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                                                 // 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
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

Platzhalter..folgt in ein paar Tagen mit Fotos. 27-01-2015