pyonmae の回答履歴
- H8S/2552Fにおけるプログラミング
現在イエローソフト社のH8S/2552F USB-IF CPUボードを用いて,I/Oポートから32bitトルグスイッチの状態を出力しようとしています。それらのデータをシフトしつつ外部SRAMに送り、さらに32bitのデータとしてPCに取り込みたいと考えているのですが、その方法がわかりません。 以下に現状のプログラムを載せさせて頂きました。(間違いがあるのは十分承知です…) どなたか教えて下さい。よろしくお願い致します。 #define PORT4 (*((volatile unsigned char *)0xFFFFB3)) #define PORT9 (*((volatile unsigned char *)0xFFFFB8)) #define PORTH (*((volatile unsigned char *)0xFFFA14)) #define PORTJ (*((volatile unsigned char *)0xFFFA15)) unsigned long in_switch(void) { return (PORTJ <<24); return (PORTH <<16); return (PORT9 <<8 ); return (PORTJ | PORTH | PORT9 | PORT4) ; } void main() { puts("トグルスイッチテストプログラム"); while (1) { unsigned long data; printf("リターンキーで現在のスイッチ状態を表示します。"); fgetc(stdin); //リターンキー入力待ち data = in_switch();//スイッチの状態を入力 printf("現在のスイッチ状態=%d(H'%02X)\n", data, data); //スイッチ状態表示 } }
- PICマイコンで、ピンが足りません。
PICでちょっとした電子工作をしています。 18pinのPICを使い、スイッチの組み合わせを適宜変更し出力する回路としてを組んでいます。 PortA(8pinを全て入力/全ピンpullup) PortB(8pinを全て出力) スイッチが1~8まであり、例えば1のスイッチが押された場合、3のスイッチが押されたことにして出力するというような、 スイッチの組み合わせを変更する機能を持たせます。 このスイッチの入出力組み合わせを複数持たせることが今回の目的です。 ロータリースイッチを使い8種類の設定ができる用にするとして、割り当て設定用として新たに3ピンが必要です。 ですが、上記のようにPortAB共に全ピン利用しており、単純に割り当てることが出来ません。 これをどうにかして、利用済みのピンと共存させ18pinで済ませることができないでしょうか。 スイッチの組み合わせは、PIC起動したら変更されることがありません。 ですので、PIC起動時に一度だけロータリースイッチの状態を読めばいいことになります。 なお出力の先につながる回路は、プルアップされたアクティブローの入力端子です。
- 締切済み
- その他(プログラミング・開発)
- bel-ray
- 回答数3
- pcのファンノイズを小さくしたいのですが
pcに無指向性のiPod・iPhone用ミニマイクを使って http://www.otaskk.jp/shopdetail/003001000003/order/ ファンの音を集めて逆位相の音をスピーカーから出したら ファンノイズは小さくなりますか?
- ベストアンサー
- その他(プログラミング・開発)
- ufb93975
- 回答数2
- AVRのサーボ制御で困っています。
AVRマイコンを用いてサーボを8個制御するプログラムをC言語で作っています。使っているマイコンはATmega64LでサーボはフタバのS3003、AVRstudio4.17とAVR-GCCを用いてコンパイルやシュミレートをしています。 プログラムはサーボを8個動かすために タイマ2の比較一致割り込みで2.5msの周期をつくり タイマ0の比較一致割り込みで0.5ms~2.5msのパルスをつくり main関数でサーボの角度を制御するというものです。サーボ8個の角度の保持にはグローバル変数を用いています。 「サーボ初期位置→サーボ2個移動して固定」はうまくいくんですが「サーボ初期位置→※サーボ2個移動→さらに他のサーボ2個移動→はじめに動かしたサーボ2個を初期位置へ」というプログラムを書いたら、なぜか※をつけた「サーボ2個移動」の部分が実行されずその次の行動から実行されてしまいます。これはAVRに書き込んで確認したもので、シュミレータで確認するためにwait()などの待つ処理を除いてシュミレートしてみたのですが、「サーボ2個移動」の2行を飛ばして実行してしまっています。 具体的に飛ばされている部分は後述のソースコードのdo{・・・}while(1);の中の servopos[FR_LEG]=31; servopos[RL_LEG]=31; で、do{・・・}while(1);の無限ループはservopos[FR_JOINT]=70;からservopos[RL_LEG]=94;を無限ループしています。 電気回路、C言語ともに初心者なので見当がつかず、いろいろ試したり調べてみてもわかりませんでした。 質問は「なぜこのようにプログラムを数行飛ばして実行してしまっているのか」です。ソースコードの指摘をしていただけると有り難いです。 ソースコード #include <avr/io.h> #include <avr/interrupt.h> #define RL_JOINT 0 #define FR_JOINT 1 #define FL_LEG 2 #define RL_LEG 3 #define FL_JOINT 4 #define RR_JOINT 5 #define RR_LEG 6 #define FR_LEG 7 uint8_t phase=0; uint8_t servopos[8]={94,94,94,94,94,94,94,94}; /* void wait(uint16_t w){ while(w--){ volatile uint16_t i=200; while(i--); } } */ ISR(TIMER2_COMP_vect){ PORTC=0x00; TCNT0=0; } ISR(TIMER0_COMP_vect){ PORTC |= (1<<phase); OCR0 = servopos[phase]; phase++; if(phase>7){phase=0;} } int main( void ){ //ポート設定 DDRC=0xFF; PORTC=0x00; //タイマ0設定 OCR0 = 94; TCCR0 |= (1<<WGM01)|(1<<CS02)|(1<<CS00); TIMSK |= (1<<OCIE0); //タイマ2設定 OCR2 = 79; TCCR2 |= (1<<WGM21)|(1<<CS22); TIMSK |= (1<<OCIE2); // 全体割り込み許可 sei(); do{ // wait(10000); servopos[FR_LEG]=31; servopos[RL_LEG]=31; // wait(1000); servopos[FR_JOINT]=70; servopos[RL_JOINT]=70; // wait(1000); servopos[FR_LEG]=94; servopos[RL_LEG]=94; }while(1); }
- 9年前のノートPCを復活させようか悩んでます
FMW-BIBLO MF5/600R 9年前のノートPCがあります。 3年前から使ってなく、新しいPCでも購入しようかと思ったのですが、 予算もないのでこのノートを復活させようか思案中です。 ネットは光が開通しておりますが、何せ9年前の商品ですので 動作的にどうなのか心配で。。。 OSは3年前にXPを再インストールしてあります。 その後は未使用で、そのうち子供が遊びで使いだし、 キーボタンが数個紛失となり完全におもちゃ用になってしまいました。 キーボードを交換して再使用するだけの値打ちがあるものかどうか。。。 みなさまのご判断をお聞かせください。 製品情報のURLを添付します。
- 変数の大きさを超える代入
現在作っているプログラムで、一定時間ごとに変数に一定値が 加算され続けるような場所があります。 基本的にはint型の最大値を超えることはまずないのですが、 C言語やC++でたとえばint型で宣言した変数に対し、x++; のように一定周期ごとに記述して加算してゆき、最大値である、 +2147483647を超えた場合、xには何が代入されているんでしょうか。 -2147483648~+2147483647が範囲ですから、一周して、 最低値である-2147483648に加算されてゆくことになるのでしょうか? それとも、超えることが予想される場合、最大値を超えたら0にするなど 明示的に何らかの対処をしたほうがよいのでしょうか。 プログラム的には中身の数値に関してはあまり関係ないので、 その変数型の範囲で不可なく動作するなら問題ありません。 超えることが予想される場合、対処するべきなのか、 放っておいてもよいのかどうかを教えていただきたいです。
- 【PICマイコン】一般製品にPICシリーズが使われてるって本当ですか?
最近PICをはじめて大分アセンブラもなれてきて楽しめるようになってきました。 それで教えてGOOで色々見てるときにPICシリーズのマイコンは一般製品の中にも組み込まれているって書いてあったんですが本当ですか? 僕の中でPICやAVR等はそれなりにコアな趣味を持つ人たちのおもちゃ的な物だと思ってました。 もし本当に入ってるんだったら具体的にどんな製品にどのマイコン(例PIC16F877A等)が使われてるのか教えてください。凄く興味があります。 また、何処のサイトだったか忘れましたが「これからマイコンをはじめるならAVR!PICをやるメリットなし!」ぐらいの勢いで書いてあったんですがその通りなんでしょうか? もひとつ、、PICの勉強をはじめるときにアセンブラかCかで迷ったんですがアセンブラではじめた方がCPUの構造をより理解しやすいとの事でアセンブラで進めてきたんですが、いまいちその実感がわきません。具体的にどういう所でCPUの構造を理解しやすいのでしょうか? それっぽいなぁと思うのはクロックでタイミングを与え、そのタイミング毎に命令を実行しレジスタのBITで条件判断をしたり計算をしたりしてポートに出力する的な部分でしょうか?そもそもCPUの構造ってどういう事なんでしょうか?何て言うか例えて言うならエクセルは仕事で使うから詳しいけどWindowsの設定は全然解りませんみたいな感じです。 よろしくお願いしますm(_)m
- ベストアンサー
- その他(プログラミング・開発)
- midugane
- 回答数3
- AKI/3069FLAN開発ボードでのMESの利用
AKI/3069FLAN開発ボード上にてMESを利用したいのですが、ダウンロードできるのはSH3用のみのようです。H8用のMESのサポートはされていないようです。H8用ですとITRONに移行とのことですが、体験記事の多いH8/3069F用のMESを入手したいのですが、どうしても検索できず困り果てています。 同上用のMESをダウンロードできるサイトをご紹介くだされば幸いです。
- 締切済み
- その他(プログラミング・開発)
- eichkamp
- 回答数4
- AKI/3069FLAN開発ボードでのMESの利用
AKI/3069FLAN開発ボード上にてMESを利用したいのですが、ダウンロードできるのはSH3用のみのようです。H8用のMESのサポートはされていないようです。H8用ですとITRONに移行とのことですが、体験記事の多いH8/3069F用のMESを入手したいのですが、どうしても検索できず困り果てています。 同上用のMESをダウンロードできるサイトをご紹介くだされば幸いです。
- 締切済み
- その他(プログラミング・開発)
- eichkamp
- 回答数4
- MS-DOSで一定の規則に沿ってフォルダ名を変更しながらコピーする方法は?
以下のような操作を行いたいのですが、良い方法が思い浮かびません。 思いついた方がいらっしゃったら、ご教示いただければ幸いです。 よろしくお願いします。 【概要】 Aserverのcommonフォルダから3階層下のフォルダに入っているファイルを、 一定の規則に沿ってフォルダ名を変えながら自分のクライアントのcommonフォルダにコピーする。 【詳細】 コピー元:\\Aserver\common\(不規則な名前)\(不規則な名前)\A01234567\*.* ⇒ A01234567の部分のフォルダ名は、アルファベット1文字+数字6桁または数字8桁。 コピー先:C\:common\A01\A012345\*.* ⇒ コピー元のA01234567の部分のフォルダ名から、 まず最初のアルファベット+数字2桁を取り出してフォルダを作り、 さらにその中にアルファベット+数字6桁のフォルダを作り、 そのフォルダの中にコピー元のファイルをコピーする。
- 締切済み
- その他(プログラミング・開発)
- noname#174176
- 回答数2
- AKI/3069FLAN開発ボードでのMESの利用
AKI/3069FLAN開発ボード上にてMESを利用したいのですが、ダウンロードできるのはSH3用のみのようです。H8用のMESのサポートはされていないようです。H8用ですとITRONに移行とのことですが、体験記事の多いH8/3069F用のMESを入手したいのですが、どうしても検索できず困り果てています。 同上用のMESをダウンロードできるサイトをご紹介くだされば幸いです。
- 締切済み
- その他(プログラミング・開発)
- eichkamp
- 回答数4
- AKI/3069FLAN開発ボードでのMESの利用
AKI/3069FLAN開発ボード上にてMESを利用したいのですが、ダウンロードできるのはSH3用のみのようです。H8用のMESのサポートはされていないようです。H8用ですとITRONに移行とのことですが、体験記事の多いH8/3069F用のMESを入手したいのですが、どうしても検索できず困り果てています。 同上用のMESをダウンロードできるサイトをご紹介くだされば幸いです。
- 締切済み
- その他(プログラミング・開発)
- eichkamp
- 回答数4
- PIC18のポート入出力
PIC16からPIC18を使おうといろいろ勉強中ですが、PIC18のポートはPIC16と違いLAT*というのがあります。 調べると高速処理時(容量性の負荷)の際の誤動作が防げるということらしいのですがLAT*への出力もPORT*出力も同じことらしいような。 この2つの使い分けは 出力ではLAT* 入力(ポート読み込み)ではPORT*を使うといった感じなのでしょうか? 使い分けはどんな感じなのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- poyo3
- 回答数1
- PIC アセンブラ ポートB 内部プルアップ抵抗の使い方
PIC16F877Aを使っています。 プログラムを作り始めてかなりたってから ポートBにプルアップ用の抵抗があることを知りました。 それで使い方とか調べてみたんですが ポートBで内部プルアップを使う場合は RBを全部入力設定にしないといけない的な事を 書いてるページがありました。 これって、そうしないとPICが壊れてしまうって事でしょうか? RB0~RB3にタクトスイッチ(入力) RB4~RB7に7セグのカソード(出力) として入出力を混ぜて使いたいのですが スイッチ用にポートBをプルアップ抵抗ONにしても問題ないでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- midugane
- 回答数1
- パソコンの電源が入りません
パソコンのファン?の前に布が置いてあるのに気が付かず、2時間程使用してました。 使用中に突然電源が落ち、画面が真っ暗になり… すぐに布をどけて、パソコンの裏を触るとすごく暑い!! その後電源コードを抜いてみたり、バッテリーを抜いてみたり… 少し熱が冷めた頃に一度電源を入れてみたら NECと出たのですが、すぐに電源が落ちてしまい それからは全く動きません… パソコン詳しくないし、機械は苦手でどうしたら… 修理とかするしかないんでしょうか? 詳しい方教えてください。
- ベストアンサー
- その他([技術者向] コンピューター)
- butasan001
- 回答数3
- お願いします。
#include<stdio.h> #include<math.h> #define nmax 50 #define n 1000 #define nout 5 #define m 20 #define dfcoef 0.1 int main(void) { int i,j,k,r,dt,dx,it; double a[nmax][nmax*2], b[nmax][nmax],tb[nmax][nmax]; FILE *fq; fq=fopen("kadai4.csv","w"); for(i=0;i<m-1;i++){ //初期値を設定 a[i][m-1]=1.0; } for(it=0;it<=n;it++){ //時間増分するループ dt=1./(double)n; dx=1./(double)m; r=dt/(dx*dx); for(i=0;i<m-1;i++){ //係数行列の設定 a[i][i]=1+2*r; } for(i=0;i<m-2;i++){ a[i][i+1]=-r; } for(i=0;i<m-2;i++){ a[i+1][i]=-r; } for(i=0;i<m-3;i++){ for(j=i+2;j<m-1;i++){ a[i][j]=0.0; } } for(i=0;i<m-3;i++){ for(j=i+2;j<m-1;i++){ a[j][i]=0.0; } } hakidashi(m, a, b); //関数の呼び出し tb[0][0]=0.0; //tbを設定 tb[m][0]=0.0; for(i=0;i<m-1;i++){ tb[i+1][0]=b[i][0]; } for(i=0;i<m+1;i++){ fprintf(fq,"%f\t",tb[i][0]); } fprintf(fq,"\n"); for(i=0;i<m-1;i++){ //時間を進める a[i][m-1]=tb[i+1][0]; } } fclose(fq); return(0); } int hakidashi(double a[][nmax*2],double b[][nmax]) { int i, j, k, ip, jp; double coe, temp; for(ip=0;ip<m-1;ip++){ jp=0; coe=a[ip][jp]; for(j=1;j<m-1;j++){ //枢軸を設定 if(fabs(coe)<fabs(a[ip][j])){ coe=a[ip][j]; jp=j; } } for(j=0;j<m;j++){ //各列を枢軸で割る a[ip][j]=a[ip][j]/coe; } for(i=0;i<m-1;i++){ coe=a[i][jp]; for(j=0;j<m;j++){ //枢軸以外の各列の要素を0にする if(i==ip)continue; a[i][j]=a[i][j]-a[ip][j]*coe; } } } for(j=0;j<m-1;j++){ //単位行列にする for(i=0;i<m-1;i++){ if(a[i][j]==1.0){ for(k=0;k<m;k++){ temp=a[j][k]; a[j][k]=a[i][k]; a[i][k]=temp; } } } } for(i=0;i<m-1;i++){ //解行列を作成 b[i][0]=a[i][m-1]; } } このプログラムを実行するとプログラムを終了しますとでるのですがなぜなのか教えてください。
- 締切済み
- C・C++・C#
- ronald7777
- 回答数5
- VC++ 2008 EXPRESS DIRECTSHOW Win32アプリケーション
VC++ 2008 EXPRESS Win32アプリケーションで任意のウィンドウを開き その中にDirectShowでWEBカメラ画像を表示させたいと思います。 任意のウィンドウには録画開始ボタンなどがあり、ボタンを押すと 録画開始されるようなサンプルとか解説してある場所はありませんか? ネットで調べるとWin32コンソールアプリケーションで画像表示を行うものは ありましたが、任意のウィンドウでのものは見つかりませんでした。 あと、MFCを使用するものもありますがExpressではMFCも使えませんので 使用できません。 何か、良いサイトや書籍がありましたら、ご教授ください。 よろしくお願いします。
- VC++ 2008 EXPRESS DIRECTSHOW Win32アプリケーション
VC++ 2008 EXPRESS Win32アプリケーションで任意のウィンドウを開き その中にDirectShowでWEBカメラ画像を表示させたいと思います。 任意のウィンドウには録画開始ボタンなどがあり、ボタンを押すと 録画開始されるようなサンプルとか解説してある場所はありませんか? ネットで調べるとWin32コンソールアプリケーションで画像表示を行うものは ありましたが、任意のウィンドウでのものは見つかりませんでした。 あと、MFCを使用するものもありますがExpressではMFCも使えませんので 使用できません。 何か、良いサイトや書籍がありましたら、ご教授ください。 よろしくお願いします。
- 対人が苦手ですがプログラマに向いてますか??
はじめまして!! 広島に住む25歳男です。 現在、市内でCEをしています。(2年目) 最近、情緒不安定で対人関係が怖く、客先や職場の人間とスムーズに話をすることができません。常に相手に気を遣いすぎて、自分の思っていることを言葉にするのが困難な時があります。 たまに情緒が安定している時は、比較的普通に話をすることができるのですが、基本的には苦手です。 昔からコミュニケーションが得意な方ではなかったですが、最近は特に顕著で、もしかして精神的な疾患があるのかなと思ってます。 最近、職場の人間関係や仕事に疲れてきて、思い切って転職をしようと思っています。なるべく人と接することが少ない職場が向いていると考えているのですが…。 興味があるものとしてはプログラマーです。コミュニケーションが苦手なので、黙々とコードを書く仕事が向いてるのかなと思っていますが、 どうでしょうか。。 専門学校ではC、JAVA、Perl、VBを勉強していました。決してコードを書くセンスがあるとは思っていませんが、好きか嫌いかと言われたら好きな方だと思います。 一応、資格は基本情報とシスアドを持っています。 皆様のアドバイス、よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- kakari999
- 回答数5
- C言語のプログラミングの解答例又は修正箇所をおしえていただきたいのですが
#include <stdio.h> int main(int argc, char **argv){ int a,b,c,g,r,i,j,ll; int blue,green,red; FILE *fpi,*fpo; unsigned long size,head,width,height,offset; unsigned long comp,isize,ucolor,icolor; unsigned short plane,bitsize; unsigned long wreso,hreso; unsigned char *image; char infile[1024] = "t.bmp"; char outfile[1024] = "g.bmp"; long ww,hh; long w3,h3; unsigned char *img; unsigned char *img2; int bai1,bai2; bai1=1,bai2=3; fpi=fopen(infile,”rb"); for(i=0;i<2;i++){c=getc(fpi);} for(i=0,size=0;i<4;i++){size += (getc(fpi))<<(8*i);} for(i=0;i<4;i++){c=getc(fpi);} for(i=0,offset=0;i<4;i++){offset += (getc(fpi))<<(8*i);} ↑と同じようhead,width,height,plane,bitsize,comp,isize,wreso,hreso,ucolor,icolorを書く(ただしplane,bitsizeはi<2) hh=height*bai1/bai2; ww=width *bai1/bai2; img2 = (unsigned char*)malloc(sizeof(char)*3*ww*hh); for(j=0;j<hh;j++){ for(i=0;i<ww;i++){ int i1,j1,i2,j2; double x,pa,pb,pc,pd,x11,x21,x12,x22; int bb,gg,rr; i1=(i*(width-1))/(ww-1); i2=i1+1; x=(i*(width-1)*1.0)/((double)(ww-1)); pa=x-i1; pb=i2-x; j1=(j*(height-1))/(hh-1); j2=j1+1; x=(j*(height-1)*1.0)/((double)(hh-1)); pc=x-j1; pd=j2-x; x11=(double)img[j1*width*3+i1*3+0;] x21=(double)img[j1*width*3+i2*3+0]; x12=(double)img[j2*width*3+i1*3+0]; x22=(double)img[j2*width*3+i2*3+0]; bb=(((x11*pb+x21*pa)/(pa+pb))*pd+((x12*pb+x22*pa)/(pa+pb))*pc)/(pc+pd); x11=(double)img[j1*width*3+i1*3+1]; x21=(double)img[j1*width*3+i2*3+1]; x12=(double)img[j2*width*3+i1*3+1]; x22=(double)img[j2*width*3+i2*3+1]; gg=(((x11*pb+x21*pa)/(pa+pb))*pd+((x12*pb+x22*pa)/(pa+pb))*pc)/(pc+pd); x11=(double)img[j1*width*3+i1*3+2]; x21=(double)img[j1*width*3+i2*3+2]; x12=(double)img[j2*width*3+i1*3+2]; x22=(double)img[j2*width*3+i2*3+2]; rr=(((x11*pb+x21*pa)/(pa+pb))*pd+((x12*pb+x22*pa)/(pa+pb))*pc)/(pc+pd);; img2[j*ww*3+i*3+0]=(unsigned char)(bb&0xff); img2[j*ww*3+i*3+1]=(unsigned char)(gg&0xff); img2[j*ww*3+i*3+2]=(unsigned char)(rr&0xff); } } w3=ww*3; h3=hh*3; if((w3*3)%4==0){size=offset+w3*h3*3;} else{size= offset+w3*h3*3-(4-(w3*3)%4);} isize = size-offset; fpo=fopen(outfile,"wb"); putc('B', fpo); putc('M', fpo); for(i=0;i<4;i++){putc(((size>>(8*i))&0xff),fpo);} for(i=0;i<4;i++){putc(0x0,fpo);} for(i=0;i<4;i++){putc((((offset)>>(8*i)&0xff),fpo);} ↑と同じようhead,width,height,plane,bitsize,comp,isize,wreso,hreso,ucolor,icolorを書く(ただしplane,bitsizeはi<2) fwrite(&w3 ,sizeof(long),1,fpo); ↑と同じように&h,&offset,&head,&width,&height,&plane,&bitsize,&comp,&isize,&wreso,&hreso,&ucolor,&icolorを書く for(jj=0;jj<3;jj++){ for(j=hh-1;j>=0;j--){ ll=0; for(ii=0;ii<3;ii++){ for(i=0;i<ww;i++){ putc(img2[j*ww*3+i*3+0],fpo); putc(img2[j*ww*3+i*3+1],fpo); putc(img2[j*ww*3+i*3+2],fpo); ll+=3; } } ll=ll%4; if(ll!=0){for(i=0;i<(4-ll);i++)putc(0x0,fpo);} } } printf("Done\n"); fclose(fpo); printf("%s -> %s\n",infile,outfile); }