投稿

2月, 2022の投稿を表示しています

FPGA:VGA Pmod

イメージ
  FPGAが何ものかを勉強するために手にしたArty A7-35T。多くの事ができるが、FPGAプログラミング大全を読み進めるには、画像出力がないのため、VGAのPmodを購入した。 Pmodは4つのジャンパーを備えているが、高速動作する中央の2か所に差し込む形で使う。 2章のソースコードを試す訳だが、本にはすべてのコードが載っている訳ではないので、 書籍のサポートページからサンプルをDLさせていただく。https://www.shuwasystem.co.jp/support/7980html/6326.html これまでの知識でなんとなく、記載している内容がわかるとところと、わからない部分があるがまずまず動作の確認を進める。 特に困る事もないので、詳細は割愛するが、patten_vgaを実行してみた。 PCのモニターにVGA出力されてくる。いままでマイコンで液晶とかOLEDに文字を表示したりというのばかりで、 こういうの経験がないので感動する。 さて読み進めて第2章の課題としてグラデーショ表示があるのでやってみる。 その前に、完全に理解できなくてもグラデーションする前のソースの理解を進める。 横に8分割、縦に4分割 (横HSIZE=80、縦VSIZE=120) この分割の色を決めている変数rgb_0、とrgb_1は wire [2:0] rgb_0 = (HCNT-HBLANK+10'd1)/HSIZE; HCNTは水平位置で、HBLANKは非表示区間の長さ160にあたる。 HBLANKを引いた値をHSIZEで割り算したが位置によって0から7までの3ビットでrgb_0になる 今度は垂直方向 wire [2:0] rgb_1 = (((VCNT-VBLANK)/VSIZE)&1)==0 ? 3'd7-rgb_0: rgb_0; (VCNT-VBLANK)/VSIZE)は、垂直方向の位置VCNTから非表示区間分VBLANKを引いてVSIZE(120)で割った数になる。&1で論理和をとると、上から000と001と交互に入る事になる。 ==0なのでゼロと等しい時は、7からrgb_0を引いた数が、rgb_1に入り、等しくない時はrgb_0がそのまま入る事になる。 最終的なrgb_1の3ビットは位置より以下になる。 これを24ビットのVGA_R,

RTOS: OLED I2C TI-RTOS SSD1306 library

イメージ
  TI-RTOS SSD1306 library In the previous article , we described all the necessary functions in one file, but now we have combined them into a library. tirtos_ssd1306.zip This library, originally created by Mr. Dmytro Hutsulenko , has been modified to work with TI-RTOS by myself. Usage:  Place the downloaded file in the same hierarchy as the C file. /*SSD1306*/ #include "ssd1306_lib.h" header should be read at the beginning. If you want to update the display periodically in a thread, by opening I2C in the usual way and using the following example, we can display text on the OLED. void *mainThread5(void *arg0) {     I2C_init();     I2C_Params iP;     I2C_Handle i2c;     I2C_Params_init(&iP);     iP.bitRate = I2C_400kHz;     iP.transferMode = I2C_MODE_BLOCKING;     i2c = I2C_open(CONFIG_I2C_0, &iP);         // Initialize SSD1306         ssd1306Init(i2c);         fillDisplay (i2c,0x00);         char OLED_buffer[32];         while (1) {             draw6x8Str(i2c,0, 0, &q

RTOS: OLED SSD1306 I2C in English

イメージ
        int_fast16_t res; //for checking adc converting (if you want to use library, visits here... ) Trying to get the OLED SSD1306 to work with TI-RTOS. With DriverLib, I was able to use it by simply downloading a library that a volunteer had made, but I couldn't find it unless I made a library for TI-RTOS. However, I had to create a library for the TI-RTOS to use it. Creating one from scratch is a lot of work, so I used the libraries of my predecessors. Download the necessary files from https://github.com/boykod/SSD1306-I2C-library-for-MSP430-432 now we need 2 files at least. font6x8.h address.h Both should be placed in the same hierarchy as the thread's c-file. Open the Syscfg file and add I2C, give it a name and select which pin you want to use as I2C. I2C2 is selected here. PN4 is SDA and PN5 is SCL. It's a bit long, but I'll copy and place mainThread5 and the necessary functions below. (I'll make it into a library later, but the purpose is to see how it works