Benutzer-Werkzeuge

Webseiten-Werkzeuge


contiki:howto_compile

Zum Kompilieren verwende ich den vorgefertigte instant-contiki (das ist eine virtuelle Maschine für VMWare mit Ubuntu OS). Zum Programmieren der MCs verwende ich unter Windows das Atmel AVR Studio. Entweder mit dem Atmel STK500 oder dem Atmel Dragon als Programmiergerät.

Installation vom instant-contiki und Kompilieren eines ersten Programms

  1. Installiere die Contiki Entwicklungsumgebung wie hier beschrieben.
  2. HowTo für den VMWare Player: http://www.contiki-os.org/start.html
  3. (optional) aus Bequemlichkeit arbeite ich auf einem gesharten Verzeichnis (also ein Verzeichnis, dass ich im Instant-Contiki-Ubuntu und im Windows-Wirtsystem lesen und schreiben kann)
    • Im VMWare Player unter „Edit virtual machine settings“
    • den Reiter „Options“ und dann „Shared Folders“ auswählen
    • „Always enabled“ auswählen und mit „Add…“ Verzeichnis vom Windows-Wirtsystem auswählen (bei mir heißt es z.B. VMWareShare).
    • contiki-2.5 source code (http://sourceforge.net/projects/contiki/files/Contiki/Contiki%202.5/) in diesem Verzeichnis entpacken
    • im Instant-Contiki-Ubuntu ist das Verzeichnis über /mnt/hgfs/VMWareShare erreichbar
  4. Den IPv6- Webserver für das Ravenboard kompilieren
    • cd contiki-2.5/examples/webserver-ipv6-raven
    • make
    • Die neu erstelle Datei webserver6-avr-raven.hex ist das flash-binary für den ATmega1284p auf dem Raven-Board.
    • Um das eeprom-binary zu erstellen, muss man noch folgendes command ausführen: avr-objcopy -O ihex -j .eeprom –set-section-flags=.eeprom=„alloc,load“ –change-section-lma .eeprom=0 webserver6-avr-raven.elf webserver6-avr-raven_eeprom.he
  5. Eigenes Programm kompilieren (einfaches Beispiel aus dem Gedächtnis - keine Garantie!)
    • cd contiki-2.5/examples
    • cp -rp webserver-ipv6-raven myHelloWorld
    • cd myHelloWorld
    • make clean
    • vi webserver6.c (vi oder bevorzugten editor)
    • die Zeile AUTOSTART_PROCESSES(…) erweitern mit einem zweiten contiki Process:AUTOSTART_PROCESSES(&hello_world_process,&webserver_nogui_process);
    • dann den eigenen „hello_world_process“ weiter unten beschreiben:
    • PROCESS_THREAD(hello_world_process, ev, data){
  
         PROCESS_BEGIN();

      
   etimer_set(&myetimer, CLOCK_SECOND * 2);
      
   PORTD |= (1 << PIN7);      // PD7 an PORTD als Ausgang setzen
  
         printf("Hello, world\n");


         while(1)                   // Endlosschleife
  
         {
            PORTD ^= (1 << PIN7);   // Toggle PD7 z.B. angeschlossene LED
    
            PROCESS_WAIT_UNTIL(etimer_expired(&myetimer));

            etimer_restart(&myetimer);
  
         }
        
 PROCESS_END();}
    • ganz oben in der Datei brauchen wir dann noch includes und die timer-variable:
    • #include "contiki.h"
      #include <stdio.h> /* For printf() */#include "webserver-nogui.h"#include <avr/io.h>


       
      static struct etimer myetimer; 
    • Der Beispiel-Prozess oben toggelt den Pin7 vom PortD alle 2 Sekunden. Wenn man dieses Programm mit „make“ übersetzt, laufen dann zwei contiki-Prozesse - der webserver wie vorher und zusätzlich ein Prozess, der den Pin D7 alle 2 Sekunden toggelt.
    • make
    • wie vorher ist „webserver6-avr-raven.hex“ unser Programm, was wir in den Flash des ATmega1284p laden. Das binary für den eeprom benötigen wir natürlich auch. Entweder wieder das Kommando von oben ausführen, oder einfach das Kommando ins Makefile einfügen (direkt vor dem avr-size). Wenn man es ins Makefile einfügt, sollte man das file noch im clean-Abschnitt löschen.

Programmieren eines Mikrocontrollers

Programmiersoftware installieren

Bei Atmel anmelden und AVR Studio runterladen und installieren (http://www.atmel.com/microsite/avr_studio_5)

Testaufbau

Oben ist ein Testaufbau abgebildet, in dem ich das Ravenboard mit dem Atmel STK500 über die ISP Schnittstelle programmiere. Alternativ kann man auch mit anderen Programmiergeräten (z.B. Atmel Dragon oder Atmel JTAGICEmkII) und auch über die JTAG Schnittstelle programmieren. Das Prinzip ist aber eigentlich immer gleich.

Empfohlene Einschaltreihenfolge
  • Ravenboard spannungslos machen
  • Ravenboard mit dem Programmiergerät verbinden. Ich habe bisher nur den ATmega1284p programmiert. Die Anschlüsse sind die zweiten von rechts. Oben ist die ISP Schnittstelle, unten die JTAG Schnittstelle. Für JTAG kann man die mitgelieferten Adapter verwenden.
  • Programmiergerät an den Computer anschließen. Beim STK500 über serielle Schnittstelle, beim Dragon und beim JTAGICE über USB.
  • Ravenboard mit Spannung versorgen (entweder über die interne Batterie oder über ein Netzteil mit 5-12V DC an der Pinleiste J401 unten: an den Anschluss ganz links muss 5-12V und an den zweiten von links muss Ground)
JTAGICE mkII

Kommentar Atmel: When the JTAGICE mkII is properly connected to the target and the host PC, the power can be turned on. It's recommended to power up the JTAGICE mkII before the target is powered, to avert the possibility of current flowing from the target into the unpowered JTAGICE mkII.

Two of the LEDs on the JTAGICE mkII indicates if power is present on respectively target and ICE itself:

Nr Color Description
1 Green Indicates Target Power
2 Red JTAGICE mkII power
3 Green/Yellow/Red siehe unten:
  • Green: Data Transfer
  • Yellow: Firmware upgrade or initialisation
  • Red: Idle, not connected to AVR Studio
  • No light: Idle, connected to AVR Studio (if LED2 is lit)

Programm flashen

(im Moment habe ich keinen Testaufbau vor mir, deswegen fehlt vielleicht der ein oder andere Schritt)

  • Atmel Studio 5 starten
  • im Menu unter Tools→AVR_Programming
  • als Tool das angeschlossene Programmiergerät auswählen
  • als Device den ATmega1284p auswählen und „Apply“ drücken
  • als Flash Binary unser „ webserver6-avr-raven.hex“ auswählen und programmieren
  • als eeprom Binary das gleiche mit unserem „ webserver6-avr-raven_eeprom.hex“
  • und schon sollte das Ravenboard programmiert sein (zur Sicherheit kann man sich vor dem Programmieren den alten Inhalt des Flashs und des eeproms sichern).

Zur Info: ich habe auch noch das AVR Studio 4 installiert. Das hat den Vorteil, dass man den Microcontroller mit dem .elf file programmieren kann. Im .elf stecken alle Informationen drin, die man zum programmieren benötigt (Flash, eeprom und auch die Fuse Bits). Allerdings muss man beim Dragon ein Firmware „Downgrade“ machen, um mit dem AVR Studio 4 programmieren zu können.

Ich habe festgestellt, dass es wichtig ist, dass der RZUSBSTICK und das RavenBoard mit der gleichen contiki Version programmiert sind. Evtl. muss also auch der RZUSBSTICK programmiert werden. Funkioniert aber analog zu der Beschreibung oben.

Der Einfachheit halber gibt es schon erstellte .elf files für alle Raven Microcontroller von der contiki hompage: (https://sourceforge.net/projects/contiki/files/Contiki/Contiki%202.5/contiki-raven-2.5.zip/download). Die muss man allerdings dann mit dem AVR Studio 4 programmieren.

  • ravenlcd_3290.elf der Ravenboard LCD Microcontroller (Anschlüsse ganz rechts)
  • webserver6.elf der Ravenboard ATmega1284p (siehe Beschreibung)
  • ravenusbstick.elf der RZUSBSTICK

Verbindung zum Ravenboard herstellen

Das wird über den RZUSBSTICK gemacht. Mein Windows Vista hat den nicht erkannt, deswegen verwende ich auch das Instant-Contiki-Ubuntu dafür. Alternativ habe ich noch einen anderen Laptop mit Linux Mint (auch eine Ubuntu Version), der hat den RZUSBSTICK auch ohne Probleme erkannt. Die Anleitung funktioniert für beide Varianten.

  • radvd über den „Software Package Manager“ nachinstallieren.
  • Config-file /etc/radvd.conf erstellen mit folgenden Inhalt:
    interface usb0
    {
        AdvSendAdvert on;
        AdvLinkMTU 1280;
        AdvCurHopLimit 128;
        AdvReachableTime 360000;
        MinRtrAdvInterval 100;
        MaxRtrAdvInterval 150;
        AdvDefaultLifetime 200;
        prefix AAAA::/64
        {
            AdvOnLink on;
            AdvAutonomous on;
            AdvPreferredLifetime 4294967295; 
            AdvValidLifetime 4294967295; 
        };
    };
    • RZUSBSTICK einstecken (und evtl. über dem VMWare Player der virtuellen Maschine zuordnen)
    • folgende Kommandos in einer shell ausführen:
    • sudo ip -6 address add fe80::0012:13ff:fe14:1516/64 scope link dev usb0
      sudo ip -6 address add aaaa::1/64 dev usb0
      sudo /etc/init.d/radvd start 
    • damit ist der RZUSBSTICK über das device usb0 konfiguriert. Jetzt sollte das RavenBoard erreichbar sein:
    • ping6 -s aaaa::1 aaaa::11:22ff:fe33:4455

      Und man sollte über den Browser drauf zuzugreifen können: „http://[aaaa::0011:22ff:fe33:4455]“.

Noch ein paar Hilfen

contiki/howto_compile.txt · Zuletzt geändert: 2017/01/24 18:49 (Externe Bearbeitung)