Benutzer-Werkzeuge

Webseiten-Werkzeuge


contiki:a-n-solutions-module:contiki-snmp

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
contiki:a-n-solutions-module:contiki-snmp [2012/10/08 10:12] – [Betriebszustandsanzeige über LED DS3] sven_zehlcontiki:a-n-solutions-module:contiki-snmp [2017/01/24 18:49] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 11: Zeile 11:
  
 ===== Betriebszustandsanzeige über LED DS3 ===== ===== Betriebszustandsanzeige über LED DS3 =====
-Zur Signalisierung der Betriebszustandsanzeige wurde innerhalb des Contiki SNMP Prozesses (snmpd.c) zuerst alle LEDs als Ausgänge geschaltet, anschließend LED DS3 (PIN7) auf LOW geschaltet und somit aktiviert.+Zur Signalisierung der Betriebszustandsanzeige wurden innerhalb des Contiki SNMP Prozesses (snmpd.c) zuerst alle LEDs als Ausgänge geschaltet, anschließend LED DS3 (PIN7) auf LOW geschaltet und somit aktiviert.
  
 <code c> <code c>
 +#include <avr/io.h>
 +
  /*Switch LED on @ANY Brick On if SNMPD started and set other LEDs as Output*/  /*Switch LED on @ANY Brick On if SNMPD started and set other LEDs as Output*/
  DDRB |= (1 << PIN5);  DDRB |= (1 << PIN5);
Zeile 23: Zeile 25:
  /*END LED @ANY Brick*/  /*END LED @ANY Brick*/
 </code> </code>
- 
 ===== Paketempfangssignalisierung über LED DS2 ===== ===== Paketempfangssignalisierung über LED DS2 =====
  
 +Um das Eintreffen eines Pakets über uIPv6 visualisieren zu können, wurde die LED DS2 innerhalb der Funktion ''tcpip_input(void)'' innerhalb der Datei tcpip.c im Verzeichnis ''/core/net/'' angepasst.
  
-===== Port Pin Steuerung über SNMPv3 über LED DS1 =====+<code c>
  
 +/*---------------------------------------------------------------------------*/
 +void
 +tcpip_input(void)
 +{
 +  /*sz*/
 +  /*Blinking LED on packet receiving*/
 +  PORTB &= ~(1 << PIN6);
 +  /*sz*/
  
 +  process_post_synch(&tcpip_process, PACKET_INPUT, NULL);
 +  uip_len = 0;
 +#if UIP_CONF_IPV6
 +  uip_ext_len = 0;
 +#endif /*UIP_CONF_IPV6*/
 +  
 +  /*sz*/
 +  /*Blinking LED on packet receiving*/
 +  PORTB |= (1 << PIN6);
 +  /*sz*/
 +}
 +/*---------------------------------------------------------------------------*/
 +
 +</code>
 +===== Pin Steuerung über SNMPv3 über LED DS1 =====
 +
 +Zur Steuerung von LED DS2 wurden die GET und SET Funktionen innerhalb der Datei ''mib-init-beuth-zig.c'' des SNMP Daemons angepasst.
 +
 +<code c>
 +
 +/* LED DS1 for @ANY module start */
 +/** \brief LED DS1 for @ANY module get function*/
 +s8t getBeuthState(mib_object_t* object, u8t* oid, u8t len)
 +{
 +    object->varbind.value.i_value = !((PORTB >> PIN5) & 1);
 +    return 0;
 +}
 +
 +
 +/** \brief set LED DS1 for @ANY module*/
 +s8t setBeuthState(mib_object_t* object, u8t* oid, u8t len, varbind_value_t value)
 +{
 +    if (value.i_value == 1) {
 +        PORTB &= ~(1 << PIN5);
 +    } else {
 +        PORTB |= (1 << PIN5);
 +    }
 +
 + return 0;
 +}
 +/* LED DS1 for @ANY module end */
 +
 +</code>
 ===== Messung der Versorgungsspannung über ADC0 bei Anschluss eines 1:1 Spannungsteilers über die Versorgungsspannung ===== ===== Messung der Versorgungsspannung über ADC0 bei Anschluss eines 1:1 Spannungsteilers über die Versorgungsspannung =====
 +Zur Messung der Versorgungsspannung wurde der PIN des ADC0 mit einem Spannungsteiler beschaltet.
 +
 +{{:contiki:a-n-solutions-module:adc_batt.jpg?450|}}
 +
 +Als Referenzspannung wurden die stabilen intern verfügbaren 2,54V des Mikrocontrollers verwendet. Zur Initialisierung des ADCs sowie zur Abfrage des aktuellen Wertes sind die folgenden Funktionen innerhalb der Datei ''mib-init-beuth-zig.c'' notwendig.
 +
 +<code c>
 +
 +/* battery power level*/
 +/************************/
 +
 +/** \brief function for initialization of the adc*/
 +void adc_init()
 +{
 +    // AREF = AVcc
 +    ADMUX = (1<<REFS0)|(1<<REFS1); //intern 2.54V voltage reference
 +
 +    // ADC Enable and prescaler of 128
 +    // 16000000/128 = 125000
 +    ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
 +}
 +
 +/** \brief adc read function */
 +u16t adc_read()
 +{
 +    ADMUX = (ADMUX & 0xF8)|0;     // clears the bottom 3 bits before ORing
 +    // start single convertion
 +    // write '1' to ADSC
 +    ADCSRA |= (1<<ADSC);
 +    // wait for conversion to complete
 +    // ADSC becomes '0' again
 +    // till then, run loop continuously
 +    while(ADCSRA & (1<<ADSC));
 +
 +    return (ADC);
 +}
 +
 +/** \brief get function for the battery power level mib object*/
 +s8t getBattValue(mib_object_t* object, u8t* oid, u8t len)
 +{
 + adc_init();
 + u16t adc_value;
 + int batt_level;
 + adc_value=adc_read();
 + batt_level=(((25400)/1024)*adc_value*2); //Reference Voltage 2.54Volts, 10Bit ADC, 
 +        //multiplied with ADC Read, multiplied with two because of the 1:1 voltage divider
 +        
 +    object->varbind.value.i_value = batt_level;
 +    return 0;
 +}
 +/*Battery Level end*/
 +
 +</code>
 +
 +
 +
 +
 +
 +===== Download und Kompilierung =====
 +
 +Der komplette Quellcode kann hier heruntergeladen werden: {{:contiki:a-n-solutions-module:atany-snmp.zip|}}. Nach dem Entpacken sind folgende Kopiervorgänge nötig.
 +  - Der Ordner ''snmp'' muss in das Verzeichnis ''/examples/'' kopiert werden.
 +  - Der Ordner ''snmpd'' muss in das Verzeichnis ''apps'' kopiert werden.
 +  - Der Ordner ''avr-zigbit'' muss in das Verzeichnis ''platforms'' kopiert werden.
 +  - Die Datei ''tcpip.c'' muss in das Verzeichnis ''/core/net/'' kopiert werden.
 +Der Kompilierungsvorgang wird anschließend innerhalb des Ordners ''/examples/snmp/'' mit dem Befehl ''make zigbit'' gestartet. Im Anschluß kann die neu erstellte Datei ''snmp-server.elf'' auf das @ANY Modul geladen werden.
 +
 +__Hinweise:__
 +  * Innerhalb des Makefiles kann die MAC Adresse über die Compilerflags ''MAC_CONF_FREQUENCY'' und ''MAC_CONF_NUMBER'' angepasst werden. Gedacht ist hierbei ''MAC_CONF_FREQUENCY=0x09'' für 900MHz und ''DMAC_CONF_FREQUENCY=0x24'' für 2,4GHz. Über ''MAC_CONF_NUMBER'' kann die Knotennummer verändert werden.
 +
 +<code c>
 +#CFLAGS+= -DMAC_CONF_FREQUENCY=0x09 #900MHz
 +CFLAGS+= -DMAC_CONF_FREQUENCY=0x24 #2400MHz
 +CFLAGS+= -DMAC_CONF_NUMBER=0x02
 +</code>
  
 +  * Standardmäßig werden alle Knoten als Router konfiguriert um somit vermaschtes Routing verwenden zu können, dies ist über das Flag ''UIP_CONF_ROUTER'' innerhalb des Makefiles einstellbar.
 +  * Die Verwendung von Contiki SNMP ist in [[https://wiki.ipv6lab.beuth-hochschule.de/contiki/snmp_contiki_25_install#test_der_implementierung|Benutzung von Contiki SNMP]] beschrieben.
contiki/a-n-solutions-module/contiki-snmp.1349691122.txt.gz · Zuletzt geändert: 2017/01/24 18:49 (Externe Bearbeitung)