以下は最高速度まで行かなかった時のコード
一応メモ
SPIライブラリを使って自作した方
/* * All A pins of AD5206 connected to +5V * All B pins of AD5206 connected to ground * An LED and a 220-ohm resisor in series connected from each W pin to ground * CS - to digital pin 10 (SS pin) * SDI - to digital pin 11 (MOSI pin) * CLK - to digital pin 13 (SCK pin) */ #include <SPI.h> // set pin 10 as the slave select for the digital pot: const int cspin = 10; void setup() { pinMode (cspin, OUTPUT); SPI.begin(); SPI.setBitOrder(MSBFIRST); //in accordance with datasheet for l6470. MSBFIRST } void loop() { rotate(0x51); delay(5000); stop(); delay(1000); rotate(0x50); delay(5000); stop(); delay(1000); } void rotate(int dir){ digitalWrite(cspin,LOW); SPI.transfer(dir); digitalWrite(cspin,HIGH); digitalWrite(cspin,LOW); SPI.transfer(0xFF); digitalWrite(cspin,HIGH); digitalWrite(cspin,LOW); SPI.transfer(0xFF); digitalWrite(cspin,HIGH); digitalWrite(cspin,LOW); SPI.transfer(0xFF); digitalWrite(cspin,HIGH); } void setMicroStep(){ digitalWrite(cspin,LOW); SPI.transfer(0x16); digitalWrite(cspin,HIGH); digitalWrite(cspin,LOW); SPI.transfer(0x); digitalWrite(cspin,HIGH); } void stop(){ digitalWrite(cspin,LOW); SPI.transfer(0xB0); digitalWrite(cspin,HIGH); }
拾ってきたコード
#include <SPI.h> int cs=10; //chip select void setup() { Serial.begin(9600); //setup serial communication for feedback SPI.begin(); //let the SPI library handle mosi, miso, and ck. SPI.setBitOrder(MSBFIRST); //in accordance with datasheet for l6470. MSBFIRST pinMode(cs,OUTPUT); //digitalWrite(cs, LOW); //pull cs low to send command //SPI.transfer(0xD8); //reset pos via byte command //digitalWrite(cs, HIGH); //pull it high because datasheet says aftter every byte to pull high //delay(1); //give the l6470 some time to think about what we just sent it. } void loop(){ //== get sttus byte command ==// //digitalWrite(cs, LOW); //SPI.transfer(0xD0); //get status command in hex //unsigned int n = 1; //set these are variables jus to make sure recieve signal is changing to something else //unsigned int m = 1; //n = SPI.transfer(0x00); //status Most sig byte. //m = SPI.transfer(0x00); //status Least sig byte. //digitalWrite(cs, HIGH); //Serial.println(n); // output status return to see //Serial.println(m); //set max_speed register digitalWrite(cs, LOW); unsigned int maxSpeed = SPI.transfer(0x07); //initial command byte unsigned int maxSpeed1 = SPI.transfer(0x00); //MAx speed is a 10 bit register. This needs to be shifter twice to fill correct? unsigned int maxSpeed2 = SPI.transfer(0x00); digitalWrite(cs, HIGH); //Toggle back up Serial.print("Speed: "); Serial.println(maxSpeed); Serial.println(maxSpeed1); Serial.println(maxSpeed2); digitalWrite(cs, LOW); unsigned int elpos = SPI.transfer(0x02); unsigned int elpos1 = SPI.transfer(0x02); digitalWrite(cs, HIGH); Serial.print("elpos: "); Serial.println(elpos); Serial.println(elpos1); //test command //digitalWrite(cs, LOW); //SPI.transfer(0xD8); //reset pos //digitalWrite(cs, HIGH); //digitalWrite(cs, LOW); //unsigned int speed = 0; //SPI.transfer(0x14); //reset pos //digitalWrite(cs, HIGH); //test command digitalWrite(cs, LOW); SPI.transfer(0x51); //Run command SPI.transfer(0x00); SPI.transfer(0x01); SPI.transfer(0x11); digitalWrite(cs, HIGH); delay(1000); // HardHiz //digitalWrite(cs, LOW); //SPI.transfer(0xA8); //HIZ STOP //digitalWrite(cs, HIGH); delay(1000); }