Inhaltsverzeichnis

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

Programm flashen

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

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.

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.

Noch ein paar Hilfen

Programmierbeispiele (extern):