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);
}
}
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を