Benutzer:Biff: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
(Impulszähler)
(diverses)
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Toolchain unter Windows ==
 
== Toolchain unter Windows ==
Voraussetzung zur Programmierung des AVR Net-IO ist eine funktionierende Toolchain.
+
Voraussetzung zur Programmierung des [[AVR Net-IO]] ist eine funktionierende Toolchain.
  
 
Zusätzlich zum reinen AVR Net-IO standen mir ein Netbook mit Windows 7 und ein STK500-kompatiblen ISP-Programmer mit eingebautem FTDI-Chip (für Umsetzung USB->seriell) zur Verfügung.
 
Zusätzlich zum reinen AVR Net-IO standen mir ein Netbook mit Windows 7 und ein STK500-kompatiblen ISP-Programmer mit eingebautem FTDI-Chip (für Umsetzung USB->seriell) zur Verfügung.
Zeile 10: Zeile 10:
 
##FTDI-Treiber für Programmer installiert
 
##FTDI-Treiber für Programmer installiert
 
##WinAVR installiert
 
##WinAVR installiert
 +
##Flashen per avrdude ging zunächst nicht, da ich bei meinem Adapterkabel GND ausgerechnet an den Pin angeschlossen hatte, der beim AVR Net-IO nicht entsprechend belegt ist, siehe [[Wie flasht man ein AVR-NET-IO#Andere ISP-Programmer]]. Problem behoben.
 
##Firmware per avrdude reingeflasht, an den Fuses brauchte ich nichts zu ändern.
 
##Firmware per avrdude reingeflasht, an den Fuses brauchte ich nichts zu ändern.
 
##Net-IO antwortet auf Ping, Webserver liefert Ethersex-Seite -> funktioniert also.
 
##Net-IO antwortet auf Ping, Webserver liefert Ethersex-Seite -> funktioniert also.
 
#Selber Ethersex kompilieren
 
#Selber Ethersex kompilieren
##Nach einigen Versuchen festgestellt, dass cygwin und WinAVR bei mir nicht zusammen laufen.
+
##Nach einigen Versuchen festgestellt, dass Cygwin und WinAVR bei mir nicht zusammen laufen.
##Aktuelles cygwin mit allen erforderlichen Optionen sowie aktuellen Betas des AVR-Studio und der AVR-Toolchain für 8-Bit-AVRs installiert, siehe [[Voraussetzungen#Windows]].
+
##Aktuelles Cygwin mit allen erforderlichen Optionen sowie aktuellen Betas des AVR-Studio und der AVR-Toolchain für 8-Bit-AVRs installiert, siehe [[Voraussetzungen#Windows]].
 
##Per "git" aktuelles Ethersex geholt, siehe [[Download]].
 
##Per "git" aktuelles Ethersex geholt, siehe [[Download]].
 
##.config-Datei vom Firmware-Builder übernommen. (Windows nervt hier, weil es beim Download gerne den führenden Punkt unterdrückt. Sicherheitshalber sollte man nochmal im Ethernet-Verzeichnis nachschauen. Wenn dort nur "config" vorhanden ist, muss dieses in ".config" umbenannt werden, was im Windows Explorer kein Problem ist.)
 
##.config-Datei vom Firmware-Builder übernommen. (Windows nervt hier, weil es beim Download gerne den führenden Punkt unterdrückt. Sicherheitshalber sollte man nochmal im Ethernet-Verzeichnis nachschauen. Wenn dort nur "config" vorhanden ist, muss dieses in ".config" umbenannt werden, was im Windows Explorer kein Problem ist.)
Zeile 25: Zeile 26:
 
Mein Ziel war es, auf dem [[AVR Net-IO]] einen Impulszähler zu implementieren, den man per Netzwerk auslesen kann.
 
Mein Ziel war es, auf dem [[AVR Net-IO]] einen Impulszähler zu implementieren, den man per Netzwerk auslesen kann.
  
Nachdem die Toolchain wie oben beschrieben funktionierte, habe ich folgendes gemacht:
+
Nachdem die Toolchain wie oben beschrieben funktionierte, habe ich ein auf meine Bedürfnisse angepasstes Ethersex gebaut:
 +
#Vorhandene .config aus dem Firmware-Builder weiterverwendet.
 +
#per make menuconfig:
 +
##Control6 rein
 +
##OneWire raus, um Platz zu sparen
 +
#Gemäß Infos in [[Control6]], eigene src-Datei und config.mk angelegt. Am besten geht dies, wenn man zunächst die vorhandene control6.src kopiert und umbenennt, und diese eigene src-Datei dann modifiziert. Ich habe in meine src-Datei die Befehle gemäß [[Counter]] aufgenommen. (Zwischendurch hatte ich auch einen Blick auf [[Interrupt Zaehler]] geworfen.)
 +
#make
 +
#per AVR-Studio geflasht
 +
#Net-IO antwortet auf Ping -> läuft also noch.
 +
#Per Browser kann der Zähler ausgelesen werden mit <code>http://192.168.0.100/ecmd?c6+get+pc_counter</code>. Dies liefert zunächst <code>pc_counter 0</code>.
 +
#Wenn nun am ATmega32 der Pin 16 (PD2/INT0) mit GND verbunden wird, zählt der Zähler hoch. Dieser Anschluss ist auch über den Stecker EXT herausgeführt, dort können Pin 1 (INT0) und Pin 9 (GND) miteinander verbunden werden, um den Zähler hochzuzählen.
 +
#Dies kann per Browser bestätigt werden: <code>http://192.168.0.100/ecmd?c6+get+pc_counter</code> liefert nun den aktuellen Wert des Zählers.
  
#Angepasstes Ethersex gebaut:
+
==CAN-Bus / CANOpen==
##Vorhandene .config aus dem Firmware-Builder weiterverwendet.
+
Wäre eine Option für zukünftige Erweiterungen, beispielsweise um mit einer [http://www.ta.co.at/uvr1611s UVR1611] kommunizieren zu können.
##per make menuconfig:
+
 
###Control6 rein
+
Zum Einsatz käme wahrscheinlich ein MCP2515, da dieser bei Reichelt nur 1,50 € kostet (oder bei Microchip sampeln?) und vielfach genutzt wird.
###OneWire raus, um Platz zu sparen
+
 
##Gemäß Infos in [[Control6]], eigene src-Datei und config.mk angelegt. Am besten geht dies, wenn man zunächst die vorhandene control6.src kopiert und umbenennt, und diese eigene src-Datei dann modifiziert. Ich habe in meine src-Datei die Befehle gemäß [[Counter]] aufgenommen. (Zwischendurch hatte ich auch einen Blick auf [[Interrupt Zaehler]] geworfen.)
+
Da die UVR1611 typ. mit 50kBaud sendet, wird wohl lediglich ein Lowspeed-Transceiver benötigt. Leider scheint es bei Reichelt keine zu geben.
##make
 
##per AVR-Studio geflasht
 
##Net-IO antwortet auf Ping -> läuft also noch.
 
##Per Browser kann der Zähler ausgelesen werden mit <code>http://192.168.0.100/ecmd?c6+get+pc_counter</code>. Dies liefert zunächst <code>pc_counter 0</code>.
 
##Wenn nun am ATmega32 der Pin 16 (PD2/INT0) mit GND verbunden wird, zählt der Zähler hoch. Dieser Anschluss ist auch über den Stecker EXT herausgeführt, dort können Pin 1 (INT0) und Pin 9 (GND) miteinander verbunden http://www.ethersex.de/index.php?title=Benutzer:Biff&action=editwerden, um den Zähler hochzuzählen.
 
##Dies kann per Browser bestätigt werden: <code>http://192.168.0.100/ecmd?c6+get+pc_counter</code> liefert nun den aktuellen Wert des Zählers.
 
  
==CAN-Bus / CANOpen==
+
Zukünftig könnte natürlich auch direkt ein AVR mit CAN-Interface zum Einsatz kommen, z.B. AT90CANx.
Wäre eine Option für zukünftige Erweiterungen, beispielsweise um mit einer [[http://www.ta.co.at/uvr1611s|UVR1611]] kommunizieren zu können.
 
  
Zum Einsatz käme wahrscheinlich ein MCP2515, da dieser bei Reichelt nur 1,50 € kostet und vielfach genutzt wird.
+
===Übersicht Lowspeed-CAN-Transceiver===
 +
*TJA1054 oder TJA1055, oder gleich TJA1055T/3/C; [http://www.nxp.com/documents/data_sheet/TJA1055.pdf] --> davon scheint nur der TJA1054 über die üblichen Distributoren lieferbar zu sein.
 +
*TLE 6254-3G; [http://www.infineon.com/dgdl/TLE6254-3G_DS_rev21_Green%5B1%5D.pdf?folderId=db3a30431ed1d7b2011edadb13813703&fileId=db3a30431ed1d7b2011edaee1d65372b]
 +
*oder einfach mal nachsehen, was auf der UVR1611 zu finden ist.
  
 
===Linksammlung===
 
===Linksammlung===
Zeile 49: Zeile 57:
 
*http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek
 
*http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek
 
*http://www.canfestival.org/, ein Open Source CANOpen Framework
 
*http://www.canfestival.org/, ein Open Source CANOpen Framework
 +
 +
==M-Bus==
 +
Zukünftige Option.
 +
 +
Zum Auslesen bspw. von Wärmemengenzählern. Dies könnte über den UART und einen Pegelwandler RS232-zu-M-Bus gehen.
 +
 +
Falls man sich die Arbeit sparen möchte, das M-Bus-Protokoll auf dem AVR zu implementieren, so geht die Kommunikation vielleicht sogar über YPORT zu einem PC im Netzwerk, auf dem eine M-Bus-Software installiert ist.
 +
 +
===Linksammlung===
 +
*http://www.m-bus.de/pw1.shtml
 +
*http://www.mbus.org/sw.html
 +
*http://www.mbus.org/drafts/draft-ietf-mmusic-mbus-guidelines-00.html
 +
*http://www.krause.fh-aachen.de/userfiles/file/Diplomarbeiten/2006_10_TCPIP_Osmani.pdf
 +
*http://www.m-bus.com/files/default.php
 +
*http://www.m-bus.com/files/CBDIPW6.PDF
 +
*http://www.michaelrac.com/download.php
 +
*http://www.a2s.pl/en/m-bus-10-p-3150.html, fertiges Pegelwandler-Modul
 +
 +
==Aktives Ping, etc.==
 +
Ein Mikrocontroller mit Ethersex kann bisher nur angepingt werden und darauf antworten (sofern ICMP-Unterstützung konfiguriert wurde), jedoch nicht selber ein Ping absetzen, um zu schauen, ob ein anderer Rechner aktiv ist. Vermutlich kann man sich ein Workaround bauen, indem man per TCP oder UDP versucht eine Verbindung aufzubauen. Wenn es nicht klappt, ist der andere Rechner nicht erreichbar oder zumindest nicht zur vorgesehenen Kommunikation bereit - was vermutlich auf's selbe hinausläuft. Doch sauberer wäre natürlich ein echtes Ping.
 +
 +
Für ein aktives Ping bräuchte man wohl folgendes:
 +
* Erweiterung der ICMP-Unterstützung des µIP-Stacks in <code>/protocols/uip/uip.c</code>
 +
* einen ECMD-Befehl namens PING
 +
* optional: Verwendung von Timer oder Echtzeituhr, um die Paketlaufzeit ermitteln zu können
 +
* optional: Verwendung von DNS, um nicht nur IP-Nummern anpingen zu können
 +
* optional: Implementierung von DHCP (anstelle von lediglich BOOTP), um die IP-Nummer des DNS-Servers nicht fest konfigurieren zu müssen.
 +
* Geschätzte 641kB zusätzlichen Speicher, um den ganzen Krempel unterzubringen.
 +
* Erweiterung des Menuconfig um entsprechende Konfigurationseinträge
 +
 +
==Internes EEPROM==
 +
Hm, ist die Konfigurationsoption "General Setup/VFS/Host Filesystem" wirklich dafür da, um das interne EEPROM des AVR zu nutzen. Muss ich mal testen ;-)

Aktuelle Version vom 2. September 2010, 08:15 Uhr

Toolchain unter Windows

Voraussetzung zur Programmierung des AVR Net-IO ist eine funktionierende Toolchain.

Zusätzlich zum reinen AVR Net-IO standen mir ein Netbook mit Windows 7 und ein STK500-kompatiblen ISP-Programmer mit eingebautem FTDI-Chip (für Umsetzung USB->seriell) zur Verfügung.

Damit konnte ich mich dann an die Arbeit begeben. Tatsächlich lief natürlich wenig sofort und ich musste mehrfach probieren, bis ich Erfolg hatte. Vielleicht hilft der folgende Schnelldurchgang dem einen oder anderen, etwas schneller zum Ziel zu kommen:

  1. AVR Net-IO mit Pollin-Firmware antwortet auf Ping -> funktioniert also.
  2. Testweise einfaches Ethersex reinflashen
    1. Per Firmware-Builder simples IPv4-Image für AVR Net-IO machen lassen
    2. FTDI-Treiber für Programmer installiert
    3. WinAVR installiert
    4. Flashen per avrdude ging zunächst nicht, da ich bei meinem Adapterkabel GND ausgerechnet an den Pin angeschlossen hatte, der beim AVR Net-IO nicht entsprechend belegt ist, siehe Wie flasht man ein AVR-NET-IO#Andere ISP-Programmer. Problem behoben.
    5. Firmware per avrdude reingeflasht, an den Fuses brauchte ich nichts zu ändern.
    6. Net-IO antwortet auf Ping, Webserver liefert Ethersex-Seite -> funktioniert also.
  3. Selber Ethersex kompilieren
    1. Nach einigen Versuchen festgestellt, dass Cygwin und WinAVR bei mir nicht zusammen laufen.
    2. Aktuelles Cygwin mit allen erforderlichen Optionen sowie aktuellen Betas des AVR-Studio und der AVR-Toolchain für 8-Bit-AVRs installiert, siehe Voraussetzungen#Windows.
    3. Per "git" aktuelles Ethersex geholt, siehe Download.
    4. .config-Datei vom Firmware-Builder übernommen. (Windows nervt hier, weil es beim Download gerne den führenden Punkt unterdrückt. Sicherheitshalber sollte man nochmal im Ethernet-Verzeichnis nachschauen. Wenn dort nur "config" vorhanden ist, muss dieses in ".config" umbenannt werden, was im Windows Explorer kein Problem ist.)
    5. In der Cygwin-Bash-Shell "make menuconfig" und "make" befohlen
    6. Ergebnis lässt sich per AVR-Studio flashen
    7. Net-IO antwortet auf Ping, Webserver liefert Ethersex-Seite -> funktioniert also weiterhin. (Testhalber habe ich zwischendurch mal die Firmware mit anderer IP-Adresse gebaut, um zu bestätigen, dass ich tatsächlich eine neue Firmware reingebrannt habe.)

Impulszähler

Mein Ziel war es, auf dem AVR Net-IO einen Impulszähler zu implementieren, den man per Netzwerk auslesen kann.

Nachdem die Toolchain wie oben beschrieben funktionierte, habe ich ein auf meine Bedürfnisse angepasstes Ethersex gebaut:

  1. Vorhandene .config aus dem Firmware-Builder weiterverwendet.
  2. per make menuconfig:
    1. Control6 rein
    2. OneWire raus, um Platz zu sparen
  3. Gemäß Infos in Control6, eigene src-Datei und config.mk angelegt. Am besten geht dies, wenn man zunächst die vorhandene control6.src kopiert und umbenennt, und diese eigene src-Datei dann modifiziert. Ich habe in meine src-Datei die Befehle gemäß Counter aufgenommen. (Zwischendurch hatte ich auch einen Blick auf Interrupt Zaehler geworfen.)
  4. make
  5. per AVR-Studio geflasht
  6. Net-IO antwortet auf Ping -> läuft also noch.
  7. Per Browser kann der Zähler ausgelesen werden mit http://192.168.0.100/ecmd?c6+get+pc_counter. Dies liefert zunächst pc_counter 0.
  8. Wenn nun am ATmega32 der Pin 16 (PD2/INT0) mit GND verbunden wird, zählt der Zähler hoch. Dieser Anschluss ist auch über den Stecker EXT herausgeführt, dort können Pin 1 (INT0) und Pin 9 (GND) miteinander verbunden werden, um den Zähler hochzuzählen.
  9. Dies kann per Browser bestätigt werden: http://192.168.0.100/ecmd?c6+get+pc_counter liefert nun den aktuellen Wert des Zählers.

CAN-Bus / CANOpen

Wäre eine Option für zukünftige Erweiterungen, beispielsweise um mit einer UVR1611 kommunizieren zu können.

Zum Einsatz käme wahrscheinlich ein MCP2515, da dieser bei Reichelt nur 1,50 € kostet (oder bei Microchip sampeln?) und vielfach genutzt wird.

Da die UVR1611 typ. mit 50kBaud sendet, wird wohl lediglich ein Lowspeed-Transceiver benötigt. Leider scheint es bei Reichelt keine zu geben.

Zukünftig könnte natürlich auch direkt ein AVR mit CAN-Interface zum Einsatz kommen, z.B. AT90CANx.

Übersicht Lowspeed-CAN-Transceiver

  • TJA1054 oder TJA1055, oder gleich TJA1055T/3/C; [1] --> davon scheint nur der TJA1054 über die üblichen Distributoren lieferbar zu sein.
  • TLE 6254-3G; [2]
  • oder einfach mal nachsehen, was auf der UVR1611 zu finden ist.

Linksammlung

M-Bus

Zukünftige Option.

Zum Auslesen bspw. von Wärmemengenzählern. Dies könnte über den UART und einen Pegelwandler RS232-zu-M-Bus gehen.

Falls man sich die Arbeit sparen möchte, das M-Bus-Protokoll auf dem AVR zu implementieren, so geht die Kommunikation vielleicht sogar über YPORT zu einem PC im Netzwerk, auf dem eine M-Bus-Software installiert ist.

Linksammlung

Aktives Ping, etc.

Ein Mikrocontroller mit Ethersex kann bisher nur angepingt werden und darauf antworten (sofern ICMP-Unterstützung konfiguriert wurde), jedoch nicht selber ein Ping absetzen, um zu schauen, ob ein anderer Rechner aktiv ist. Vermutlich kann man sich ein Workaround bauen, indem man per TCP oder UDP versucht eine Verbindung aufzubauen. Wenn es nicht klappt, ist der andere Rechner nicht erreichbar oder zumindest nicht zur vorgesehenen Kommunikation bereit - was vermutlich auf's selbe hinausläuft. Doch sauberer wäre natürlich ein echtes Ping.

Für ein aktives Ping bräuchte man wohl folgendes:

  • Erweiterung der ICMP-Unterstützung des µIP-Stacks in /protocols/uip/uip.c
  • einen ECMD-Befehl namens PING
  • optional: Verwendung von Timer oder Echtzeituhr, um die Paketlaufzeit ermitteln zu können
  • optional: Verwendung von DNS, um nicht nur IP-Nummern anpingen zu können
  • optional: Implementierung von DHCP (anstelle von lediglich BOOTP), um die IP-Nummer des DNS-Servers nicht fest konfigurieren zu müssen.
  • Geschätzte 641kB zusätzlichen Speicher, um den ganzen Krempel unterzubringen.
  • Erweiterung des Menuconfig um entsprechende Konfigurationseinträge

Internes EEPROM

Hm, ist die Konfigurationsoption "General Setup/VFS/Host Filesystem" wirklich dafür da, um das interne EEPROM des AVR zu nutzen. Muss ich mal testen ;-)