現在、AndroidとUSBで繋いで動作させるようなものを作ろうと思ってテストしているのですが、PIC初心者なので、うまく動かないのです。
教えてください。
図面は下記のURLにうあげました。また、でんもく会のフォルダにも入っています。
https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B9Enk1l0x0YhZWMwNzI5NjctNDc3Ny00NTIxLTg0ZDYtMjE5MTI2NzlhZmJl&hl=ja
プログラムは石井さんのLED点滅プロジェクトのmain()のところを修正しています。
ざっくり以下のような感じです。SW1を押すとLEDが付いて、SW1がオフで消えるつもりで書いています。
現状の回路だと、RA1がずっとLowのままなんです。
int main( void )
{
...
TRISAbits.TRISA1 = 1; // PORT A1 -> INPUT
TRISBbits.TRISB2 = 0;
...
while (1){
if( PORTAbits.RA1 ==0){
LATBbits.LATB2 = 1;
}
else{
LATBbits.LATB2 = 0;
}
DelayMs(5);
}
}
問題は、RA1が常にLowとなっていて、ボタンを押しても話してもLowのままです。内部プルダウンするとかのレジスタセットがあるのでしょうか?
これ以外のadb接続などは昨日のでんもく会の一人もくもくで確認しました。
よろしくお願いします。
--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com
回路図のR10(5.1K)を取ってしまって、CN3番(RA1)のポートとをプルアップす
る設定、CNPU1=0x08;をTRISBbits.TRISB2 = 0;の下に追加しました。
そうすると、スイッチオフで2.7V、スイッチオンで0Vとスイッチのオンオフで
PICの3番ピンの電圧は変化するようになったのですが、相変わらず、スイッチに
関係なく、PORTAbits.RA1が 0 のまま変化しません。
うーん、分かる方、よろしくお願いします。
(2011/12/12 1:15), たろサ wrote:
> たろサです。
>
> 現在、AndroidとUSBで繋いで動作させるようなものを作ろうと思ってテストしているのですが、PIC初心者なので、うまく動かないのです。
>
> 教えてください。
>
> 図面は下記のURLにうあげました。また、でんもく会のフォルダにも入っています。
> https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B9Enk1l0x0YhZWMwNzI5NjctNDc3Ny00NTIxLTg0ZDYtMjE5MTI2NzlhZmJl&hl=ja
>
> プログラムは石井さんのLED点滅プロジェクトのmain()のところを修正しています。
>
> ざっくり以下のような感じです。SW1を押すとLEDが付いて、SW1がオフで消えるつもりで書いています。
> 現状の回路だと、RA1がずっとLowのままなんです。
> int main( void )
> {
> ...
>
> TRISAbits.TRISA1 = 1; // PORT A1 -> INPUT
> TRISBbits.TRISB2 = 0;
CNPU1=0x08 //追加した
石井です。
こんにちは。
ご回答させて頂きます。まずは、解決方法ですが、
初期化部に一つレジスタ追加していただければと思います。
AD1PCFG = 0xffff; // ★ついか
TRISAbits.TRISA1 = 1; // PORT A1 -> INPUT
TRISBbits.TRISB2 = 0;
上記の説明は、PIC24FJ64GB004 Family Data Sheetの10.2 Configuring Analog Port Pins
にある以下の記載になります。
The AD1PCFGL and TRIS registers control the operation of the A/D port pins.
Setting a port pin as an analog input also requires that the corresponding
TRIS bit beset.
If the TRIS bit is cleared (output), the digital output level (VOH or
VOL) will be
converted.
When reading the PORT register, all pins configured as analog input channels
will read as cleared (a low level).
で、AD1PCFGは初期値 0x0000 のレジスタなので、A/DCに
設定されている、ということになるかと思います。
ご確認下さいませ!
2011年12月12日12:48 たろサ <taro...@gmail.com>:
--
--
石井 康寛 (Yasuhiro ISHII)
ishii.y...@gmail.com
> AD1PCFG = 0xffff; // ★ついか
ありがとうございます。
無事、スイッチのオンオフを取得することができました。
PICはデフォルトでANポートになっているのですね。AD1PCFGレジスタを1に
せっとするとI/Oポートにセットされるということなのですね。
I/Oレジスタがわかってきたので、ポートの初期化関連をinitPeripheral()に
書くようにしました。
後、ADB_init()に戻り値を持たせて、Device Attachに失敗したら-1を返すよ
うにしてみました。それで、失敗時はLEDをチカチカするようにしました。
if( ADB_init()==-1){
while(1){
LATBbits.LATB2 = 1;
DelayMs(200);
LATBbits.LATB2 = 0;
DelayMs(200);
}
}
Device Attachの失敗フラグって、グローバルで持っていたりするのでしょうか?
まぁ、もくもくとゆっくりやりたいと思います。