GPSDO 10.0MHz 基準周波数発振器を作る(2)
先ずは製作したGPSDOの動作ログからご紹介します。 ・GPSモジュール u-blox Neo M8N (AliExpress) ・DAC PCM5102A (AliExpress) ・OCXO Morion MV89A… 続きを読む »
先ずは製作したGPSDOの動作ログからご紹介します。 ・GPSモジュール u-blox Neo M8N (AliExpress) ・DAC PCM5102A (AliExpress) ・OCXO Morion MV89A… 続きを読む »
AliExpressで購入したGPSモジュール、液晶キャラクタディスプレイモジュール、そしてSTM32を使ってGPSDOと呼ばれる基準周波数を自作してみました。 GPSDOとは、 GPS Disciplined Osci… 続きを読む »
u-blox M8を使ったGPSモジュールを入手しました。今回はこのGPSから測位情報、時刻情報を取得しLCDのSC2004とMAX7219を使った7セグLEDに情報を表示するようにしてみます。今回もArduino用では… 続きを読む »
久しぶりに東京に出張しました。とりあえず、秋葉原の秋月電子には行こうと思っていたので、新幹線の中で何か面白いものはないかと探していたら、ANALOG DEVICESのADALM2000というのを見つけました。USB接続の… 続きを読む »
STM32F103C8T6 Blue pillボードで、BoschのBME280を使って、湿度、気圧、温度センサーを測定し、液晶ディスプレイSC1602に測定値を表示する方法を紹介します。Arduino用ではありません。… 続きを読む »
STM32でI2CをS/Wで制御する「S/W I2C」を紹介しました。今回はS/W I2Cを使って16×2行のSC1602互換 LEDディスプレイを制御する手順を紹介します。Arduino用ではありません。 S… 続きを読む »
STM32F103にプログラムを書き込んだり、デバッグするのにST-LINKを使用してます。Blue Pillボードは、書き込み/デバッグ用にVCC, GND,DIO,CLKの4ピンが用意されています。デバッグしていると… 続きを読む »
複数のデバイスを接続して使いやすように、C++でプログラムする事にします。SW_I2C Classを定義します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
/* * sw_i2c.h * * Created on: Sep 18, 2019 * Author: http://www.e-momonga.com/honkytonk * Copyright 2019 honkytonk. All right reserved. */ #ifndef INC_SW_I2C_H_ #define INC_SW_I2C_H_ #include <stdint.h> #include "stm32f1xx_hal.h" #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus }; #endif typedef struct { GPIO_TypeDef* group; uint16_t port; }gpio; #define BIT_00 0x0001 #define BIT_01 0x0002 #define BIT_02 0x0004 #define BIT_03 0x0008 #define BIT_04 0x0010 #define BIT_05 0x0020 #define BIT_06 0x0040 #define BIT_07 0x0080 #define BIT_08 0x0100 #define BIT_09 0x0200 #define BIT_10 0x0400 #define BIT_11 0x0800 #define BIT_12 0x1000 #define BIT_13 0x2000 #define BIT_14 0x4000 #define BIT_15 0x8000 #define IIC_READ_MASK ~0xfe #define IIC_WRITE_MASK 0xfe #define IIC_STATUS_NACK 0x01 #define IIC_STATUS_OK 0x00 #define IIC_STATUS_NO_ERROR 0x00 #ifdef __cplusplus class SW_I2C { private: uint8_t slave_address; gpio scl; gpio sda; uint8_t status; private: void clearStatus(void){this->status = IIC_STATUS_OK;} void start(void); void stop(void); void sendAck(bool anck); bool checkAck(void); void shiftData8Write(uint8_t data); uint8_t* shiftData8Read(uint8_t *rdata, bool ack); void SCL(bool hl){ HAL_GPIO_WritePin(this->scl.group, this->scl.port, hl ? GPIO_PIN_SET : GPIO_PIN_RESET); } void SDA(bool hl){ HAL_GPIO_WritePin(this->sda.group, this->sda.port, hl ? GPIO_PIN_SET : GPIO_PIN_RESET); } bool readSDA(void){ return HAL_GPIO_ReadPin(this->sda.group, this->sda.port) ? true : false; } public: SW_I2C(uint8_t slave, gpio sda, gpio scl){ this->slave_address = slave; this->sda = sda; this->scl = scl; this->status = IIC_STATUS_OK; } void setSlaveAddress(uint8_t address){this->slave_address = address;} void setSclPort(gpio io){ scl = io; } void setSdaPort(gpio io){ sda = io; } uint8_t* burstReadDataBytes(uint8_t address, uint8_t reg_address, uint8_t *rdata, uint8_t len); void burstWriteDataBytes(uint8_t address, uint8_t reg_address, uint8_t *wdata, uint8_t len); uint8_t* readBytes(uint8_t address, uint8_t *rdata, uint8_t len = 1); void writeBytes(uint8_t address, uint8_t *wdata, uint8_t len); bool testReadByte(uint8_t address, uint8_t reg_address, uint8_t *rdata, uint8_t len); uint8_t getStatus(void){return this->status;} uint8_t getSlaveAddress(void){return this->slave_address;} }; #endif #endif /* INC_SW_I2C_H_ */ |
コンストラクタ SW_I2C()には、ス… 続きを読む »
STM32にはペリフェラルとしてH/WのI2Cインターフェース(I/F)が搭載されていますが、STM32がI2Cのマスターになる場合は、H/W I/Fを使わなくてもS/Wで比較的簡単に制御できます。I2C I/Fは数も限… 続きを読む »
半年ほど前にAmazonで購入した 8桁の7セグLEDとスイッチがついたモジュールをようやく動かしてみました。 このモジュールは、8桁の7セグLEDと、赤色LED 8個、スイッチ(Key) 8個がついて、日本のAmazo… 続きを読む »