私は、タイマ1を使用して100kHzのPWMを生成するためにarduinoを使用しています
void setup() {
//put your setup code here, to run once:
//Timer 1 Fast PWM mode *toggling* OC1A at 50kHz with *two* OCR1A counts
//And 7.32 bits 0-159 PWM on OC1B at 100kHz
//Output on OC1B
//Set at TOP, Clear at OCR1B
//WGM =15 0b1111
DDRB |= bit(DDB1) | bit(DDB2); //atmega168/UNO OC1A and OC1B (Tested by OP/Luis)
TCCR1A = bit(WGM11) | bit(WGM10) | bit(COM1A0) | bit(COM1B1) ;//Toggle OC1A, Clear on OC1B
TCCR1B =ビット(WGM13)|ビット(WGM12)|ビット(CS10)。 //プリスケーラを1に設定する
OCR1A = 159 ;//79; //Set TOP count to 16000000/(2*PreScaler*Ftoggle)
//or 16000000/(PreScaler *Ftimer)
OCR1B = 10; //10/160 duty cycle
TCNT1 = 0 ;
}
void loop() {
//put your main code here, to run repeatedly:
OCR1B = 160/4 -1 ;//25% duty cycle.
}
私はこれを使ってモジュールをテストしました:
Receiver
#include
#include "nRF24L01.h"
#include "RF24.h"
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int LED1 = 3;
void setup(void){
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
pinMode(LED1, OUTPUT);}
void loop(void){
if (radio.available()){
bool done = false;
while (!done){
done = radio.read(msg, 1);
Serial.println(msg[0]);
if (msg[0] == 111){delay(10);digitalWrite(LED1, HIGH);}
else {digitalWrite(LED1, LOW);}
delay(100);}}
else{Serial.println("No radio available");}}
トランスミッタ
#include
#include "nRF24L01.h"
#include "RF24.h"
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int SW1 = 7;
void setup(void){
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);}
void loop(void){
if (digitalRead(SW1) == HIGH){
msg[0] = 111;
radio.write(msg, 1);}}
I'm using this library
https://github.com/TMRh20/RF24
そして、それは大丈夫です、今最初の問題は、RF24とpwm
ピン10を使用していますが、ライブラリで変更することができるので、代わりにピン7を使用しています。私はもう一度それをテストし、まだ正常に動作します。
しかし、セットアップ時に回線を追加してpwdを使用すると、通信は機能しません
DDRB |= bit(DDB1) | bit(DDB2); //atmega168/UNO OC1A
TCCR1A = bit(WGM11) | bit(WGM10) | bit(COM1A0) | bit(COM1B1) ;//Toggle OC1A, Clear on OC1B
TCCR1B =ビット(WGM13)|ビット(WGM12)|ビット(CS10)。 //プリスケーラを1に設定する
OCR1A = 159 ;//79; //Set TOP count to 16000000/(2*PreScaler*Ftoggle)
//or 16000000/(PreScaler *Ftimer)
OCR1B = 10; //10/160 duty cycle
TCNT1 = 0 ;
私は行ごとに試して、問題はここにあります:
TCCR1B =ビット(WGM13)|ビット(WGM12)|ビット(CS10)。 //プリスケーラを1に設定する
プリスケーラを1に設定するとき。
このタイマのRF24の依存関係はどれですか?私はそれを動作させる必要があるオプション
EDIT。
今私はCEとCSのピン6と7を使用しています
また、レジスタ設定から "| bit(COM1A0)"を削除しました
まだ動作しません
私はこれを持っている
void setup(void)
{
/// RF settings
Serial.begin(9600);
radio.begin();
//radio.openReadingPipe(1,pipe);
//radio.startListening();
pinMode(LED1, OUTPUT);
/// end RF settings
//// pwd settings
DDRB |= bit(DDB1) | bit(DDB2);
OCR1A = max_count; //16000000/(PreScaler *Ftimer)
OCR1B = 10;
TCCR1A = bit(WGM11) | bit(WGM10) | bit(COM1B1);//bit(COM1A0) | Toggle OC1A, Clear on OC1B
TCCR1B =ビット(WGM13)|ビット(WGM12)|ビット(CS10)。 //プリスケーラを1に設定する
TCNT1 = 0 ;
////
}
RF24の設定の前にPWMの設定をしてもPWMが機能しない場合、RF設定は最初は通信が機能しません。
radio.begin()はレジスタを上書きする必要がありますが、どのように見つけられません。