CreateWindow!

Amebaでブログを始めよう!
1 | 2 | 3 | 4 | 5 | 最初次のページへ >>

DE0 SoCめも fat32フォルダの中身

ubuntu@ubuntu-Macmini:/media/ubuntu/C1B1-DD44$ ls -laR
.:
total 3928
drwx------  3 ubuntu ubuntu    4096  1月  1  1970 .
drwxr-x---+ 4 root   root      4096 11月  4 22:46 ..
drwx------  3 ubuntu ubuntu    4096 10月  7 17:53 ATLAS_SOC_GHRD
-rw-r--r--  1 ubuntu ubuntu     831 10月  7 17:53 boot.script
-rw-r--r--  1 ubuntu ubuntu     903 10月  7 17:53 u-boot.scr
-rw-r--r--  1 ubuntu ubuntu 3975760 10月  7 17:53 zImage
-rw-r--r--  1 ubuntu ubuntu   22711 10月  7 17:53 zImage-socfpga_cyclone5_de0_sockit.dtb

./ATLAS_SOC_GHRD:
total 576
drwx------ 3 ubuntu ubuntu   4096 10月  7 17:53 .
drwx------ 3 ubuntu ubuntu   4096  1月  1  1970 ..
drwx------ 2 ubuntu ubuntu   4096 10月  7 17:53 output_files
-rw-r--r-- 1 ubuntu ubuntu 262144 10月  7 17:53 preloader-mkpimage.bin
-rw-r--r-- 1 ubuntu ubuntu  23395 10月  7 17:53 soc_system.dtb
-rw-r--r-- 1 ubuntu ubuntu  46484 10月  7 17:53 soc_system.dts
-rw-r--r-- 1 ubuntu ubuntu 239780 10月  7 17:53 u-boot.img

./ATLAS_SOC_GHRD/output_files:
total 6756
drwx------ 2 ubuntu ubuntu    4096 10月  7 17:53 .
drwx------ 3 ubuntu ubuntu    4096 10月  7 17:53 ..
-rw-r--r-- 1 ubuntu ubuntu 2109256 10月  7 17:53 ATLAS_SOC_GHRD.rbf
-rw-r--r-- 1 ubuntu ubuntu 4799836 10月  7 17:53 ATLAS_SOC_GHRD.sof

焼いたファイル
atlas_sdcard_v1.1.img.tgz

qwtを使ってみる

Qtのグラフを書くライブラリQwtをつかって見た。
aitendo液晶でも結構きれいにグラフが書ける。



ここを参考にした。
http://wildpie.hatenablog.com/entry/20110129/1296292970

インストールの仕方は本家にあるように
svn checkout svn://svn.code.sf.net/p/qwt/code/branches/qwt-6.1
svnがなければsubversionを先にインストールする必要がある。
sudo apt-get install subversion
その後はqtのコンパイルと一緒
qmake
make
sudo make install

これで /usr/local/qwt-6.1.3-svn/ にインストールされる。
ライブラリは /usr/local/qwt-6.1.3-svn/lib にあるんだけど
勝手に見に行ってくれないので指定する必要がある。
sudo nano 
/etc/ld.so.conf
の最後に
/usr/local/qwt-6.1.3-svn/lib
を追加する。
有効にするには
sudo ldconfig
を実行する。

QtCreatorにはライブラリが勝手には入らないようだ。
qwtというプロジェクトを作ったら
qwt.proの最後に以下を追加する

LIBS += -L/usr/local/qwt-6.1.3-svn/lib -lqwt
INCLUDEPATH += /usr/local/qwt-6.1.3-svn/include

desingerでwidgetを追加する。これを自作クラスに格上げする(promote)
先に自作クラスを作っておいた方がいい。

plot.h

#ifndef PLOT_H
#define PLOT_H

#include <qwt_plot.h>

class QwtPlotCurve;

class Plot : public QwtPlot
{
    Q_OBJECT
public:
    explicit Plot(QWidget *parent = 0);
    void plotCurve();

private:
    QwtPlotCurve *sin_crv;

signals:
    
public slots:
    
};

#endif // PLOT_H

plot.c

#include "plot.h"
#include <qwt_plot_curve.h>
#include <qwt_legend.h>
#include <qwt_plot_grid.h>

Plot::Plot(QWidget *parent) :QwtPlot(parent)
{
    setCanvasBackground(QColor(Qt::white)); // 背景白
    insertLegend(new QwtLegend(), QwtPlot::BottomLegend);   // 凡例

    // グリッド
    QwtPlotGrid *grid1 = new QwtPlotGrid;
    grid1->enableXMin(true);
    grid1->setMajorPen(QPen(Qt::black, 0, Qt::DashDotLine));
    grid1->setMinorPen(QPen(Qt::gray, 0, Qt::DotLine));
    grid1->attach(this);

    // 曲線の設定
    sin_crv = new QwtPlotCurve("sin");
    sin_crv->setPen(QPen(Qt::red));
    sin_crv->attach(this);

    // 曲線の描画
    plotCurve();
}

void Plot::plotCurve()
{
    const int kArraySize = 1000;

    double x[kArraySize] = {}; // x
    double y_sin[kArraySize] = {}; // y

    for (int i = 0; i < kArraySize; ++i) {
        x[i] = i / (kArraySize - 1.0);
        y_sin[i] = sin(2.0*M_PI*(x[i]));
    }

    sin_crv->setSamples(x, y_sin, kArraySize);
}

ここではPlotクラスを作っている。
promoteの仕方はQtCreatorの右上で



Promoted class nameとHeader fileに入力してAddすると
上の選択肢にPlotが増える。

Plotクラスを選択してPromoteボタンを押す。
これでグラフが表示されるようになる。

sysfsのスピード

/sys/class/gpioの下はsudoをしなくていいから手軽なんだけど、遅そう。
色んな所で/dev/memを使ったライブラリが公開されている。
こじ研のraspGPIOとか。
http://www.myu.ac.jp/~xkozima/lab/raspTutorial3.html
/dev/memを使うとsudoは必須になるようだ。
sudoはいいんだけど、sudoでqtのアプリを起動するとx windowが表示されない。
xを起動してるのが一般ユーザでsudoのアプリがsuだからだろう。
かと言ってxごとsudoで起動すると危なそうなので、
sudoを必要としない方法を探してる。

やっぱり/sys/class/gpioが確実なんだろう。
どのくらいの速度が出るかやってみた。
GPIOのベンチマークはこのサイトでやられている。
http://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/
/dev/memは22MHz
/sys/class/gpioシェルスクリプトは2.8KHzだそうだ。

なるべく早く動くようにつくりたい。
openは一回だけでいいみたい。1をwriteするとすぐにONになるようだ。
なのでこんなコードでON/OFFできる。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
int main(void)
{
    int fd,i;
    fd = open("/sys/class/gpio/gpio21/value", O_WRONLY);
    if(fd < 0)
    {
        perror("file open error\n");
        return fd;
    }
    
    for(i=0;i<10000;i++)
    {
        write(fd, "1" , 1 );
        write(fd, "0" , 1 );
    }
    close(fd);
    return 0;
}

ブレッドボードで測定する


最初は長いみたいだけど、そのあとは125kHzぐらい見たい。
結構遅いもんだな。

Lチカ

aitendo液晶はRaspberryPi1にも付けれるのでRaspberryPi2につけると
何本か端子が余る。GPIOとして使ってみる。

Raspiのピンヘッダに
ピンヘッダ用接続ケーブル
をつけてブレッドボードにつなげる。
ソケット側がちょっと長くてちょっと浮くけど気にしない。

GPIO - LED - 抵抗1K - GND
と簡単な回路をブレッドボードで作る。

色んな所に書かれてる方法を試してみる。
echo 21 > /sys/class/gpio/export
これで/sys/class/gpio/gpio21フォルダができる
echo out > /sys/class/gpio/gpio21/direction
これで出力設定になった
echo 1 > /sys/class/gpio/gpio21/value
これでLEDが点灯した。
色んな所に書かれている情報ではsudoが必要とあるんだけど、
いまのOSのバージョンだとsudoは不要みたい。

これをqtで制御してみる。
directionまでは最初に設定すればいいみたい。
アプリからはvalueの部分だけやればいい。

qtでQPushButtonを4つ追加して配置する。
objectNameはsw1,sw2,sw3,sw4とした。
checkableのチェックを入れた。


ON/OFFをもてるSWになる。
このSWではSLOTはGo to SLOTでtoggled(bool)を指定すると
ON/OFFが変わった時に呼ばれる関数ができる。
引数にON/OFFが入っているので
それによってさっきのコマンドを実行するようにプログラムを書く。

#include <stdlib.h>
#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}


MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_sw1_toggled(bool checked)
{
    if(checked)
        system("echo 1 > /sys/class/gpio/gpio12/value");
    else
        system("echo 0 > /sys/class/gpio/gpio12/value");
}


void MainWindow::on_sw2_toggled(bool checked)
{
    if(checked)
        system("echo 1 > /sys/class/gpio/gpio16/value");
    else
        system("echo 0 > /sys/class/gpio/gpio16/value");
}


void MainWindow::on_sw3_toggled(bool checked)
{
    if(checked)
        system("echo 1 > /sys/class/gpio/gpio20/value");
    else
        system("echo 0 > /sys/class/gpio/gpio20/value");
}


void MainWindow::on_sw4_toggled(bool checked)
{
    if(checked)
        system("echo 1 > /sys/class/gpio/gpio21/value");
    else
        system("echo 0 > /sys/class/gpio/gpio21/value");
}

これで液晶のボタンを押すとLEDがつくようになった。

Qtフルスクリーン

aitendo液晶に表示するならフルスクリーン表示したいところ。
Qtでフルスクリーンにするには
sourceにあるmain.cppの
w.show();

w.showFullScreen()
に変更するだけでいい。
液晶のxで起動すると液晶全面にアプリケーションが表示される。

液晶のタッチパネルのボタンを押すとちゃんとインクリメントされる。

1 | 2 | 3 | 4 | 5 | 最初次のページへ >>