CodeVisionAVR

Z MediaWiki SPŠ a VOŠ Písek
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
 
(Není zobrazeno 16 mezilehlých verzí od 2 uživatelů.)
Řádka 1: Řádka 1:
===www===
+
== HW ==  
 +
 
 +
[[Soubor:AVR-PRG-01.jpg|100px]] [[Vývojová deska ATMEL včetně AVR ATmega16 v2]]
 +
 
 +
[[Soubor:AVR-TestBoard.JPG|100px]] [[AVR Testboard]] ze [[SOČ|SOČ 2010 a 2011]]
 +
 
 +
== www ==
  
 
http://www.hpinfotech.ro/html/cvavr.htm  
 
http://www.hpinfotech.ro/html/cvavr.htm  
Řádka 9: Řádka 15:
 
[http://www.hpinfotech.ro/html/cvavr.htm download]
 
[http://www.hpinfotech.ro/html/cvavr.htm download]
  
<html>
+
==Úlohy pro začátky==
Version:0.9
+
 
StartHTML:0000000105
+
===Blikání LED===
EndHTML:0000006738
+
 
StartFragment:0000001499
+
[[Soubor:PORTB.PNG|Brána PB0 jako výstupní]]
EndFragment:0000006722
+
 
<?xml version="1.0" encoding="iso-8859-1"?>
+
<source lang"C">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
/*****************************************************
<html xmlns="http://www.w3.org/1999/xhtml">
+
Chip   : ATmega8
<head>
+
Project : Blikání s LED
<title>mikroIDE</title>
+
Author  : Zeman                         
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+
<meta name="generator" content="SynEdit HTML exporter" />
+
<style type="text/css">
+
<!--
+
body { color: #000000; background-color: #FFFFFF; }
+
body { font-family: Courier New; font-size: 14pt; }
+
.cpp1-activecomment { color: #0A246A; font-style: italic; text-decoration: underline; }
+
.cpp1-assembler { color: #FF0000; }
+
.cpp1-binary { color: #800000; }
+
.cpp1-comment { color: #008000; font-style: italic; }
+
.cpp1-float { color: #800000; }
+
.cpp1-hexadecimal { color: #008000; }
+
.cpp1-character { color: #808000; }
+
.cpp1-identifier { color: #000000; }
+
.cpp1-illegalchar { color: #FF0000; }
+
.cpp1-imagelink { color: #800080; font-style: italic; text-decoration: underline; }
+
.cpp1-number { color: #008000; }
+
.cpp1-octal { color: #0000FF; }
+
.cpp1-preprocessor { color: #8000FF; font-style: italic; }
+
.cpp1-reservedword { color: #000000; font-weight: bold; }
+
.cpp1-space { color: #D4D0C8; }
+
.cpp1-string { color: #0000FF; }
+
.cpp1-symbol { color: #000000; }
+
.cpp1-weblink { color: #0A246A; font-style: italic; text-decoration: underline; }
+
-->
+
</style>
+
</head>
+
<body>
+
<!--StartFragment--><pre><code><span class="cpp1-comment">/*Chip&nbsp;type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;ATmega32
+
Program&nbsp;type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Application
+
AVR&nbsp;Core&nbsp;Clock&nbsp;frequency:&nbsp;16,000000&nbsp;MHz
+
 
*****************************************************/
 
*****************************************************/
//#define&nbsp;F_CPU&nbsp;1600000UL
 
  
//#include&nbsp;&lt;mega32.h&gt;
+
#include <mega8.h
//#include&nbsp;&lt;delay.h&gt;
+
  
//&nbsp;Declare&nbsp;your&nbsp;global&nbsp;variables&nbsp;here
+
// Knihovnu delay musíme sami nadefinovat tímto příkazem
 +
#include <delay.h>
  
</span><span class="cpp1-preprocessor">#define&nbsp;LED1&nbsp;0b10000000&nbsp;&nbsp;&nbsp;</span><span class="cpp1-comment">//definování
+
// Začátek hlavního programu
</span><span class="cpp1-preprocessor">#define&nbsp;LED2&nbsp;0b00000001
+
void main(void)
#define&nbsp;CEKAT&nbsp;500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-comment">//hodnota&nbsp;500&nbsp;ms
+
{
 +
 
 +
// Nadefinování portu PB0 jako výstupní
 +
PORTB=0x00;
 +
DDRB=0x01;
 +
 
 +
// Nekonečná smyčka while stále opakuje níže napsaný program
 +
while (1)
 +
      {
 +
 
 +
// Na port PB0 se vyšle log. 1 (lze také zapsat v HEX --> 0x01)
 +
PORTB = 0b00000001;
 +
// Vyčká půl sekundy
 +
delay_ms(500);
 +
// Na port PB0 se vyšle log. 0 (lze také zapsat v HEX --> 0x00)
 +
PORTB = 0b00000000;
 +
// Vyčká půl sekundy
 +
delay_ms(500);
 +
 
 +
      };
 +
}
 +
</source>
 +
 
 +
 
 +
=== Ovládání sedmisegmentovky ===
 +
 
 +
<source lang"C">
 +
/*****************************************************
 +
Chip    : ATmega32
 +
Project : Ovládání segmisegmentovky
 +
Author  : JA podle CSI                         
 +
*****************************************************/
 +
 
 +
#include <mega32.h>
 +
#include <delay.h>
  
</span><span class="cpp1-reservedword">void</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-identifier">main(</span><span class="cpp1-reservedword">void</span><span class="cpp1-symbol">)
+
// Začátek hlavního programu
 +
void main(void)
 
{
 
{
</span><span class="cpp1-comment">//&nbsp;Declare&nbsp;your&nbsp;local&nbsp;variables&nbsp;here
 
  
</span><span class="cpp1-reservedword">unsigned</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-reservedword">int</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-identifier">i;
+
// Nadefinování portu PB0 jako výstupní
</span><span class="cpp1-comment">//&nbsp;Port&nbsp;A&nbsp;initialization
+
PORTB=0x00;
</span><span class="cpp1-identifier">PORTA=</span><span class="cpp1-binary">0b11111111</span><span class="cpp1-symbol">;</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-comment">//na&nbsp;budoucích&nbsp;výstupech&nbsp;&quot;1&quot;
+
DDRB=0x01;
</span><span class="cpp1-identifier">DDRA=</span><span class="cpp1-binary">0b11111111</span><span class="cpp1-symbol">;</span><span class="cpp1-space">&nbsp;&nbsp;</span><span class="cpp1-comment">//&nbsp;PortA&nbsp;jako&nbsp;výstupní
+
  
</span><span class="cpp1-reservedword">while</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-symbol">(</span><span class="cpp1-number">1</span><span class="cpp1-symbol">);</span><span class="cpp1-space">        </span><span class="cpp1-comment">//&nbsp;Nekone&#269;ná&nbsp;smy&#269;ka
+
// Nekonečná smyčka while stále opakuje níže napsaný program
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-symbol">{
+
while (1)
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-comment">//&nbsp;Place&nbsp;your&nbsp;code&nbsp;here
+
      {
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-reservedword">for</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-symbol">(i=</span><span class="cpp1-number">0</span><span class="cpp1-symbol">;i&lt;</span><span class="cpp1-number">7</span><span class="cpp1-symbol">;i++);
+
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-symbol">{
+
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-identifier">PORTA</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-symbol">=</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-identifier">PORTA&lt;&lt;</span><span class="cpp1-number">1</span><span class="cpp1-symbol">;
+
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-symbol">}
+
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-identifier">delay_ms(CEKAT);</span><span class="cpp1-space">&nbsp;&nbsp;</span><span class="cpp1-comment">//zpo&#382;d&#283;ní
+
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-identifier">PORTA=LED1;
+
  
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-reservedword">for</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-symbol">(i=</span><span class="cpp1-number">0</span><span class="cpp1-symbol">;i&lt;</span><span class="cpp1-number">7</span><span class="cpp1-symbol">;i++);
+
// Na port PB0 se vyšle log. 1 (lze také zapsat v HEX --> 0x01)
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-symbol">{
+
PORTB = 0b00000001;
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-identifier">PORTA</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-symbol">=</span><span class="cpp1-space">&nbsp;</span><span class="cpp1-identifier">PORTA&gt;&gt;</span><span class="cpp1-number">1</span><span class="cpp1-symbol">;
+
// Vyčká půl sekundy
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-symbol">}
+
delay_ms(500);
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-identifier">delay_ms(CEKAT);
+
// Na port PB0 se vyšle log. 0 (lze také zapsat v HEX --> 0x00)
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-identifier">PORTA=LED2;</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-comment">//p&#345;i&#345;azení&nbsp;portuA
+
PORTB = 0b00000000;
</span><span class="cpp1-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cpp1-symbol">}
+
// Vyčká půl sekundy
 +
delay_ms(500);
 +
 
 +
      };
 
}
 
}
 +
</source>
 +
 +
 +
 +
===Ovládání LCD===
 +
 +
[[Soubor:LCD.PNG|thumb|nastavení podpory LCD]]
 +
 +
<source lang="C">
 +
/*****************************************************
 +
Project : Vypisování textu na LCD
 +
Author  : Matěj                         
 +
*****************************************************/
 +
 +
#include <mega8.h>
 +
// knihovnu delay musíme nadefinovat sami, tak, že napíšeme tento kód 
 +
#include <delay.h>
 +
 +
// Tímto příkazem se automaticky nadefinuje LCD pro použití v programu
 +
#asm
 +
  .equ __lcd_port=0x18 ;PORTB
 +
#endasm
 +
#include <lcd.h>
 +
 +
// Začátek hlavního programu
 +
void main(void)
 +
{
 +
 +
// Inicializace LCD displaye
 +
lcd_init(16);
 +
 +
      {           
 +
// Tímto příkazem nastavíme počáteční polohu textu na displayi (x= 0-16, y= 0-1)
 +
lcd_gotoxy (0,0);
 +
// Tímto příkazem vyšleme na LCD text
 +
lcd_putsf ("Ahoj");
 +
// delay nám určuje, po jaké době bude smazán text na displayi
 +
delay_ms(1000);
 +
// tímto příkazem smažeme všechen text z LCD
 +
lcd_clear();
 +
 +
      };
 +
}
 +
</source>
 +
 +
 +
===Ovládání motoru===
 +
 +
 +
<source lang="C">
 +
 +
#include <mega16.h>
 +
#include <stdio.h> 
 +
#include <stdlib.h>
 +
#define F_CPU 18423000
 +
#include <delay.h>
 +
 +
#define ADC_VREF_TYPE 0x60
 +
int hrana;
 +
bit por0;
 +
 +
//Deklarace globálních proměnných
 +
unsigned int read_adc(unsigned char kanal)  {
 +
ADMUX=kanal; 
 +
    ADCSRA|=0x40; 
 +
    while ((ADCSRA & 0x10)==0); 
 +
    ADCSRA|= 0x10; 
 +
return ADCW;
 +
}
 +
 +
 +
void main(void)
 +
{
 +
 +
// Port A initialization
 +
PORTA=0x00;
 +
DDRA=0x00;
 +
 +
// Port C initialization
 +
PORTC=0x00;
 +
DDRC=0b00000011;
 +
 +
delay_ms(200);
 +
PORTC=0b00000001;
 +
delay_ms(200);
 +
PORTC=0b00000010;
 +
delay_ms(2000);
  
</span></code></pre><!--EndFragment--></body>
+
hrana=(read_adc(0)+read_adc(1))/2;
</html>
+
PORTC=0b00000000;
</html>
+
      while(1){
 +
      if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){
 +
      PORTD=0b00100111;
 +
      };
 +
      if ((read_adc(0)>hrana)*(read_adc(1)<hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){
 +
      PORTD=0b01101011;
 +
      };
 +
      if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)<hrana)*(read_adc(3)>hrana)){
 +
      PORTD=0b01101011;
 +
      };
 +
      if ((read_adc(0)<hrana)*(read_adc(1)>hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){
 +
      PORTD=0b01011011;
 +
      }
 +
      if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){ PORTD=0b00100111;};
 +
        if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){
 +
      PORTD=0b00100111;
 +
      };
 +
        if ((read_adc(0)>hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)> hrana)){
 +
        if (por0){
 +
            PORTD=0b01011011;
 +
            delay_ms(100);
 +
            PORTD=0b01101011;
 +
            delay_ms(2000);
 +
            por0=0;}else{     
 +
          PORTD=0b00100111;
 +
            delay_ms(200);
 +
            por0=1;
 +
            };
 +
          };
 +
        if ((read_adc(0)<hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){
 +
      PORTD=0b01100011;
 +
      };
 +
      if ((read_adc(0)>hrana)*(read_adc(1)>hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){
 +
      PORTD=0b01010001;
 +
      };
 +
      if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)>hrana)*(read_adc(3)>hrana)){
 +
      PORTD=0b00100110;
 +
      };
 +
      if ((read_adc(0)<hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)>hrana)){
 +
      PORTD=0b00100110;
 +
      };
 +
      if ((read_adc(0)>hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){
 +
      PORTD=0b00100101;
 +
      };     
 +
}
 +
}
 +
</source>

Aktuální verze z 25. 11. 2012, 19:50

Obsah

HW

AVR-PRG-01.jpg Vývojová deska ATMEL včetně AVR ATmega16 v2

AVR-TestBoard.JPG AVR Testboard ze SOČ 2010 a 2011

www

http://www.hpinfotech.ro/html/cvavr.htm

Manuál

Getting Started with the CodeVisionAVR C Compiler

download

Úlohy pro začátky

Blikání LED

Brána PB0 jako výstupní

/*****************************************************
Chip    : ATmega8
Project : Blikání s LED
Author  : Zeman                           
*****************************************************/
 
#include <mega8.h>  
 
// Knihovnu delay musíme sami nadefinovat tímto příkazem
#include <delay.h>
 
// Začátek hlavního programu
void main(void)
{
 
// Nadefinování portu PB0 jako výstupní
PORTB=0x00;
DDRB=0x01;
 
// Nekonečná smyčka while stále opakuje níže napsaný program 
while (1)
      {
 
// Na port PB0 se vyšle log. 1 (lze také zapsat v HEX --> 0x01)
PORTB = 0b00000001;
// Vyčká půl sekundy
delay_ms(500);
// Na port PB0 se vyšle log. 0 (lze také zapsat v HEX --> 0x00)
PORTB = 0b00000000;
// Vyčká půl sekundy
delay_ms(500);
 
      };
}


Ovládání sedmisegmentovky

/*****************************************************
Chip    : ATmega32
Project : Ovládání segmisegmentovky
Author  : JA podle CSI                           
*****************************************************/
 
#include <mega32.h>
#include <delay.h>
 
// Začátek hlavního programu
void main(void)
{
 
// Nadefinování portu PB0 jako výstupní
PORTB=0x00;
DDRB=0x01;
 
// Nekonečná smyčka while stále opakuje níže napsaný program 
while (1)
      {
 
// Na port PB0 se vyšle log. 1 (lze také zapsat v HEX --> 0x01)
PORTB = 0b00000001;
// Vyčká půl sekundy
delay_ms(500);
// Na port PB0 se vyšle log. 0 (lze také zapsat v HEX --> 0x00)
PORTB = 0b00000000;
// Vyčká půl sekundy
delay_ms(500);
 
      };
}


Ovládání LCD

nastavení podpory LCD
 
/*****************************************************
Project : Vypisování textu na LCD 
Author  : Matěj                           
*****************************************************/
 
#include <mega8.h>
// knihovnu delay musíme nadefinovat sami, tak, že napíšeme tento kód  
#include <delay.h>
 
// Tímto příkazem se automaticky nadefinuje LCD pro použití v programu
#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
 
// Začátek hlavního programu
void main(void)
{
 
// Inicializace LCD displaye
lcd_init(16);
 
      {            
// Tímto příkazem nastavíme počáteční polohu textu na displayi (x= 0-16, y= 0-1)
lcd_gotoxy (0,0);
// Tímto příkazem vyšleme na LCD text
lcd_putsf ("Ahoj"); 
// delay nám určuje, po jaké době bude smazán text na displayi
delay_ms(1000);
// tímto příkazem smažeme všechen text z LCD
lcd_clear();
 
      };
}


Ovládání motoru

 
 
 #include <mega16.h>
 #include <stdio.h>  
 #include <stdlib.h>
 #define F_CPU 18423000
 #include <delay.h>
 
 #define ADC_VREF_TYPE 0x60
 int hrana;
 bit por0;
 
 //Deklarace globálních proměnných
 unsigned int read_adc(unsigned char kanal)  {
 ADMUX=kanal;  
    ADCSRA|=0x40;  
    while ((ADCSRA & 0x10)==0);  
    ADCSRA|= 0x10;  
 return ADCW;
 } 
 
 
 void main(void)
 {
 
 // Port A initialization
 PORTA=0x00;
 DDRA=0x00;
 
 // Port C initialization
 PORTC=0x00;
 DDRC=0b00000011;
 
 delay_ms(200);
 PORTC=0b00000001;
 delay_ms(200);
 PORTC=0b00000010;
 delay_ms(2000);
 
 hrana=(read_adc(0)+read_adc(1))/2;
 PORTC=0b00000000;
       while(1){
       if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){
       PORTD=0b00100111;
       };
       if ((read_adc(0)>hrana)*(read_adc(1)<hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){
       PORTD=0b01101011;
       };
       if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)<hrana)*(read_adc(3)>hrana)){
       PORTD=0b01101011;
       }; 
       if ((read_adc(0)<hrana)*(read_adc(1)>hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){
       PORTD=0b01011011;
       }
       if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){ PORTD=0b00100111;};
        if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){
       PORTD=0b00100111;
       };
        if ((read_adc(0)>hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)> hrana)){
         if (por0){
            PORTD=0b01011011;
            delay_ms(100);
            PORTD=0b01101011;
            delay_ms(2000);
            por0=0;}else{       
           PORTD=0b00100111;
            delay_ms(200);
             por0=1;
             };
           };
        if ((read_adc(0)<hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){
       PORTD=0b01100011;
       };
       if ((read_adc(0)>hrana)*(read_adc(1)>hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){
       PORTD=0b01010001;
       };
       if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)>hrana)*(read_adc(3)>hrana)){
       PORTD=0b00100110;
       };
       if ((read_adc(0)<hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)>hrana)){
       PORTD=0b00100110;
       };
       if ((read_adc(0)>hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){
       PORTD=0b00100101;
       };       
 }
 }
Osobní nástroje
Jmenné prostory
Varianty
Akce
Rychlá navigace
NEJ aktivity
Nejlepší předměty
Nejlepší MCU
SW-HW
Ostatní
Utility
Nástroje
Tisk/export