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.
cd contiki-2.5/examples/webserver-ipv6-raven
make
webserver6-avr-raven.hex
ist das flash-binary für den ATmega1284p auf dem Raven-Board.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
cd contiki-2.5/examples
cp -rp webserver-ipv6-raven myHelloWorld
cd myHelloWorld
make clean
vi webserver6.c
(vi oder bevorzugten editor)AUTOSTART_PROCESSES(&hello_world_process,&webserver_nogui_process);
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(); }
#include "contiki.h" #include <stdio.h> /* For printf() */ #include "webserver-nogui.h" #include <avr/io.h> static struct etimer myetimer;
make
Bei Atmel anmelden und AVR Studio runterladen und installieren (http://www.atmel.com/microsite/avr_studio_5)
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.
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: |
(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.
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.
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; }; };
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
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]“.