[戻る]
新着表示

ソーラーモーターの質問 投稿者:マルシマ 投稿日:2017/07/03(Mon) 15:51:26 No.934

電子工作の素人です。ソーラーモーターとソーラーモジュールを使って室内灯(蛍光灯、LED灯)でも動く車のおもちゃを作りたいのですが可能でしょうか? 安く作る方法があればご教授いただけないでしょうか?

XC8が認識できない 投稿者:masa 投稿日:2017/05/29(Mon) 11:24:48 No.920

MPLAB IDE v8.92 上でXC8を使いたいですが認識してくれません。XC8を認識して使えるようにする方法・手続きを是非ご教授ください。お願いします。

LAN通信について 投稿者:村上 宗隆 投稿日:2017/05/17(Wed) 20:26:47 No.916

LAN通信についてお尋ねしたくて、
TCP/IP通信プログラミング Ver.2  の最下ラインにあった
ご覧になった感想や質問はいつでもどうぞ!!(Quick Answer)
から info@picfun.com にメイルを差し上げたのですが
Undelivered Mail Returned to Sender となって
戻ってきました
有効なメイルアドレスがありましたら、お願いします

Re^4: I2CSlave通信について 投稿者:なべ 投稿日:2017/05/06(Sat) 14:36:49 No.911

Gokan様
ご回答ありがとうございます。
再度、プログラムを整理してWaitを10μsから確認してみました。
50μs程度で文字抜けなく正常に受信できていることが分かりました。
Gokan様が言うとおり100μs以下で問題なさそうです。
ありがとうございました。

> msecオーダーの遅延ということは、受信してから何らかのデータ処理
> をしている時間があるということではないでしょうか??
> 割込み処理で100usec以上かかるようなことは無いと思います。
>
> > Gokan様
> > ありがとうございます。
> > MasterとSlaveのI2Cを制御するプログラムの遅延時間という事ですが、この場合は、スレーブ用割込み制御レジスタIFS1のSI2C1IF割り込みフラグをクリアするために必要なWait(処理)時間ということでしょうか。
> > while(1) //送信要求終了(NACK)を受信するまで繰り返す 
> > {
> > I2C1TRN = *strx;
> > I2C1CONbits.SCLREL = 1;
> > IFS1bits.SI2C1IF = 0;
> > if(I2C1STATbits.P == 1)break;
> > delay_ms(1);
> > strx++;
> > };
> > > これはI2Cの仕様ではなくてMasterとSlaveのI2Cを制御する
> > > プログラムの遅延時間次第です。
> > > I2C自身の仕様では遅延時間は必要ありません。
> > >
> > > > PIC24FのI2CのSlave通信について教えてください。
> > > > MasterがSlaveからデータを連続で複数取得する場合、Slaveは、データを送信する側としてデータを送る度にWait時間が必要になるのでしょうか。
> > > > 100μsのWaitで動作させるとデータが抜けたりしたため、1ms程度まで増やすと正常にデータを受信することができました。
> > > > 参考にしたサイトでは、約2ms程度の遅れが必要とありました。
> > > >
> > > > 仕様的にどうなっているかご教示頂けないでしょうか。
> > > > よろしくお願い致します。

プログラム領域への書込み 投稿者:mikan 投稿日:2017/05/02(Tue) 17:53:26 No.904

pic24FJ256GB108を用いてプログラム領域の一部を外部からの設定データ保存用としてソフトを作成しています。
初期値設定して、内部に書込み(ProgramMemoryで確認)を確認し、その後、テーブル命令にて読込み他のBuffに展開(Watchにて確認)
することは出来たのですが、書込みを行ってもProgramMemoryには書き込まれていなく0のままです。もしかして、Pickit3のDebugで
行うと書かれないとか...すみませんがご教示頂けないでしょうか。
ソースは以下になります。
宜しくお願い致します。
int __attribute__((section(".eep_setdata"), space(prog), address (0x0AE00) )) eep_data[_FLASH_PAGE];

void writeFlashRow(void)
{
unsigned int page = (__builtin_tblpage(eep_vrtap_data)>>16);
unsigned int offset = (__builtin_tbloffset(eep_vrtap_data)&0xFFFF);
unsigned int i=0;
TBLPAG = page;
__builtin_tblwtl(__offset, 0x0000);
NVMCON = 0x4042;
asm ("disi #5");
__builtin_write_NVM();
while(NVMCONbits.WR);

NVMCON = 0x4001;

for(i=0; i < 128; i++)
{
__builtin_tblwtl(offset+(i*2), str_eep[i]); // Write to address low word
__builtin_tblwth(offset+(i*2), 0xFF); // Write to upper byte
}
asm("DISI #5");
__builtin_write_NVM();
while(NVMCONbits.WR);
}

int readFlashRow(void)
{
unsigned int page = (__builtin_tblpage(eep_vrtap_data)>>16);
unsigned int offset = (__builtin_tbloffset(eep_vrtap_data)&0xFFFF);
unsigned int val;
int i;
while(NVMCONbits.WR);
TBLPAG = page;
val = 0;
for(i=0; i<128; i++)
{
 val += str_eep[i] = __builtin_tblrdl(offset+(i*2));
 str_eep2[i] = __builtin_tblrdl(offset+((i*2)+512));
}
ret = val;
return ret;
}

Re^3: 周波数特性測定器に関して 投稿者:HT 投稿日:2017/04/26(Wed) 21:52:14 No.902

おかげさまで測定までできるようになりました。
1V=0dBにて切片を書き直しPIC側のプログラムを書き直しました。
傾きはほぼオリジナル通りでほぼ問題なさそうなのでそのままにしております。
最近作成した6CA7プッシュプルの真空管アンプの測定結果を示します。
アマチュアがNFB時の位相補正等を検討するには十分使用できるものと思います。また測定時間も早く便利です。
このような測定器をご紹介下さりありがとうございました。

質問2 投稿者:mh 投稿日:2017/04/26(Wed) 16:32:06 No.901

質問2
暗唱キー: 38698453
お世話になります
質問よろしくお願いします。

暗唱キー: 38698452の質問のご回答有難う、
御座いました。


私のシステムは:
@ パソコン:windows10(64ビット)
A Mplab X Idev3.60 + XC8コンパイラv1.41

質問:
ビット反転して、switch case文で選んで処理をしたいと、
思っています色々やってみましたのですが、エラーが出て、
うまくいきません、尚PICは PIC16F1938です。
どこを直せばよいでせうか宜しくお願いします。
リスト載せておきます。

////////////////////////////////////
//
// tes_led_f1938.c
// time.h や time()
//
//
////////////////////////////////////
#include <time.h>
#include <xc.h>

//f1938
// コンフィギュレーション1の設定
#pragma config FOSC = INTOSC // 内部クロックを使用する(INTOSC)
#pragma config WDTE = OFF // ウオッチドッグタイマー無し(OFF)
#pragma config PWRTE = ON // 電源ONから64ms後にプログラムを開始する(ON)
#pragma config MCLRE = OFF // 外部リセット信号は使用せずにデジタル入力(RA5)ピンとする(OFF)
#pragma config CP = OFF // プログラムメモリーを保護しない(OFF)
#pragma config CPD = OFF // データメモリーを保護しない(OFF)
#pragma config BOREN = ON // 電源電圧降下常時監視機能ON(ON)
#pragma config CLKOUTEN = OFF // CLKOUTピンをRA6ピンで使用する(OFF)
#pragma config IESO = OFF // 外部・内部クロックの切替えでの起動はなし(OFF)
#pragma config FCMEN = OFF // 外部クロック監視しない(FCMEN_OFF)

// コンフィギュレーション2の設定
#pragma config WRT = OFF // Flashメモリーを保護しない(OFF)
#pragma config PLLEN = OFF // 動作クロックを32MHzでは動作させない(OFF)
#pragma config STVREN = ON // スタックがオーバフローやアンダーフローしたらリセットをする(ON)
#pragma config BORV = HI // 電源電圧降下常時監視電圧(2.5V)設定(HI)
#pragma config LVP = OFF // 低電圧プログラミング機能使用しない(OFF)

// メインの処理
//unsigned char DIPSW;
// unsigned char sw_state_prev = 0x00;

int h;
void main()
{
OSCCON = 0b01110010 ; // 内部クロックは8MHzとする
OPTION_REG = 0b00000000 ; // デジタルI/Oに内部プルアップ抵抗を使用する
ANSELA = 0b00000000 ; // AN0-AN4は使用しない全てデジタルI/Oとする
ANSELB = 0b00000000 ; // AN8-AN13は使用しない全てデジタルI/Oとする
TRISA = 0b00000000 ; // ピン(RA)は全て出力に割当てる(0:出力 1:入力)
TRISB = 0b11111111 ; // ピン(RB)はRB0のみ入力、他は全て出力に割当てる
TRISC = 0b00000000 ; // ピン(RC)は全て出力に割当てる
WPUB = 0b00000001 ; // RB0は内部プルアップ抵抗を指定する
PORTA = 0b11111111 ; // RA出力ピンの初期化(全てLOWにする)
PORTB = 0b00000000 ; // RB出力ピンの初期化(全てLOWにする)
PORTC = 0b00000000 ; // RC出力ピンの初期化(全てLOWにする)
BYTE DIPSW

while(1) // 無限ループ
{
sw_state = (PORTb^ 0xff) & 0x1F; // SW1,SW2の状態を反転して格納
switch(sw_state)
{
case 0x02: // SW1押下
PORTC = 0b00000010; // 7セグメントLED表示 "1"
break;
case 0x04: // SW2押下
PORTC = 0b00000100; // 7セグメントLED表示 "2"
break;
case 0x06: // SW1およびSW2押下
PORTC = 0b00001000; // 7セグメントLED表示 "3"
break;
default:
break;
}
}

}

USART双方向通信 投稿者:radio 投稿日:2017/04/25(Tue) 09:52:17 No.900


PIC18F2320 + C18の環境で作成しています。

下記サイトを参考にさせていただき、無線ラジコンに取り組んでいます。
[参考サイト]
http://www.picfun.com/Sensor/equipj77.html


送信側のプログラムを作成していますが、
基本、↓のコードを送信するのですが、受信側からあるコード('X')を受信したときだけ、LEDを点灯させる制御を行いたいです。(受信側から送られるコードは、不定期に送られます。)

↓のコードの3〜7行目を追加してみたのですが、else以下の送信すら動作しません。
双方向(送信と受信)を両立させるためには、どのように記述すれば良いのでしょうか。


void RadioCar(void)
{
while(!DataRdyUSART()){} //必要
RcvData = ReadUSART();
if(RcvData == 'S'){
LED=1;
 }

else{
//USART送信
WriteUSART('S');//putsUSART("S");同等
WriteUSART('S');
WriteUSART(Direction);
WriteUSART(M1data >> 8);
WriteUSART(M1data & 0x00FF);
WriteUSART(M2data >> 8);
WriteUSART(M2data & 0x00FF);
WriteUSART(~Direction);
WriteUSART(~(M1data >> 8));
WriteUSART(~(M1data & 0x00FF));
WriteUSART(~(M2data >> 8));
WriteUSART(~(M2data & 0x00FF));
WriteUSART('E');
}
}

逆アセンブリ結果のアルゴリズム 投稿者:鈴木泰樹 投稿日:2017/04/24(Mon) 13:05:38 No.899

以下のプログラムを逆アセンブルしました。

#include<xc.h>
void main(){
char a, b,c;
a = 11;
b = 13;
a++;
c = a*b;
}

逆アセンブリ結果は以下のようになりました。

0000 280D GOTO 0xD

0001 00FE MOVWF 0x7E
0002 3000 MOVLW 0x0
0003 187F BTFSC 0x7F, 0x0
0004 077E ADDWF 0x7E, W
0005 1003 BCF 0x3, 0x0
0006 0DFE RLF 0x7E, F
0007 1003 BCF 0x3, 0x0
0008 0CFF RRF 0x7F, F
0009 08FF MOVF 0x7F, F
000A 1903 BTFSC 0x3, 0x2
000B 0008 RETURN
000C 2803 GOTO 0x3

000D 300B MOVLW 0xB
000E 0020 MOVLB 0x0
000F 00A2 MOVWF 0x22
0010 300D MOVLW 0xD
0011 00A0 MOVWF 0x20
0012 0AA2 INCF 0x22, F
0013 00FF MOVWF 0x7F
0014 0822 MOVF 0x22, W
0015 2001 CALL 0x1
0016 00A1 MOVWF 0x21
0017 0183 CLRF 0x3

逆アセンブリ結果の乗算のアルゴリズムが分かりません。教えて下さい。お願いします。

Re^3: I2CSlave通信について 投稿者:Gokan 投稿日:2017/04/17(Mon) 09:56:05 No.894

msecオーダーの遅延ということは、受信してから何らかのデータ処理
をしている時間があるということではないでしょうか??
割込み処理で100usec以上かかるようなことは無いと思います。

> Gokan様
> ありがとうございます。
> MasterとSlaveのI2Cを制御するプログラムの遅延時間という事ですが、この場合は、スレーブ用割込み制御レジスタIFS1のSI2C1IF割り込みフラグをクリアするために必要なWait(処理)時間ということでしょうか。
> while(1) //送信要求終了(NACK)を受信するまで繰り返す 
> {
> I2C1TRN = *strx;
> I2C1CONbits.SCLREL = 1;
> IFS1bits.SI2C1IF = 0;
> if(I2C1STATbits.P == 1)break;
> delay_ms(1);
> strx++;
> };
> > これはI2Cの仕様ではなくてMasterとSlaveのI2Cを制御する
> > プログラムの遅延時間次第です。
> > I2C自身の仕様では遅延時間は必要ありません。
> >
> > > PIC24FのI2CのSlave通信について教えてください。
> > > MasterがSlaveからデータを連続で複数取得する場合、Slaveは、データを送信する側としてデータを送る度にWait時間が必要になるのでしょうか。
> > > 100μsのWaitで動作させるとデータが抜けたりしたため、1ms程度まで増やすと正常にデータを受信することができました。
> > > 参考にしたサイトでは、約2ms程度の遅れが必要とありました。
> > >
> > > 仕様的にどうなっているかご教示頂けないでしょうか。
> > > よろしくお願い致します。

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |

- WebForum -