(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); 
} | 
 
 
댓글 없음:
댓글 쓰기