【きむ茶工房ガレージハウスの掲示板】

FC2BBS

15234

誹謗、中傷、虚偽情報や商用目的・宣伝目的等の利用と判断した場合は削除する事があります。

名前
件名
メッセージ
メールアドレス
URL
アイコン
文字色
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

コンパイルでエラー - junjun

2018/02/05 (Mon) 22:34:27

LCDモジュールを使いたくて勉強中のjunjunです。
「秋月電子I2C接続小型LCDモジュールに表示を行う」をコンパイルすると、こんなエラーが発生しました。
:: warning: (1273) Omniscient Code Generation not available in Free mode
../../Desktop/PIC/1822lcd/LCD8x2.c:56: error: (237) function "_InterFunction" redefined
../../Desktop/PIC/1822lcd/LCD8x2.c:64: error: (237) function "_main" redefined
翻訳すると「(1273)全モードコード生成はフリーモードでは利用できません」となります。
MPLAB side v3.35とxc8(v1.45)を使用していますが、フリーモードでもなんとかなりませんでしょうか?

Re: コンパイルでエラー - きむしげ

2018/02/08 (Thu) 13:45:43

こんにちは、junjunさん。

私のHPでは全てフリーモードを使用しています。
>error: (237) function "_main" redefined
これは"_main"が再定義されている事を意味し、
コンパイルしているプログラムソース内で"main"関数が複数有ると言っています。
って事はプロジェクト(Source File)内にLCD1.c/LCD16x2I.c/LCD8x2.c等のファイル
全て取り込んでコンパイルしていませんか?
実行させたいファイルどれか一つでコンパイルしましょう。

Re:コンパイルでエラー - junjun

2018/02/10 (Sat) 00:14:21

きむしげ 様
ご連絡ありがとうございます。junjunです。
必要なファイルだけでコンパイルしましたら、BUILD SUCCESSFULがでました。(^^)
DSPラジオのTune電圧からCh表示するためにLCDの勉強を先週から始めました。先は長いと思いますが、努力してみます。

ADコンバータの処理 - yuu

2018/02/06 (Tue) 16:52:08

初めまして。最近Arduinoについて勉強を始めたyuuと申します。いつも貴殿の記事を参考にさせていただいております。

早速ですが、「A/Dコンバータ MCP3208(SPI)を利用しA/D変換を行う」の以下の処理についてどういったことをしているのかを具体的に教えていただけませんでしょうか?
d1 = SPI.transfer( 0x06 | (channel >> 2) ) ;
d1 = SPI.transfer( channel << 6 ) ;
d2 = SPI.transfer(0x00) ;

よろしくお願い致します。

Re: ADコンバータの処理 - きむしげ

2018/02/08 (Thu) 13:49:04

こんにちは、yuuさん。

ADC_analogRead(ss,channel)関数を何も気にしないで
そのまま使ってくれれば良いのですが...
その記述はMCP3208とSPIで送受信する為の通信構成です。
これは、MyHPに"制御ビットの詳細"と言う事で記載しています。
これによれば、指定チャンネルを送信しそのアナログ値を受信する為に
ダミーデータd2 = SPI.transfer(0x00) ;を送っています。
これを理解する為にはまず、SPI通信を勉強して下さい。
SPIの送信受信が解れば"制御ビットの詳細"が理解出来るのでは
と思いますので。m(_ _)m
http://www.geocities.jp/zattouka/GarageHouse/micon/SPI/SPI.htm

HEFについて - ノラネコ

2018/01/09 (Tue) 18:51:59

HEFの使い方について貴殿の記事を参考にさせていただきました。
いや~、HEFの使い方の参考になるようなHPなかなかなくて助かりました。

当方CCS Cで組んでおりますが、何の気なしにEEPROMのつもりでコードを書いてたらEEPROMにアクセスする命令自体がコンパイラにはねられてEEPROMとまるで扱いの違うものだと気づくまでちょっとはまりました。

実験しながらAN1673やPICのマニュアルを読んでいたらHEFメモリは該当アドレスの下位8ビットのみ高耐久であるという記述がありまして、実験では14ビットデータを読み書きはできましたが、高耐久メモリとして使えるのは8ビットまでなんですね。

プログラムメモリの書き換え用のインターフェースが1ブロック32ワードごととかで、1バイト単位の書き換えをちょこちょこやるような使い方だとメモリの寿命をガンガン潰していく件とか、同じピン数でEEPROMの石に替えた方がいいのかちょっと頭を悩ませています。

これからも参考にさせていただきますね。

Re: HEFについて - きむしげ

2018/01/10 (Wed) 10:32:58

こんにちは ノラネコさん

HEFメモリは扱いずらいですよね。
8PのPICなら16F18313をお勧めします。

12F1822によるLED点滅制御(点灯、消灯別々)ー動作しています ヒデ

2018/01/05 (Fri) 17:31:28

動作しました。
大変ありがとうございました。
プログラムをいただいてから、私用でPICに携われない期間があり、また、分からないまま動作させても・・・と思いいろいろ実験していて報告が遅くなってしまいました。
そのままのプログラムで見事に動作しています。
超初心者の私にはまだ分からないところだらけです。
特にアナログの複数入力の部分難しいです。
簡単なプログラムは自分で作れるよう頑張ります。
分からないときはまた質問させてください。
本当にありがとうございました。



Re: 12F1822によるLED点滅制御(点灯、消灯別々)ー動作しています - きむしげ

2018/01/06 (Sat) 11:42:03

こんにちは
動作確認していないプログラムを提供し一抹の不安があったのですが、
動作しているそうでぇ何よりです。
12F1822の各周辺機能がPICの基本とも言えますので
少しずつでも頑張ってモノにして行って下さい。

pic i2c skI2cmaster.cについて。 五莉

2017/12/20 (Wed) 10:32:17

こちらでは、はじめまして五莉と申します。
件の137行目にある、
if (i=len) SSP1CON2bits.ACKDT = 1 ; // ACKデータはNOACK
このif(i=len)は、必ず真になると思います。

Re: pic i2c skI2cmaster.cについて。 - きむしげ

2017/12/20 (Wed) 13:53:39

こんにちは、はじめまして五莉さん
ご指摘ありがとうございます。
if(i==len)ですね、修正して置きました。

HEFについて - るんく

2017/12/02 (Sat) 04:09:00

初めまして。
PIC16F1503のHEF領域をデータ領域として使いたく思い貴サイトを参考にさせていただきました。ありがとうございます。

そこで質問です。
HEF内の目的のアドレスにあらかじめデータ(初期値)を入れておきたいのですが、どのようにすればいいのかお伺いしたいです。
記事内の方法では、プログラム中に書き込むことはできますが、
本プログラムでは実行中で書き換えることがあるので、電源を入れる度に初期値に戻ってしまわないようにしたいです。
ご教授の程よろしくお願いします。
ちなみに、使っているのはPICkit3、MPLAB X、XC8です。

Re: HEFについて - きむしげ

2017/12/11 (Mon) 10:13:47

初めまして、るんくさん
農作業がまだまだ忙しくて、返事遅れてすみません。
プログラムを2本に分けて見たらいかがでしょう?
初期値を書き込むだけのプログラムと
実行中に書き換える本番のプログラムです。

Re: HEFについて - るんく

2017/12/13 (Wed) 02:08:53

お返事ありがとうございます。一発で入れられるのなら嬉しいのですが、今はその方法がいいかもしれないですね…

その場合には、1つ目にデータを書き込むプログラムを入れて一回だけ実行する。
そのあとに、2つ目のプログラムで書き込む際にどうしたらデータを入れた領域を保持出来ますか?

Re: HEFについて - きむしげ

2017/12/14 (Thu) 13:16:09

>どうしたらデータを入れた領域を保持出来ますか?

 ”Project Properties”で設定を行うのですがぁ
 ここでの説明は面倒なのでぇ
 記事にして置きましたのでそちらを参考にして下さい。
 (ってかぁ、記事から説明が抜けていましたねm(_ _)m)

Re: HEFについて - るんく

2017/12/14 (Thu) 14:06:29

ありがとうございます!

質問です - グスマン

2017/12/12 (Tue) 18:28:15

こんにちわ
きむしげさんにミカンを格安で売ってくれって言ったら、
分けて貰えることはないですよね?
JAの縛りとかがありそうです。

Re: 質問です - きむしげ

2017/12/14 (Thu) 13:05:46

こんにちは グスマンさん
今年は全部収穫し出荷してしまいました。
現在肥料まきを行っている最中です。

ページの誤字報告 - 通りすがり

2017/11/10 (Fri) 13:36:18

音声合成LSI(ATP3011F4-PU)の通信モードについての表で、SMOD0/SMOD1とするべき所がPMOD0/PMOD1となっていましたのでご報告差し上げます。
(=^・^=)

http://www.geocities.jp/zattouka/GarageHouse/micon/TalkIC/ATP3011.htm

Re: ページの誤字報告 - きむしげ

2017/11/20 (Mon) 11:12:33

誤字報告ありがとうございます。
修正して置きました。

Arduinoのインプットを増やせました - necobit URL

2017/08/09 (Wed) 18:57:40

はじめまして。
http://www.geocities.jp/zattouka/GarageHouse/micon/circuit/HC165.htm
こちらのページを参考に、74HC166でもインプットを増やせました!
非常にわかりやすく為になる資料をありがとうございます。
166で同じように動作させるにあたって備忘録を書きました。
http://necobit.com/2017/08/hd74lv166a-74hc166-arduino.html
コード丸ごと転載+編集は失礼だと思いますので、
記事では一部抜粋としておりますが、問題がありましたら
ご連絡頂けますでしょうか。
宜しくお願い致します。

Re: Arduinoのインプットを増やせました - きむしげ

2017/08/13 (Sun) 22:41:19

こんばんは

下の方の質問の所にも
トップページの最後にも
「ソフトウエアについて
 当サイトのソフトウエアは特に記述が無い限りPDS  (Public Domain Software)とします。
 作権表示義務無し。商用利用、改造、自由。連絡不要と します。
 役立ててやって下さい。」
って書いている通りに好きに扱ってもらって構いません。

Re: Arduinoのインプットを増やせました - necobit URL

2017/10/02 (Mon) 00:06:10

記述を見落としていて失礼いたしました。
このページのおかげで一つ新しいことを覚えられ
とても勉強になりました。ありがとうございます。

CCPのコンペアトグル - PIC初心者

2017/09/09 (Sat) 14:31:57

初めまして。AVRマイコンは経験があるのですが、PICを始めたばかりの初心者です。壁にぶつかっています。アドバイスお願いします。

【やりたいこと】
PIC16F1705で、CCP1のコンペアモードのトグル出力を使用して、LEDを1秒ごとに点滅させたいのです。コンペアトグルモードとは、TMR1とCCPR1が一致したときに出力が反転する機能だと推定しています。


【現 状】
RC2(8)ピンの波形を見ますと、約2秒ごとに1回、4usON/4usOFFのパルスが連続4セット出ています。あとは0Vです。

#pragma config FOSC = INTOSC // 他のconfigは掲載省略
void main()
{
OSCCON = 0b01011010 ; // 内部クロックは1MHzとする
ANSELA = 0b00000000 ; // デジタルI/Oとする
ANSELC = 0b00000000 ; // デジタルI/Oとする
TRISA = 0b00000000 ; // ピン(RA)は全て出力に割当てる(RA3は入力専用)
TRISC = 0b00000000 ; // その他のピンは出力に割当てる
PORTA = 0b00000000 ; // RA出力ピンの初期化(全てLOWにする)
PORTC = 0b00000000 ; // RC出力ピンの初期化(全てLOWにする)

T1CON = 0b00110001; // FOSC/4, 1/8,sync,start
TMR1GE = 0;
RC2PPS = 0b00001100 ; // connect CCP1 to RC2(8)
CCP1CON= 0x02;//0b00000010 ; // compare toggle
CCPR1L = (15624 & 0xff) ; // 1sec
CCPR1H = (15624 >> 8) ;
while(1);
}

Re: CCPのコンペアトグル - 通りすがりの菅井きん URL

2017/09/11 (Mon) 17:34:36

きむしげさんが何という回答をするかは分かりませんが、
初心者でしたらCCPなんて使わず、エルチカなら単純にdelayを使いましょう。
モーターを使いたい、LEDの明るさを可変したいので、
どうしてもCCPというなら、もう少し詳しく要望を書きましょう。
とツッコミを入れておきます。

Re: CCPのコンペアトグル - PIC初心者

2017/09/11 (Mon) 21:15:54

通りすがりの菅井きんさん、ありがとうございます。

やりたいことは、最終的にはLED Tikerではなくて、CCPのトグルを習得したいのです。(PWM3やCCPのPWMモードでは、Lチカはできました。)

AVRなどのマイコンでのプログラムの経験はありますので、ペリフェラルの理解が足りないと自覚しています。


昨日から少し進んで、今時点でこうじゃないかと思っているのは、PICマイコンのタイマはTMR1H、TMR1Lを初期値としてアップカウントしていき、オーバーフロー割り込みルーティンでリロードしないといけないような感じがしてきました。(理解力の問題で、データシートから読み取れませんでした。)

このあたりがどうやらAVRマイコンと異なるような感じです。もうちょっと、格闘してみます。
コメントありがとうございました。

Re: CCPのコンペアトグル - 通りすがりの菅井きん URL

2017/09/12 (Tue) 16:30:57

きむしげさんの記事
(可変抵抗のツマミを回してLEDの明るさを可変します)であります。
これは読んだようですね。
リロードなんてしないはずですが、フラグbit(CCP1IF)は初期化&クリアしなければいけないかも知れません。
http://www.electronicwings.com/pic/pic18f4550-timer-compare-mode
↑のプログラムを読み直しましたが、タイマー(TMR1)もクリアしていますね。
見落としで、済みません。訂正します。

Re: CCPのコンペアトグル - PIC初心者

2017/09/16 (Sat) 16:23:02

通りすがりの菅井きんさん、こんにちは。

新しい16F1705を仕入れてきて(前のは別のプログラムを書き込んで組み込んじゃいましたので)、アドバイスいただいたように、朝からいろいろ試してみました。

状況は次のような感じです。
①TMR1はリロードする場合には、割り込みルーティンでリロードする。しなければ、65536カウントになる。

②CCPR1とTMR1が一致しても、TMR1がクリアされない。CCP1出力もトグルしない(なぜか?)。代わりに4パルス出る(??)

③今回はリロードしないので、周期は正確に1秒にすることはできない。また、割り込みでリロードすると厳密に時間(周期)を合わせるのが困難(特にアセンブラ以外)なので、今回はやらない。

④先のプログラムにTMR1の初期値をロードしても、初回のカウントアップに関係するだけで、その後は16ビット(65536)カウントするだけなので、TMR1をどんな値にしても動作は変わらない。

⑤CCPR1はどんな値であっても、TMR1と同じ値になったときに働こうとするので、TMR1をリロードしない限りCPPR1はどんな値にしても動作は変わらない。

⑥CPP1IFをクリアしたが、動作は変化なし。

⑦結局、半日以上いろいろやってみたが、トグル動作できない。

ご紹介のきむしげさんの記事の件はすでに試しております。リンクの記事も読んできましたが、割り込みでTMRをリロードしているので、ハードウェアで動かすように正確にはなりません。

トグルがうまく動かせないので、ハードウェアなみに正確な分周比、デューティ50%を得ることができません。

Re: CCPのコンペアトグル - 猛牛ロック

2017/09/18 (Mon) 20:31:08

横レス失礼します。
データシートを読む限り、CCPxMで
<トグルモード>(出力セット、クリアモードも同じ)
ピンはトグルされる。同時にフラグが立つ。しかし、タイマーをリセットする機能は無い。
なので、フラグを監視して、自分でタイマリセットをする必要がある

<自動変換トリガモード>
タイマーはリセットされるが、ピンは制御出来ない。

という感じです。
なので、タイマー(0xffff)が約2s周期なので、約2s毎にCCPR1を通り過ぎる度にトグルする、というのがプログラムされた正しい動作だと思います。
ですが、「4usON/4usOFFのパルスが連続4セット」は訳が分かりません。
(4us+4us)×4の時間は「タイマーがCCPR1の数値になっている間」のような気がします。プリスケーラが1/8ですから。
この間に8回トグルしたと考えるのが時間的に見て適当だと思いました。

では、何かのレジスタの設定が悪かったのか?と調べてみると
16F18325/18345のエラッタより、
When the CCP is configured in Compare mode using the ‘toggle output on match’ setting
(CCPxMODE<3:0> bits = 0010) and the reference timer is set for an input clock prescale other than 1:1,
the output of the CCP will toggle multiple times until finally settling a ‘0’ logic level. To avoid this, the timer
input clock prescale select bits must be set to a 1:1 ratio (TxCKPS = 00).

これでしょうね。1705のエラッタには何も載っていませんけど。

Re: CCPのコンペアトグル - PIC初心者

2017/09/18 (Mon) 21:59:21

猛牛ロックさん、こんばんは。横レスありがとうございます。

ご指摘のとおり、T1conのプリスケラを1/1にしたところ、期待通りのDuty50%の出力が出ました。

OSCCONで500kHzにすると、計算通り1.04秒周期、50%になりました。

16F1705のエラッタは見ていたのですが、他のデバイスのエラッタに記載されていたなんて・・・。

スッキリしました。どうもありがとうございました。
とても感謝です。

今日は、午前中は庭の手入れ、午後からPICで別のプログラムをしていました。16F1769でうまく書き込んだりできないと散々悩みましたが、諦めかけたころ、X IDEのバージョンが古いことに気づき、バージョンアップしたところうまく動作しました。PICの指南サイトで、X IDEのリンクからそのままDLしたのですが、それがかなり古いバージョンだったようです(10日ほど前にDLしたのですが)。

トグルもうまくいって気分がいいです。
AVRに比べて、PICのペリフェラルの充実ぶりの魅力に惹かれています。(AVRコアにPICペリフェラルが組み合わさると個人的には最高なのですが)


猛牛ロックさん、通りすがりの菅井きんさん、皆さん、ありがとうございました。


Copyright © 1999- FC2, inc All Rights Reserved.