AVR ISP Shieldを使ってみた #Arduino - Qiita やら
Arduino (Shield) (ht-deko.com) にある説明では十分要領を得んのでメモ
押し下げ棒があるほうにpin1,pin28がくるようにセット avrispのsocketは以下のように挿す
〇 〇 miso vtg
〇 〇 sck mosi
〇 〇 rst gnd
ISP記載が下にある6穴のやつを用いる
注:あくまでatmega88v/328p用と心得よう
AVR ISP Shieldを使ってみた #Arduino - Qiita やら
Arduino (Shield) (ht-deko.com) にある説明では十分要領を得んのでメモ
押し下げ棒があるほうにpin1,pin28がくるようにセット avrispのsocketは以下のように挿す
〇 〇 miso vtg
〇 〇 sck mosi
〇 〇 rst gnd
ISP記載が下にある6穴のやつを用いる
注:あくまでatmega88v/328p用と心得よう
// https://www.adnbr.co.uk/articles/adc-and-pwm-basics
// code: https://gist.github.com/adnbr/9289235
#define F_CPU 9600000
#define LED PB1
#include <avr/io.h>
void pwm_setup(){
TCCR0B |= (1<<CS01); // prescale 8
TCCR0A |= (1<<WGM01) | (1<<WGM00);// fast PWM
// Clear OC0B output on compare match, upwards counting.
TCCR0A |= (1<<COM0B1);
}
void pwm_write(int val)
{
OCR0B = val;
}
void adc_setup(void)
{
// set the ADC input to PB2/ADC1
ADMUX |= (1<<MUX0); // mux1/0=01 select adc1
ADMUX |= (1<<ADLAR);
// set the prescaler 128 , adps2 add by me
ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADEN);
}
int adc_read(void)
{
ADCSRA |= (1<<ADSC); // start conversion
while(ADCSRA&(1<<ADSC));
return ADCH;
}
int main (void)
{
int adc_in;
// LED is an output.
DDRB |= (1 << LED);
adc_setup();
pwm_setup();
while (1) {
// Get the ADC value
adc_in = adc_read();
// Now write it to the PWM counter
pwm_write(adc_in);
}
}
ーーーーーーーーーINT0ーーーーーーーーーーーーー
// https://kurobekoblog.com/attiny_gaibuwarikomi
#include <avr/interrupt.h>
volatile byte state = 0;
int16_t cnt;
ISR(INT0_vect){
state = 1;
}
void sw_up(){
switch(state){
case 0:
break;
case 1:
cnt = 1000;
state = 2;
break;
case 2:
cnt --; // avoid chattering
if(cnt == 0){
PORTB ^= 0b00000001; // toggle led on off
state = 0;
}
}
}
void setup(){
DDRB |= 0b0000001 ; // pb0 output
PORTB |= 0b0000010 ; // pb1 input pullup
MCUCR &= ~0b00000011; // if low level, int0 occur
GIMSK |= (1<<INT0) ; // int0 enable
sei();
}
void loop(){
sw_up();
}
注:pb3をinput pullupでスイッチにつなぎ、スイッチはグランドともつなぐ
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define F_CPU 960000UL
#define LED PB0
//#define SWITCH PINB3 どっちでもうごくが。。。。
#define SWITCH PB3
ISR(PCINT0_vect){ // 0番台の割り込みがpcint0~5ピンに割当られているようだ
if(PINB & _BV(SWITCH)){
PORTB ^= _BV(LED);
}
}
int main(void)
{
DDRB |= _BV(LED); // SET PORT B0 AS OUTPUT(ALL OTHERS ARE INPUT)
PORTB = 0b0001000 ; // pb3(switch) input pullup
PCMSK |= _BV(SWITCH); // SET PCINT MASK TO LISTEN TO PORT B3
GIMSK |= _BV(PCIE);
sei();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
for (;;){
sleep_mode();
}
}
ーーーーーーPCINTもう一つーーーーーーーーー
-----------------acm1602-------------------------------------------------------------------------------https://mctouringadv.net/20200823/arduino11/ にピン番号詳しい
nanoではコントラスうまくいかん
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
; ファイル名 : LCD.asm
.include "m88def.inc"
.def R_TEMP0 = R2
.def STACK = R16
.def R_FLAG1 = R17 ; 割込状態他
.def R_TMR0 = R18 ; タイマ0カウント領域(10mS単位)
.def R_TMR2 = R19 ; タイマ2カウント領域(0.1mS単位)
.def R_TEMP1 = R20
.def R_TEMP2 = R21
.def R_TEMP3 = R22
.def R_TEMP4 = R23
.def R_TEMP5 = R24
;---- R_FLAG1 ----(割込状態他)
.EQU B_IOVF0 = 0 ; タイマ0オーバーフロー
.EQU B_IOVF1 = 1 ; タイマ1オーバーフロー
.EQU B_IOVF2 = 2 ; タイマ2オーバーフロー
.EQU B_INT0 = 3 ; 手動スイッチ押下割込み
;---- PORT ----
.EQU P_LCD = PORTD ; LCD
;.EQU P_SW0 = PINC ; SW0
;---- 入出力ビット -------------
.EQU B_LCD_RS = 4
.EQU B_LCD_E = 5
.EQU B_SDC_CS = 2
; 割り込みベクタ定義
.CSEG ; コードセグメント
RJMP MAIN ; リセット
.ORG $0009
RJMP IOVF2 ; タイマ2
.ORG $0010
RJMP IOVF0 ; タイマ0
;*******************************************************************************
; 割込みルーチン
;*******************************************************************************
;*******************************************************************************
;***************************************
; タイマ2(0.1mS単位)
;***************************************
IOVF2:
IN STACK,SREG ; PUSH SREG
DEC R_TMR2
BRNE IOVF2_1
SBR R_FLAG1,(1<<B_IOVF2)
RJMP IOVF2_9
IOVF2_1:
LDI R_TEMP1, 0x9C ; 割込時間0.1mSを再セット
STS TCNT2, R_TEMP1
IOVF2_9:
OUT SREG,STACK ; POP SREG
RETI
;***************************************
; タイマ0 (10mS単位)
;***************************************
IOVF0:
IN STACK,SREG ; PUSH SREG
DEC R_TMR0
BRNE IOVF0_1
SBR R_FLAG1,(1<<B_IOVF0)
RJMP IOVF0_9
IOVF0_1:
LDI R_TEMP1, 0xD9 ; 割込時間10mSを再セット
OUT TCNT0, R_TEMP1
IOVF0_9:
OUT SREG,STACK ; POP SREG
RETI
;*******************************************************************************
; サブルーチン
;*******************************************************************************
;*****************************
; タイマ2 (0.1mSタイマ) SUBROUTINE
;*****************************
STMR2:
;---- タイマ2 割込み許可 ----
LDS R_TEMP1,TIMSK2 ; タイマ割込許可
SBR R_TEMP1,(1<<TOIE2)
STS TIMSK2,R_TEMP1
;---- タイマ2 開始----
CBR R_FLAG1,(1<<B_IOVF2) ; タイマ2オーバーフローフラグクリア
LDI R_TEMP1, 0x9C ; 割込時間0.1mS
STS TCNT2, R_TEMP1
LDI R_TEMP1, 0x01 ; プリスケーラ 1
STS TCCR2B, R_TEMP1
STMR2_1:
SBRS R_FLAG1,B_IOVF2 ; タイマ0カウント完了判定
RJMP STMR2_1 ; カウント中
;---- タイマ 停止 ----
LDI R_TEMP1, 0x00
STS TCCR2B, R_TEMP1
;---- タイマ2 割込み禁止 ----
LDS R_TEMP1,TIMSK2
CBR R_TEMP1,(1<<TOIE2)
STS TIMSK2,R_TEMP1
RET
;*****************************
; タイマ0 (10mSタイマ) SUBROUTINE
;*****************************
STMR0:
;---- タイマ0 割込み許可 ----
LDS R_TEMP1,TIMSK0 ; タイマ割込許可
SBR R_TEMP1,(1<<TOIE0)
STS TIMSK0,R_TEMP1
;---- タイマ0 開始----
CBR R_FLAG1,(1<<B_IOVF0) ; タイマ0オーバーフローフラグクリア
LDI R_TEMP1, 0xD9 ; 割込時間10mS
OUT TCNT0, R_TEMP1
LDI R_TEMP1, 0x04 ; プリスケーラ 256
OUT TCCR0B, R_TEMP1
STMR0_1:
SBRS R_FLAG1,B_IOVF0 ; タイマ0カウント完了判定
RJMP STMR0_1 ; カウント中
;---- タイマ 停止 ----
LDI R_TEMP1, 0x00
OUT TCCR0B, R_TEMP1
;---- タイマ0 割込み禁止 ----
LDS R_TEMP1,TIMSK0
CBR R_TEMP1,(1<<TOIE0)
STS TIMSK0,R_TEMP1
RET
;*****************************
; USART 送信
;*****************************
;UARTS:
; LDS R_TEMP0,UCSR0A
; SBRS R_TEMP0,UDRE0
; RJMP UARTS
; STS UDR0,R_TEMP3
; RET
;*****************************
; LCD WAIT処理
;*****************************
LCDW:
CBI PORTC,B_LCD_E
;---- タイマー(1mS)セット ----
LDI R_TMR2,0x0A ; 1mSでフラグセット
RCALL STMR2
SBI PORTC,B_LCD_E
;---- タイマー(1mS)セット ----
LDI R_TMR2,0x0A ; 1mSでフラグセット
RCALL STMR2
RET
;*****************************
; LCD 表示処理
;*****************************
;*************************************************
; 引数で渡されたキャラクタを表示する
; 引数 R_TEMP3 キャラクタフォント
;*************************************************
LCDP:
OUT P_LCD,R_TEMP3
RCALL LCDW
SWAP R_TEMP3
OUT P_LCD,R_TEMP3
RCALL LCDW
RET
;*****************************
; LCD 初期化処理
;*****************************
LCDI:;■■■■ ファンクションセット ■■■■
;********* 初期セットモードへの移行 ******************************
NOP
CBI PORTC,B_LCD_RS
NOP
LDI R_TEMP1,0b00110000
OUT P_LCD,R_TEMP1
RCALL LCDW
;---- タイマー(10mS)セット ----
LDI R_TMR2,0x64 ; 10mSでフラグセット
RCALL STMR2
LDI R_TEMP1,0b00110000
OUT P_LCD,R_TEMP1
RCALL LCDW
;---- タイマー(1mS)セット ----
LDI R_TMR2,0x0A ; 1mSでフラグセット
RCALL STMR2
LDI R_TEMP1,0b00110000
OUT P_LCD,R_TEMP1
RCALL LCDW
;********* 各種設定 ******************************
;---- 4bit-mode セット ----
LDI R_TEMP1,0b00100000
OUT P_LCD,R_TEMP1
RCALL LCDW
;---- 2-line,5x8dot-font セット ----
LDI R_TEMP3,0b00101000
RCALL LCDP
;---- display off セット ----
LDI R_TEMP3,0b00001000
RCALL LCDP
;---- display クリア ----
LDI R_TEMP3,0b00000001
RCALL LCDP
;---- entry-mode セット ----
LDI R_TEMP3,0b00000110
RCALL LCDP
;---- display on セット ----
LDI R_TEMP3,0b00001100
RCALL LCDP
SBI PORTC,B_LCD_RS
RET
;*************************************************
; LCD 起動表示
;*************************************************
LCDS:
;---- リターンホーム ----
CBI PORTC,B_LCD_RS
LDI R_TEMP3,0b00000010
RCALL LCDP
SBI PORTC,B_LCD_RS
;---- display クリア ----
CBI PORTC,B_LCD_RS
LDI R_TEMP3,0b00000001
RCALL LCDP
SBI PORTC,B_LCD_RS
;---- 1行目表示 ----
LDI R_TEMP3,' '
RCALL LCDP
LDI R_TEMP3,'W'
RCALL LCDP
LDI R_TEMP3,'E'
RCALL LCDP
LDI R_TEMP3,'L'
RCALL LCDP
LDI R_TEMP3,'C'
RCALL LCDP
LDI R_TEMP3,'O'
RCALL LCDP
LDI R_TEMP3,'M'
RCALL LCDP
LDI R_TEMP3,'E'
RCALL LCDP
LDI R_TEMP3,' '
RCALL LCDP
LDI R_TEMP3,'T'
RCALL LCDP
LDI R_TEMP3,'O'
RCALL LCDP
LDI R_TEMP3,' '
RCALL LCDP
LDI R_TEMP3,'T'
RCALL LCDP
LDI R_TEMP3,'H'
RCALL LCDP
LDI R_TEMP3,'E'
RCALL LCDP
;---- 2行目先頭へ ----
CBI PORTC,B_LCD_RS
LDI R_TEMP3,0b11000000
RCALL LCDP
SBI PORTC,B_LCD_RS
;---- 2行目表示 ----
LDI R_TEMP3,' '
RCALL LCDP
LDI R_TEMP3,' '
RCALL LCDP
LDI R_TEMP3,' '
RCALL LCDP
LDI R_TEMP3,'L'
RCALL LCDP
LDI R_TEMP3,'C'
RCALL LCDP
LDI R_TEMP3,'D'
RCALL LCDP
LDI R_TEMP3,' '
RCALL LCDP
LDI R_TEMP3,'S'
RCALL LCDP
LDI R_TEMP3,'A'
RCALL LCDP
LDI R_TEMP3,'M'
RCALL LCDP
LDI R_TEMP3,'P'
RCALL LCDP
LDI R_TEMP3,'L'
RCALL LCDP
LDI R_TEMP3,'E'
RCALL LCDP
RET
;*************************************************
; LCD 動作表示
;*************************************************
;LCDM:
;---- リターンホーム ----
; CBI PORTC,B_LCD_RS
; LDI R_TEMP3,0b00000010
; RCALL LCDP
; SBI PORTC,B_LCD_RS
;---- display クリア ----
; CBI PORTC,B_LCD_RS
; LDI R_TEMP3,0b00000001
; RCALL LCDP
; SBI PORTC,B_LCD_RS
;---- 1行目表示 ----
; LDI R_TEMP3,'R'
; RCALL LCDP
; LDI R_TEMP3,'='
; RCALL LCDP
;---- 2行目先頭へ ----
; CBI PORTC,B_LCD_RS
; LDI R_TEMP3,0b11000000
; RCALL LCDP
; SBI PORTC,B_LCD_RS
;---- 2行目表示 ----
; LDI R_TEMP3,'S'
; RCALL LCDP
; LDI R_TEMP3,'='
; RCALL LCDP
; RET
;*****************************
; メインルーチン(MAIN)
;*****************************
MAIN:
CLI ; 全割込み禁止
;---- PORT 設定 ----
;LDI R_TEMP1,0b11111111
;LDI R_TEMP2,0b00000000
;OUT DDRB,R_TEMP1
;OUT PORTB,R_TEMP2
LDI R_TEMP1,0b11110000
LDI R_TEMP2,0b00101111
OUT DDRC,R_TEMP1
OUT PORTC,R_TEMP2
LDI R_TEMP1,0b11111111
LDI R_TEMP2,0b00000000
OUT DDRD,R_TEMP1
OUT PORTD,R_TEMP2
;---- USART 設定 ----
;LDI R_TEMP1,25
;STS UBRR0L,R_TEMP1
;LDI R_TEMP1,0
;STS UBRR0H,R_TEMP1 ; ボーレート2400
;LDS R_TEMP1,UCSR0C
;SBR R_TEMP1,((1<<UCSZ01)+(1<<UCSZ00)) ; ノンパリティ/1ストップビット/8ビット長
;STS UCSR0C,R_TEMP1
;LDS R_TEMP1,UCSR0B
;SBR R_TEMP1,((1<<RXEN0)+(1<<TXEN0)) ; 送受信イネーブル
;STS UCSR0B,R_TEMP1
;---- フラグ・ワークレジスタ 初期化 ----
LDI R_FLAG1, 0x00
SEI ; 全割込み許可
;---- LCD(液晶パネル) 初期化 ----------------------
RCALL LCDI
;---- LCD(液晶パネル) 起動表示 ----------------------
RCALL LCDS
;---- タイマ(2秒) ----
;LDI R_TMR0,0xC8
;RCALL STMR0
;---- LCD(液晶パネル) 動作表示 ----------------------
;RCALL LCDM
;---- LCD 文字初期表示位置設定 ----------------------
;LDI R_TEMP4,0x82
MAIN01:
;---- 1文字受信 ----
;LDS R_TEMP1,UCSR0A
;SBRS R_TEMP1,RXC0
;RJMP MAIN01 ; 受信バッファが空
;LDS R_TEMP5,UDR0
;---- LCD 文字表示位置 最終桁+1判定 ----------------------
CPI R_TEMP4,0x90
BREQ MAIN10 ; 最終桁+1である
MAIN02:
;---- LCD 受信文字表示位置設定 ----------------------
;CBI PORTC,B_LCD_RS
;MOV R_TEMP3,R_TEMP4
;RCALL LCDP
;SBI PORTC,B_LCD_RS
;---- LCD(液晶パネル) 受信文字表示 ----------------------
;MOV R_TEMP3,R_TEMP5
;RCALL LCDP
;---- LCD 送信文字表示位置設定 ----------------------
;CBI PORTC,B_LCD_RS
;MOV R_TEMP3,R_TEMP4
;LDI R_TEMP1,0x40
;ADD R_TEMP3,R_TEMP1
;RCALL LCDP
;SBI PORTC,B_LCD_RS
;---- 受信文字 判定 ----------------------
;CPI R_TEMP5,'T'
;BRNE MAIN20 ; 受信文字が'T'でない
;IN R_TEMP3,P_SW0 ; 受信文字が'T'である
;ANDI R_TEMP3,0x0F ; 不要ビットマスキング
;LDI R_TEMP1,0x0F
;EOR R_TEMP3,R_TEMP1 ; リアルコード→コンプリメンタリコード変換
;LDI R_TEMP1,0x30
;ADD R_TEMP3,R_TEMP1
MAIN03:
;---- 1文字送信 ----
;RCALL UARTS ; パソコン転送
;---- LCD(液晶パネル) 送信文字表示 ----------------------
;RCALL LCDP
;INC R_TEMP4
;RJMP MAIN01
MAIN10:
;---- LCD(液晶パネル) 動作表示 ----------------------
;RCALL LCDM
;---- LCD 文字初期表示位置設定 ----------------------
LDI R_TEMP4,0x82
RJMP MAIN02
MAIN20:
;LDI R_TEMP3,'X'
RJMP MAIN03
PIC10F322 + PICKIT3 + Windows11 + MPLAB + MCCの環境構築が大変だった件 #PIC10F200 - Qiita
こんばんは。MCCはそれぞれ別のバージョンがインストールでき
-----------------------------------------------------------------------------------
【PIC】PICの使い方を解説する-PICKIT3とMPLABを使うよ!- - TRY-AND-ERROR-AND-TRY (aisumegane.com) 中華pickit3のつなぎかた pic16f1827,pic121822,12lf1840のセットのしかたが詳しい ちなみにpickit4と違い、5vの外部電源を外付け必要(uspisp同様)
PICを使ってLチカ|キム日記 (kimudiary.com) も参考になった
-----------------------------------------------------------
PIC16F18313 MPLAB+MCC+MPLAB-SNAP/pickit4での後閑さんの8ピン本 これはmplab6.2以降,mccも5以降のようだ プロジェクト作成時にmcc起動しないを選択するとモシニャガ本にもつかえるみたいだ 以下の注意点があった
ウィンドウズ10のPCで、まったく同じコードでLVP=off(モシニャガ先生の設定)ではmplab snapがうごかず、LVP=onにするだけで書き込み成功(mplab x 5.35,6.2ともども)
2進化10進のコードが難解なのでTをいれたら0,それ以外をいれたらXが返るようにした
;; USART.ASM RX/TX :: TERATERM 2400BAUD SUCCESS!
.include "m88def.inc"
.def STACK = R16
.def R_TEMP1 = R17
.def R_TEMP2 = R18
.def R_TEMP3 = R19
.EQU P_SW0 = PINC ;SW0
.CSEG
RJMP MAIN
;;---------------------------
;; USART SEND ROUTINE
;;-----------------------
UARTS:
LDS R_TEMP1,UCSR0A
SBRS R_TEMP1,UDRE0
RJMP UARTS
STS UDR0,R_TEMP3 ; R_TEMP3 VAL SETUP IN MAIN ROUTINE
RET
; --------------- MAIN ROUTINE ---------------------
MAIN:
CLI
LDI R_TEMP1,0b11110000
LDI R_TEMP2,0b00001111
OUT DDRC,R_TEMP1
OUT PORTC,R_TEMP2
; -- USART INIT
LDI R_TEMP1,25
STS UBRR0L,R_TEMP1
LDI R_TEMP1,0
STS UBRR0H,R_TEMP1 ; BAUD RATE 2400
LDS R_TEMP1,UCSR0C
SBR R_TEMP1,((1<<UCSZ01)+(1<<UCSZ00))
STS UCSR0C,R_TEMP1 ; NO-PARI/1STOP/8BIT-LEN
LDS R_TEMP1,UCSR0B
SBR R_TEMP1,((1<<RXEN0)+(1<<TXEN0))
STS UCSR0B,R_TEMP1 ; TX/RX ENABLE
SEI
MAIN01:
LDS R_TEMP1,UCSR0A ; 1 CHAR RECV
SBRS R_TEMP1,RXC0
RJMP MAIN01
LDS R_TEMP3,UDR0 ; RECV BUFFER IS EMPTY
CPI R_TEMP3,'T'
BRNE MAIN10 ; IF NOT T,GOTO MAIN10
;IN R_TEMP3,P_SW0 ;IF T, UNUSED BITS MASKING
;ANDI R_TEMP3,0x0F
;LDI R_TEMP1,0x0F
;EOR R_TEMP3,R_TEMP1 ; REAL CODE -> COMPLEMENTARY CODE CONV
LDI R_TEMP3,0x00
LDI R_TEMP1,0x30
ADD R_TEMP3,R_TEMP1
MAIN02:
RCALL UARTS ; CONVERTED CHAR SEND TO PC
RJMP MAIN01
MAIN10:
LDI R_TEMP3,'X'
RJMP MAIN02
ーーーーーーーーーーーATMEGA88 SEND TO PC ----------------------------
以下のコードはinoにしてarduinoIDEは通らんかったのでcにしてmicrochip studioで成功
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 1000000UL いらんかも。。。
// +-----------------------------------------------------------------------+ //
// | ATmega328p Baudrate calc is as below を88に変更
// +--https://qiita.com/k_match/items/c99d25adf6b1a984061f
//---------------------------------------------------------------------+ //
#define BAUD_RATE_2400_BPS 25 // 2400bps
// +-----------------------------------------------------------------------+ //
int main()
{
int i = 0;
unsigned int ubrr = BAUD_RATE_2400_BPS;
unsigned char data[] = "Hello from ATmega88 ";
/* Set Baudrate */
UBRR0H = (ubrr>>8);
// Shift the 16bit value ubrr 8 times to the right and
// transfer the upper 8 bits to UBBR0H register.
UBRR0L = (ubrr);
// Copy the 16 bit value ubrr to the 8 bit UBBR0L register,
// Upper 8 bits are truncated while lower 8 bits are copied
UCSR0C = 0x06; /* Set frame format: 8data, 1stop bit */
UCSR0B = (1<<TXEN0); /* Enable transmitter */
while(1) /* Loop the messsage continously */
{
i = 0;
while(data[i] != 0) /* print the String "Hello from ATmega328p" */
{
while (!( UCSR0A & (1<<UDRE0))); /* Wait for empty transmit buffer */
/* When UDRE0 = 0,data transmisson ongoing. */
/* So NOT{[UCSR0A & (1<<UDRE0)] = 0} = 1 ,While(1) loop stays there */
/* When UDRE0 = 1,data transmisson completed. */
/* So NOT{[UCSR0A & (1<<UDRE0)] = 1} = 0 ,While(0) loop fails */
UDR0 = data[i]; /* Put data into buffer, sends the data */
i++; /* increment counter */
}
/* Sending '\n' '\r' Character pair helps to format the output properly on console putty Screen */
/*************************************************************/
/* Send "\n" Character */
while (!( UCSR0A & (1<<UDRE0))); /* Wait for empty transmit buffer */
UDR0 = '\n'; /* Put data into buffer, sends the data */
/* Send "\r" Character */
while (!( UCSR0A & (1<<UDRE0))); /* Wait for empty transmit buffer */
UDR0 = '\r'; /* Put data into buffer, sends the data */
/*---------------------------------------------------------------------------*/
_delay_ms(100);
}
}
windows10 virtualbox lubuntu
第684回 UbuntuからRaspberry Pi Picoを使う | gihyo.jp
ただしそもそもpico-sdkはラズパイOSでつかうのが本筋
--------------------------------
Raspberry Pi Picoのcmakeを用いたオリジナルプロジェクト - 理系的な戯れ (rikei-tawamure.com) は個別のプロジェクトをつくる解説
RaspberryPiPico SDKを使って小さいサンプルプログラムをビルドする #C - Qiita
これのほうが個別プロジェクトの作り方としてはよかった
Raspberry Pi Pico: 開発環境のセットアップ (zenn.dev) はpico-exampleの説明
以下の-b 1.2.0を取り除くと最新版がインストできる、そうでないと以降ができん
git clone -b 1.2.0 https://github.com/raspberrypi/pico-sdk.git
cd pico-examples mkdir build cd build cmake ..
このあとはbuild内にsample各種ができるcd blinkとし、そこでmakeでuf2ができる
あとはboot buttonをおしてusb drive となったピコにD&D
avr-attiny-tutorial/blink_watchdog_interupt/main.c at master · casperbang/avr-attiny-tutorial · GitHub 吉野さんによればwdt.h,avr/io.hが抜けているとのこと
以下のコードでattiny13aで大成功 WDTは、AVRマイコン・リファレンスブック P52の図2-18のように128KHzオシレータで動いている
(ATtiny ウォッチドッグタイマ割込みでLEDチカチカ | 東京お気楽カメラ (okiraku-camera.tokyo) これはattiny85系だった)
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <avr/io.h>
#define LED PB0
ISR(WDT_vect) {
// Toggle port B output 0 output state
PORTB ^= _BV(LED);
}
int main(void) {
// Set port B output 0 as output
DDRB = _BV(LED);
// Prescale timer to 4s -->wrong! 500msだった
WDTCR |= (1<<WDP2) | (1<<WDP0); //
// Enable watchdog timer interrupts
WDTCR |= (1<<WDTIE);
// ATtiny13Aでウォッチドッグタイマを使ったタイマー割り込み: 猫にコ・ン・バ・ン・ワ (cocolog-nifty.com) これによるとunoならwdtieでなくwdieになるげな
// Enable global interrupts
sei();
// Use the Power Down sleep mode
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
for (;;) {
sleep_mode(); // Deep sleep, waiting for interrupt
}
}
以下はattiny2313で成功
/*
* WDT 【ATtiny2313】
* wdt.c 2024.3.6
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define LED PB0
ISR(WDT_OVERFLOW_vect) {
PORTB ^= _BV(LED);
}
int main(void) {
DDRB = _BV(LED);
WDTCSR |= (1<<WDIE) | (1<<WDP2) | (1<<WDP0); // Enable watchdog timer interrupts
// Prescale timer to 500ms
sei();
set_sleep_mode(SLEEP_MODE_PWR_
while (1) {
sleep_mode(); // Deep sleep, waiting for interrupt
}
}
------------------------------------------------------------
普通はtx,rxでいい。。。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
AT24Cxx - Arduino Reference 中華EEPROM I2C仕様 なんかおかしい。。。。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
A-Dコンバータ その1 10ビットSPI MCP3002 - Arduinoクックブック (denshi.club)
SPIサンプルコード成功した 2チャンネルなので使い勝手がいい,bme vs dht like
AVR - ArchWiki (archlinux.jp) avr-gcc,avrobjcopy,avrdude....great site
ATtiny2313 AVR 8-bit Microcontroller Tutorial (startingelectronics.com) great
-------------------------------------------------------------------
/usr/share/avraにあるtn2313def.
avra prog.asmでできたprog.hexを
GitHub - SpenceKonde/ATTinyCore: Arduino core for ATtiny 1634, 828, x313, x4, x41, x5, x61, x7 and x8 に2313,85,44,84,48,84の割込みテーブルあり 8,10,13 ....?
328pについては ATmega48A, ATmega48PA, ATmega88A, ATmega88PA, ATmega168A, ATmega1688PA, ATmega328, ATmega328P datasheet (akizukidenshi.com) にあり
AVRマイコン(ATmega328P)の使い方 (elec-hobbyist.com) に使用例がある
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ATtiny24/ATtiny44/ATtiny84をArduinoとして動かす基本的な方法! | ぶらり@web走り書き (burariweb.info) を参考にp*nをつかわずに、5,6で一組、7,8で一組でダブルギアをanalogWriteできた 5,6はそれでないとだめだった 理由不明 すくなくともattiny2313よりはつかいやすい よりAdrduino化したということか