2024年7月27日土曜日

SPI-Flash Memory pedia

 https://github.com/derekevans/W25Q16 :: one lib

https://www.switch-science.com/products/8593 :: another lib

all above for arduino uno

--------------------------------------------

CJMCU-2516 2516メモリモジュール、W25Q16BVSIGシリアルspiフラッシュメモリ、16M-BIT

と秋月履歴にあるも16以降がちがってたがいいんだろう、2Mバイトのようだ

cmcc本 426pがあっさりうごいた これもSPIクロス!3.3v仕様!

2024年7月19日金曜日

MCP9700 analog temperature and pic16f1778

 c-mcc本の470pageでオペアンプ2と併用に成功

mcp9700のvoutを5.1kΩ経由でRB3(opa2+専用)、

gndから5.1kΩ経由でRB2(opa2-専用)につなぐが、

その途中から10kΩ経由でRB1(opaout)につなぐ これで非反転直流

増幅回路を形成する RB1は内部的にADCにつながれる

2024年7月11日木曜日

ampIC-pedia/mp3デコーダLSI/バッテリ充放電

 https://www.petitmonte.com/robot/op_amp_njm4580_opa2134.html

オーディオオペアンプNJM4580をL・Rどちらかだけの反転増幅回路
増幅といっても帰還抵抗を流入抵抗よりさげて1以下の増幅率である
1以上にすると音がわれた オペアンプはプリアンプにつかうみたい
注:http://www.wisetech.co.jp/opampdou/story/04/

以下は両電源仕様


OPA2140AIDR2回路入高精度低雑音JFET入力オペアンプDIP化キット

https://akizukidenshi.com/catalog/g/g116129/  フルスイング

NJM4580DD 2回路入HiFiオペアンプ ローノイズ選別品  

https://akizukidenshi.com/catalog/g/g100069/ ノーフルスイング

以下は単電源仕様

LM358N 2回路入汎用オペアンプ フェアチャイルド製 


https://akizukidenshi.com/catalog/g/g115053/  

opa2353 上におなじ ただし1mmの半田が必要

https://akizukidenshi.com/catalog/g/g102330/

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

モノラルアンプ

LM386N ただし2個つかうとステレオ演奏可能!

ステレオアンプ

PAM8403使用 ステレオD級アンプモジュールキット 


https://akizukidenshi.com/catalog/g/g115698/ 手持ちは中華版

 
-------------------------------------------------------------------------------------------------------

MP3デコーダー(SOIC-28パッケージ)VS1011E

https://akizukidenshi.com/catalog/g/g103869/ SOICにて1mmピッチ半田必要
https://akizukidenshi.com/catalog/g/g102473/ 600円は半田済だが40ピン。。。。

http://www.picfun.com/f1make/f1make10.html 充電放電工作

2024年7月8日月曜日

PIC::sdcard/relay/graphic lcd(monoclo,colored)

 中華5v版、秋月レベルシフタ5v版、秋月3v版いずれもpic18f27q43で

6−5 SDカードとファイルシステムで成功した!

https://qiita.com/hikoalpha/items/c7812a34182db07036ef ::3v版結線

https://meltingrabbit.github.io/CanSatForHighSchoolStudents/Arduino/Test_SD/ ::

microSDカードスロット レベルシフタ付きブレークアウト基板キット

 (AE-microSD-LLCNV) を以下のサイトで用いarduino Unoで5v駆動成功した

cf ジャンパ1をハンダするのがポイントだった

なお中華5v版はesp32で成功ずみだが、miso,mosiをマイコンのそれとクロス結線!

--------------------------------------------------------------------


このモジュールにはcapacitor,resister,transistorが同梱されており回路くまんでいい

リレー本来の使い方としては、出力部の一方を別の(+)電源からとりもう一方をLEDなど

アクチュエータにつないで別電源(-)におとす(電圧の違う電源分離が本来の目的)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

モノクロ graphic lcdで文字をつかうにはfont.hを含む必要がある
詳しくは逆引き本にあり (このあたりカラーgraphic lcdでも同様の注意あり)

2024年7月5日金曜日

color-oled(QT095B) at Arduino / PIC

 https://qiita.com/caa45040/items/35a7ee9c49a6d78bd535 の回路図でexamplesにあるadafruit-ssd1331-oled-driver-libraryのtest.inoが動いた(5VでOK)

https://denshikit.main.jp/topf/technology97.htmlを参考に上記をいれようとlib managerを検索したらadfruit gfx library,adafruit busioも自動でインストしてくれた

ーーーーーーーー以下はpic ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
18fq本で後半は手持ちの28pinの18f27q43での作例にてIOTターミナルにトライ 
Co2,Bme280を測定し、esp01でambient送信しつつoledにも3秒毎に表示するもの 
Co2は設定不明でパス BME280は133ペイジを参考にした
とりあへずダウンロードしたソースコードからmaini.cのoled部分だけ抜き出す 
OLED_lib.c(h),ANKdot12.hをコピペ 
各々header,source   のルートレベルに置く
286ペイジのとおりにPIN MANAGER GRIDで設定する

2024年7月3日水曜日

yosino great lib for lcd1602 at pic16f1827

 /*

 *  I2Cモジュール付き1602LCD ヘッダーファイル

 *    i2c_lcd1602.h   2024.6.25

 */


#include <xc.h>


#ifndef I2C_LCD1602_H

#define I2C_LCD1602_H


void I2C_init();

void I2C_start();

void I2C_stop();

void I2C_write(unsigned char dat);

void Write_data(unsigned char data);

void LCD_write(unsigned char bits,unsigned char mode);

void LCD_init();

void LCD_clear();

void LCD_home();

void LCD_cursor(unsigned char x,unsigned char y);


#endif

----------------------------------------------------------------------

/*

 *  I2Cモジュール付き1602LCD ソースファイル 

 *   i2c_lcd1602.c  2024.6.25

 */


#include <xc.h>

#include "i2c_lcd1602.h"


#define _XTAL_FREQ 8000000


//LCD関係定義

#define LCD_EN 0b00000100   //Enable

#define LCD_BL 0b00001000   //Back Light

#define LCD_CMD 0x00

#define LCD_CHR 0x01

#define LCD_LINE1 0x80

#define LCD_LINE2 0xC0

#define LCD_addr 0x4E       //0x27<<1


/* I2C 初期化*/

void I2C_init(){

    SSP1CON1 = 0x28;        //SSPEN = 1,I2C Master Mode

    SSP1STATbits.SMP = 1;   //標準速度モード(100KHz)

    SSP1ADD = 0x31;         //Fosc/(4*Clock)-1 Clock=100kHz,Fosc=20MHz

//8MHzでも19ではなくこのままで

}


/* スタートコンディション */

void I2C_start(){

    SSP1CON2bits.SEN = 1;

    while(SSP1CON2bits.SEN);

}


/* ストップコンディション */

void I2C_stop(){

    SSP1IF = 0;

    SSP1CON2bits.PEN = 1;

    while(SSP1CON2bits.PEN);

    SSP1IF = 0;

}


/* I2Cに1byte送信 */

void I2C_write(unsigned char dat){

    SSP1IF = 0;

    SSP1BUF = dat;

    while(!SSP1IF);

}


void Write_data(unsigned char data){

    I2C_start();

    I2C_write(LCD_addr);

    I2C_write(data | LCD_EN | LCD_BL);

    I2C_write(data | LCD_BL);

    I2C_stop();

    __delay_us(100);

}


void LCD_write(unsigned char bits,unsigned char mode){

    //send High 4bits

    Write_data((bits & 0xF0) | mode);

    //send Low 4bits

    Write_data(((bits << 4) & 0xF0) | mode);

}

void LCD_init(){

    LCD_write(0x33,LCD_CMD);

    LCD_write(0x32,LCD_CMD);

    LCD_write(0x06,LCD_CMD);

    LCD_write(0x0C,LCD_CMD);

    LCD_write(0x28,LCD_CMD);

    LCD_write(0x01,LCD_CMD);

    __delay_ms(1);

}


void LCD_clear(){

    LCD_write(0x01,LCD_CMD);

    __delay_ms(1);

}


void LCD_home(){

LCD_write(0x02,LCD_CMD);

__delay_ms(1);

}


void LCD_cursor(unsigned char x,unsigned char y){

    if (y == 0){

        LCD_write(LCD_LINE1+x,LCD_CMD);

    }

    if (y == 1){

        LCD_write(LCD_LINE2+x,LCD_CMD);

    }

}

---------------------------------------------

/*

 *  I2C QAPASS 1602A  【16F1827】

 *    i2c_lcd1602/main.c  Created on 2024/06/21, 19:27

 */


#include <stdio.h>

#include <stdlib.h>

#include <xc.h>

#include "i2c_lcd1602.h"


#pragma config FOSC = INTOSC, WDTE = OFF , PWRTE = ON , MCLRE = ON , CP = OFF , CPD = OFF

#pragma config BOREN = OFF , CLKOUTEN = OFF , IESO = OFF , FCMEN = OFF

#pragma config WRT = OFF , PLLEN = OFF , STVREN = ON , LVP = OFF


#define _XTAL_FREQ 8000000


void putch(char ch){

    LCD_write(ch,0x01);

}


void main() {

    OSCCON = 0x72;

    ANSELA = 0b00000000 ; 

    ANSELB = 0b00000000 ; 

    TRISA = 0b00000000 ; 

    TRISB = 0b00010010 ;    // RB1(SDA),RB4(SDA)

    PORTA = 0b00000000 ;    

    PORTB = 0b00000000 ;    


    I2C_init();

    LCD_init();

    

    LCD_home();

    printf("Hello,world!");


    int count = 0;

    while(1){ 

        LCD_cursor(2,1);

printf("%3d",count);

count++;

__delay_ms(1000);

    }

}