2025年12月8日月曜日

pickit5 pedia / raspberry pi pico again

 ミニpcになってからUSB挿し口を変えて成功することが多くなった。。。。

https://tool-lab.com/pic-basic-23/ ここに電源関係がくわしい sdc,lancableはペンディング

なお書き込みスピードが速すぎとエラーがでたので以下を参考にスピードをLOWにした

書き込み失敗は多くLVP onで起こるようで、mplab snapをつかわんのでLVP offとした

https://www.watchittrend.com/mplab-icd4-write-speed-error/

以下はgetchのコンフリクトが起こったので、char eusart_getch(void)として

(eusart.c内で)衝突回避できた、c90でuart redirectでprintfがつかえた 便利

#include "mcc_generated_files/mcc.h"

#include <stdio.h>

#include <stdlib.h>

int16_t Xaxis,Yaxis,Zaxis;

char Line1[] = "  X     Y     Z ";

char Line2[] = "-xxx  -xxx  -xxx";


void itostring(char digit, uint16_t data, char *buffer){

    char i;

    buffer += digit;

    for(i=digit; i>0; i--){

        buffer--;

        *buffer = (data % 10) + '0';

        data = data / 10;

    }   

};

void numtostr(int16_t number, char *buf){

    char* ptr;

    ptr = buf; 

    if(number >= 0)

        *buf = '+';

    else {

        number *= -1;

        *buf = '-';

    }

    itostring(3, (uint16_t)number, ptr+1);

};

void main(void){

    SYSTEM_Initialize();

    while(1){

        Xaxis = (int16_t)ADC_GetConversion(ANX) - 511;

        Yaxis = (int16_t)ADC_GetConversion(ANY) - 511;

        Zaxis = (int16_t)ADC_GetConversion(ANZ) - 511;

        

        numtostr(Xaxis,Line2);

        numtostr(Yaxis,Line2+6); 

        numtostr(Zaxis,Line2+12);

        printf(" X Y Z is %s\n", Line1);

        printf("%s\n", Line2);

        __delay_ms(1000);

    }

}


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

aqm0802が3.3v駆動にて以下を実行(温度はダミー、ビルトインledは便利)

# LM61CIZ

import machine

import utime

# AQM0802

from machine import Pin, I2C

from micropython import const


from utime import sleep



# LM61 Vout connected to 34pin(ACD2)

# input LM61CIZ , convert voltage to temp value

sensor_temp = machine.ADC(2)

conversion_factor = 3.3 / (65535)


# AQM function

_ST7032  = const(0x3e)

_SETTING = const(0x00)

_DISPLAY = const(0x40)


# AQM initialized

def init(i2c):

    orders = [b'\x38', b'\x39', b'\x14', b'\x73', b'\x56', b'\x6c',

              b'\x38', b'\x0c', b'\x01']

    sleep(0.04)

    for order in orders[:6]:

        i2c.writeto_mem(_ST7032, _SETTING, order)

        sleep(0.001)

    sleep(0.2)

    for order in orders[6:]:

        i2c.writeto_mem(_ST7032, _SETTING, order)

        sleep(0.001)

    sleep(0.001)

    

# AQM show setting

def show(i2c, string):

    i2c.writeto_mem(_ST7032, _SETTING, b'\x01')

    sleep(0.002)

    for i in string:

        i2c.writeto_mem(_ST7032, _DISPLAY, i.encode())

# AQM show setting    

def main():

    i2c = I2C(1, scl=Pin(27), sda=Pin(26))

    init(i2c)

    #display temp data

    show(i2c, tempdata)


while True:

    #センサーから値を取り出します

    #reading = sensor_temp.read_u16() * conversion_factor

    #センサから取り出した電圧

    #print(sensor_temp.read_u16())

    # 電圧を温度に変換

    #temp_calc = (reading*1000-600) / 10

    temp_calc = 23.0

    #shellに表示

    #print("{0:.1f}".format(temp_calc)  + "C")

    #print(reading)

    #tempdata = str(temp_calc)

    #小数点以下1位のみ表示+ 温度のCをつける

    tempdata = ("{0:.1f}".format(temp_calc)  + "C")


    #Run

    #if __name__ == '__main__':

    main()

    # 動作確認用のLチカ

    led = machine.Pin(25, machine.Pin.OUT)

    led.value(1)

    utime.sleep(0.2)

    led.value(0)

  

    #each 2 second

    utime.sleep(2)

 

0 件のコメント:

コメントを投稿