PWM modulen om pcDuino (3 / 4 steg)
Steg 3: Provningsmetod
#include < SPI.h >#include < string.h >
#include < stdio.h >
#define STATUS_PIN 9
#define CS_PIN 10
#define MOSI_PIN 11
#define MISO_PIN 12
#define SCK_PIN 13
#define CMD_SET_ON_OFF 0x01
#define CMD_SET_POLARITY 0x02
#define CMD_SET_FREQ 0x03
#define CMD_SET_DUTY 0x04
#define USE_HARDWARE_SPI 1
#define SPI_MODE SPI_MODE0
#define MIN_DUTY 250
#define MAX_DUTY 1250
osignerad kort plikt [27].
unsigned char gIndex;
unsigned char-gruppen;
#if(! USE_HARDWARE_SPI)
unsigned char SoftSpiTransfer (unsigned char data)
{
unsigned char cnt;
unsigned char rst;
rst = 0;
för (cnt = 0; cnt < 8; cnt ++)
{
första << = 1;
om (data & 0x80)digitalWrite(MOSI_PIN,HIGH);
annat digitalWrite(MOSI_PIN,LOW);
digitalWrite(SCK_PIN,HIGH);
digitalWrite(SCK_PIN,LOW);
rst | = digitalRead(MISO_PIN);
data << = 1;
}
returnera rst;
}
#define SpiExchangeByte(x) SoftSpiTransfer(x)
#elif definieras PCDUINO_IDE
#define SpiExchangeByte(x) SPI.transfer(x,SPI_CONTINUE)
#else
#define SpiExchangeByte(x) SPI.transfer(x)
#endif
void DeviceSynchronize(void)
{
SpiExchangeByte(0);
SpiExchangeByte(0);
SpiExchangeByte(0);
SpiExchangeByte(0);
SpiExchangeByte(0);
SpiExchangeByte(0);
SpiExchangeByte(0);
SpiExchangeByte(0);
}
void SendCmd (unsigned char cmd, unsigned char index, osignerade kort värde)
{
unsigned char kontrollsumma;
unsigned char valueL;
unsigned char valueH;
valueL = värde & 0xff;
valueH = ((värde >> 8) & 0xff);
Kontrollsumma = 0x87;
SpiExchangeByte(0x87);
SpiExchangeByte(cmd);
Kontrollsumma += cmd;
SpiExchangeByte (index); //index
Kontrollsumma += index.
SpiExchangeByte(valueL);
Kontrollsumma += valueL;
SpiExchangeByte(valueH);
Kontrollsumma += valueH;
SpiExchangeByte (kontrollsumman); //CheckSum
}
void SetPwmOnOff (unsigned char index, boolean på)
{
SendCmd(CMD_SET_ON_OFF,index,on);
}
void SetPwmDuty (unsigned char index, osignerade kort duty)
{
SendCmd(CMD_SET_DUTY,index,duty);
}
void SetPwmFrequency (unsigned char index, osignerade kort frekvens)
{
SendCmd(CMD_SET_FREQ,index,frequency);
}
void setup() {
sätta din installation kod här, om du vill köra en gång:
#if(USE_HARDWARE_SPI)
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE);
SPI.setClockDivider(SPI_CLOCK_DIV2);
#endif
grupp = 0;
gIndex = 0;
tullen [0] = 970;
tullen [1] = 860;
Duty [2] = 480;
tullen [3] = 470;
Duty [4] = 690;
Duty [5] = 730;
Duty [6] = MIN_DUTY;
tullen [7] = MIN_DUTY;
tullen [8] = MIN_DUTY;
tullen [9] = MIN_DUTY;
tullen [10] = MIN_DUTY;
tullen [11] = MIN_DUTY;
tullen [12] = MIN_DUTY;
tullen [13] = MIN_DUTY;
tullen [14] = MIN_DUTY;
tullen [15] = MIN_DUTY;
tullen [16] = MIN_DUTY;
tullen [17] = MIN_DUTY;
tullen [18] = MIN_DUTY;
tullen [19] = MIN_DUTY;
tullen [20] = MIN_DUTY;
tullen [21] = MIN_DUTY;
tullen [22] = MIN_DUTY;
tullen [23] = MIN_DUTY;
tullen [24] = MIN_DUTY;
tullen [25] = MIN_DUTY;
tullen [26] = MIN_DUTY;
DeviceSynchronize();
SetPwmDuty(0,970);
SetPwmDuty(1,860);
SetPwmDuty(2,480);
SetPwmDuty(3,470);
SetPwmDuty(4,690);
SetPwmDuty(5,730);
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
char tmpChar;
scanf ("%c" & tmpChar);
om ((tmpChar < "8") & & (tmpChar > = "0"))
{
gIndex = tmpChar - '0';
SetPwmOnOff(gIndex+group,1);
}
annat if (tmpChar == "z")
{
grupp = 0;
}
annat if (tmpChar == "x")
{
Grupp = 8.
}
annat if (tmpChar == "c")
{
grupp = 16.
}
annat if (tmpChar == "v")
{
Grupp = 24.
}
annat if (tmpChar == "w")
{
om (duty [4] < MAX_DUTY) tull [4] + = 10.
SetPwmDuty(4,duty[4]);
}
annat if (tmpChar == 's ")
{
om (duty [4] > MIN_DUTY) tull [4]-= 10.
SetPwmDuty(4,duty[4]);
}
annat if (tmpChar == "a")
{
om (duty [5] < MAX_DUTY) tull [5] += 10.
SetPwmDuty(5,duty[5]);
}
annat if (tmpChar == hade ")
{
om (duty [5] > MIN_DUTY) tull [5]-= 10.
SetPwmDuty(5,duty[5]);
}
annat if (tmpChar == "i")
{
om (tull [3] < MAX_DUTY) tull [3] + = 10.
SetPwmDuty(3,duty[3]);
}
annat if (tmpChar == "k")
{
om (tull [3] > MIN_DUTY) tull [3]-= 10.
SetPwmDuty(3,duty[3]);
}
annat if (tmpChar == ' o ')
{
om (duty [2] < MAX_DUTY) uppgift [2] + = 10.
SetPwmDuty(2,duty[2]);
}
annat if (tmpChar == "l")
{
om (duty [2] > MIN_DUTY) uppgift [2]-= 10.
SetPwmDuty(2,duty[2]);
}
annat if (tmpChar == "f")
{
om (tull [1] < MAX_DUTY) uppgift [1] += 10.
SetPwmDuty(1,duty[1]);
}
annat if (tmpChar == "h")
{
om (tull [1] > MIN_DUTY) uppgift [1]-= 10.
SetPwmDuty(1,duty[1]);
}
annat if (tmpChar == 't')
{
om (tull [0] < MAX_DUTY) tull [0] + = 10.
SetPwmDuty(0,duty[0]);
}
annat if (tmpChar == "g")
{
om (tull [0] > MIN_DUTY) tull [0]-= 10.
SetPwmDuty(0,duty[0]);
}
om (tmpChar > = ' 0')printf("D0:%d-D1:%d-D2:%d-D3:%d-D4:%d-D5:%d-\n",duty[0],duty[1],duty[2],duty[3],duty[4],duty[5]);
}