2017년 8월 22일 화요일

[6] 스캔 드라이버 회로 제어 소프트웨어 - (6.2) 라즈베리 파이로 MCP41100 동작시키기

(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);
}


https://lh6.googleusercontent.com/ySpEBpJpN8KRElUHsbL_wY_WC85e2z4JHfYAPIpXzOyve0XVC9N6TG1dSrXcjwNTgNYE-WEORMQYGOMg5yE7-hJBAeJVySRuY7qd9xqs_oIotKY1gy41aon0tLdDQx-9CKDfdoe5















CH1 - SCK
CH2 - SI

https://lh5.googleusercontent.com/0OFc9zWUStIsyqykXLXKaMSQJDzlRWzACYY41PQySGRvSjjYW_YkWW9-6TZ073yPkLDNOvmpC9OGh31roYhO0C4AJpgClTYP78VdyjCju-PYZwiEtObNU4P8-xOx05G4XmXogbXX















CH1 - SCK
CH2 - CS


참고
-Digital potentiometer MCP41100 and arduino



원하는 저항값이 나오는지 확인을 해보았다. 잘 나오는 것을 동영상에서 확인 할 수 있다.
디버깅하는 방법은 저항을 측정하는 것이 아니라 오실로스코프를 이용하여 전압을 측정하는 간접적인 방법을 사용하였다.
Screenshot from 2016-11-04 18:19:31.png
                                                       
111.png
2222.png


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);
}










댓글 없음:

댓글 쓰기

clear images were obtained