2022年10月14日金曜日

AVR総論とタイマ, attiny13a/85/44a and atmega328p

総論はこれ! 

 https://dbpro.xyz/avrwiki/wiki.cgi?page=Getting+Started+Notes+-+Ports#p8

http://usicolog.nomaki.jp/engineering/avr/avrPWM.html はタイマ総論

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

ATtiny13。ちっちゃいマイコンの書き込み方~Lチカまで@Arduino | くろべこblog (kurobekoblog.com)  attiny13aはattiny85と環境設定jsonはちがう 以下の通り

https://mcudude.github.io/MicroCore/MicroCore_MCUdude_MicroCore_index.json

Lチカは以下のとおり

#include <avr/io.h>

#include <util/delay.h> // for _delay....

void setup() {

  DDRB |= 0b00001000; // PB3 set to output 

}

void loop() {

 PORTB |= 0b00001000; //PB3 output to high

 _delay_ms(1000);

 PINB |= 0b00001000;  // 注 総論参照

_delay_ms(1000);

}


--------------------------------- atmega328p ---------------------- 
https://qiita.com/oh_one/items/ac016c58190f77f66a13
https://omoroya.com/arduino-extra-edition-22/

Arduinoで、小っちゃいIC(ATTiny)を使う方法 - Qiita 

attiny13,attiny85とポートレジスタが違うので注意 

吉野さんから以下のコードをいただいた

コードはUNOとATtiny13aを一緒にしています。
ATtiny13aはポートがBのみで、D0からD4までです。
D1、D2(6番、7番ピン)を使っています。
コンデンサと抵抗は特になくてもOKです。
 
UNOはD12にスイッチ、D11にLEDをそれぞれつないでください。
ポートはB、C、Dがありますが、B(D8からD13)を使っています。

// push switch to LED on
// avr@UNO
//  D11----R----LED----GND
//  D12----swich----GND
//  

int main(void) {
  DDRB = 0b00001000;  // D11->OUTPUT 最下位から数える 8,9,10,11,....
  PORTB = 0b00010000; // D12->INPUT_PULLUP
  while (1) {
    bool state;
    state = (~PINB >> 4) & 1;
    if (state == 0) {
      PORTB &= ~0b00001000;
    }
    else {
      PORTB |= 0b00001000;
    }
  }
}

 /*

 *  8bits Timer Counter  ATtiny13A 
 */

#include <avr/io.h>

uint8_t hsPWM(bool pin, int8_t pwm){
  // 内臓クロック9.6MHz

  if(pin==0){
    DDRB   |= 0b00000001;       // PB0出力設定
    TCCR0A |= 0b10000011;       // PB0非反転出力,高速PWM
    TCCR0B |= 0b00000010;       // 8bit高速PWM,8分周比
    OCR0A = pwm;                // 8bitタイマ/カウンタ比較レジスタA
    return OCR0A;
  }
  else{
    DDRB   |= 0b00000010;       // PB1出力設定
    TCCR0A |= 0b00100011;       // PB1非反転出力,高速PWM
    TCCR0B |= 0b00000011;       // 8bit高速PWM,64分周比
    OCR0B = pwm;                // 8bitタイマ/カウンタ比較レジスタB
    return OCR0B;
  }
}

void setup() {
}

void loop() { 
    hsPWM(1, 50);              // ピン番号、デューティ比(ex.50/255)
}


デューティ比を変えるには関数のpwmの値(1~255)を変えてください。
分周比を変えると周波数が変わります。
ちなみにTCCR0Bレジスタの下位3ビットが、010:8分周 011:64分周 100:256分周
101:024分周です。

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

attiny85::flash 8kもある! attiny44a::14pin!

------328p------------------------------------------------------------------

https://qiita.com/oh_one/items/ac016c58190f77f66a13  about atmega328p

0 件のコメント:

コメントを投稿