(6.2) 라즈베리 파이로 MCP41100 동작시키기
가변 저항의 값을 점점 증가시키는 코드
pot.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringPi.h>
#include <wiringPiSPI.h>
#define SPI_CHANNEL 0
#define SPI_SPEED 100000
#define CS 0
void digitalPotWrite(char data);
int i=0;
int main(void){
if(wiringPiSetup() == -1)
{
fprintf(stdout,"Unable to start wiringPi: %s\n", strerror(errno));
return 1;
}
if(wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1)
{
fprintf(stdout, "wiringPiSetup Failed: %s\n", strerror(errno));
return 1;
}
pinMode (CS, OUTPUT);
while(1){
for (i = 0x00; i <= 0xFF; i++)
{
digitalPotWrite(0xFF);
delay(1);
}
}
}
void digitalPotWrite(char data)
{
char address = 0x11;
digitalWrite(CS, LOW);
wiringPiSPIDataRW(SPI_CHANNEL, &address, 1);
wiringPiSPIDataRW(SPI_CHANNEL, &data, 1);
digitalWrite(CS, HIGH);
}
|
CH1 - SCK
CH2 - SI
CH1 - SCK
CH2 - CS
참고
-Digital potentiometer MCP41100 and arduino
원하는 저항값이 나오는지 확인을 해보았다. 잘 나오는 것을 동영상에서 확인 할 수 있다.
디버깅하는 방법은 저항을 측정하는 것이 아니라 오실로스코프를 이용하여 전압을 측정하는 간접적인 방법을 사용하였다.
Mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
//PA-PW
//i reverse
unsigned char i = 255;
//display i 0¬255
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
wiringPiSetup();
wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED);
pinMode(CS, OUTPUT);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_plus_clicked()
{
if(i>0 && i<=6)
i-=1;
else if(i>6 && i<250)
i=5;
else if(i>=250 && i<=255)
i-=1;
digitalPotWrite(i);
ui->value->setText(QString::number(255-i));
}
void MainWindow::on_mius_clicked()
{
if(i>=0 && i<=6)
i+=1;
else if(i>6 && i<250)
i=250;
else if(i>=250 && i<255)
i+=1;
digitalPotWrite(i);
ui->value->setText(QString::number(255-i));
}
void digitalPotWrite(unsigned char data)
{
unsigned char address = 0x11;
digitalWrite(CS, LOW);
wiringPiSPIDataRW(SPI_CHANNEL, &address, 1);
wiringPiSPIDataRW(SPI_CHANNEL, &data, 1);
digitalWrite(CS, HIGH);
}
|
댓글 없음:
댓글 쓰기