電子工作日記、その他

趣味の電子工作製作の記録、その他思った事

最新の画像もっと見る

11 コメント

コメント日が  古い順  |   新しい順
N[100]:NG N[101]:OK (kawana)
2014-12-14 20:36:46
下記のProgramでN[100]とN[101]では、N[100]では
最後にゴミが表示される。何がいけないのだろうか??tab記号か?

/* -----------------------------------
data
---------------------------------- */
uint8_t N, DATA[101], I, O, temp, s ;
uint8_t n;
//-------------------------------------

//----- data set -----
data_set100()
{
for(N=1; N<101; N++)
{
DATA[N] = N;// write

PORTB = DATA[N];// disp(DATA[N])
_delay_ms(100);
}

_delay_ms(2000);

for(n=1; n<6; n++)
{
PORTB = 0xFF;
_delay_ms(100);

PORTB = 0;
_delay_ms(100);
}

PORTB = 0x55;
_delay_ms(1000);
}

//----- data disp -----
data_disp100()
{
for(N=1; N<101; N++)
{
PORTB = DATA[N];// disp(read)
_delay_ms(100);
}
_delay_ms(2000);// check reach


for(n=1; n<6; n++)
{
PORTB = 0xFF;
_delay_ms(100);

PORTB = 0;
_delay_ms(100);
}

PORTB = 0xAA;

}

//-------------------------

//***********************************
int main()
{
DDRB = 0xFF;
PORTB = 0;

//----- data set -----
data_set100();
data_disp100();
while(1)
{
;
}
}
//end
返信する
Unknown (傀儡甚内)
2014-12-15 01:20:46
配列変数を宣言するとき、
N[100]と定義した場合は、N[0]~N[99]
N[101]と定義した場合は、N[0]~N[100]
という変数が確保されます。
したがって、N[100]と定義したときはN[100]という変数は使用できません。
確保していないメモリ領域を表示させることになるので、意図しない値(ゴミ)が表示されます。
返信する
100個のdata領域確保は0~99 (kawana)
2014-12-15 11:34:15
明快な説明ありがとうございます。
返信する
2*[N/4]+1 と [N/2]+1 (kawana)
2014-12-15 12:06:13
2*[N/4]+1は、ガウス関数とか言われているやっらしい?
SORTで比較のIntervalを計算する時、この関数を使う。
一見すると[N/2]+1と同じ様に見えるが、数値3~15を
入れて見ると、違いが分かる。
--------------------------
N  I=2*[N/4]+1  I=[N/2]+1
2  1         2
3  1         2
4  3         3
5  3         3
6  3         4
7  3         4
8  5         5
9  5         5
10 5         6
11 5         6
12 7         7
13 7         7
14 7         8
15 7         8

差が有る事がわかる。
返信する
Excelで作成したFlow用紙 (kawana)
2014-12-15 14:37:53
ExcelでFlowchart用紙を作成した。
0.25Pichの極細い横罫線を書いておく、中心に縦の細線
そして、それを中心として左右に2cmの縦線2本、この様紙ならば、定規だけでFLOWが書けた。
処理ブロックは、縦3行、横4cmの四角い箱型のみ。
判断分岐は、横から次処理への分岐線を書いて、
(私が考えた書き易く、分かり易いFLOWCHART)
形にこだわらなければ、書きや易く成るのでは、
昨日1時間くらいかけてFLOWを書いたが、消しゴム跡で
見え易さがダメなので、新しいFLOW用紙で書き直す。
机上デバッグしたら、コ-デイングしてみよう。
3Xで動かすぞ、?
返信する
Binary Sort Program (kawana)
2014-12-16 09:26:40
Binary Sort Programのコ-ディングをした。
Flowの段階で入念にチェックした。

分岐制御の判定の記述子と範囲確認
分岐先の位置、Flagの名前の確認
分岐記述が正しいか、
PORTB = Nで部分確認をした。

Binary Sort Programでは、Shifting処理
(アドレスをさかのぼって比較する。ポイントの確認。)が処理を複雑にしている。

Flowの清書とデバッグに時間を掛けたので
上手く動作すると思う。
返信する
壊れた8P IC Socket (kawana)
2014-12-16 21:15:47
部品箱を整理していた。壊れた8Pソケットが出てきた。
ATTINY10は、確か6Pで有る事を思い出した。
折れた部分をやすりで綺麗にした。基板の余りスペ-スにはんだ付けして、ATTINY10の配線をした。
1PInのPB0, TPIDATAに10k+LED負荷を接続した。
10Kでも書き込みが出来なかった。
PB1/TPICLKに移動した。PB1では、書き込み出来た。
返信する
くだらない考察 (kawana)
2014-12-17 06:20:34
ATTINY10は、Studio6を使用する必要が有る。
ATTINY10のPrograming信号は、TPIDATA、TPICLKに
変更されている。
TPIDATA Pin#1 PB0にLED負荷を接続していると、
Writeする事が出来ない。”1”レベルが低く抑えられてしまう。
(Programを書き込んだ後、負荷を接続する。)
TPICLK Pin#3 PB1ならばOKの様。出力回路の違いか?TPIDATAは、入力Pin共用だからか?
返信する
Binary Sort Program ERRORは無く成るが? (kawana)
2014-12-17 14:39:12
/* --------------------------------
sort.c (Binary Sort)

AVR: ATMEGA168P
CLOCK: 8 Mhz
OSC: Internal RC OSC
data: uint16_t

Author: kawana
Create: 2014/12/13

------------------------------------

I = 2[N/4] + 1

N: DATA COUNT
I: INTERVAL

---------------------------------- */
#define F_CPU 8000000UL

#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>

//-----------------------------------

/* -----------------------------------
data
---------------------------------- */
uint16_t DATA[101], temp;
uint8_t  N, I, LA, HA, n, o, s;
//-------------------------------------

//----- data set -----
data_set100()
{
// ----- data write -----
for(N=1; N<101; N++)
{
DATA[N] =  N;// write

PORTB = DATA[N];// disp(DATA[N])
_delay_ms(50);
}

_delay_ms(2000);
//----- end message1 -----
for(n=1; n<6; n++)
{
PORTB = 0xFF;
_delay_ms(500);

PORTB = 0;
_delay_ms(500);
}

PORTB = 0x55;
_delay_ms(1000);
}

//----- data disp -----
data_disp100()
{
for(N=1; N<101; N++)
{
PORTB = DATA[N];// disp(read)
_delay_ms(50);
}
_delay_ms(2000);// check reach

for(n=1; n<6; n++)
{
PORTB = 0xFF;
_delay_ms(500);

PORTB = 0;
_delay_ms(500);
}

PORTB = 0xAA;
}

//-------------------------
uint8_t I;
//-------------------------

//***********************************
int main()
{
DDRB = 0xFF;
PORTB = 0;

//----- data set -----
data_set100();// set 100 data

data_disp100();// read 100 data

I = 1;

//----- sort start -----
F_1_:
//donothing
if(N==1) goto F_12_;

F_2_:
I = N;

F_3_:
//Interval Calc
I = (I/4)*2+1;
PORTB = I;
_delay_ms(1000);

F_4_:
// Address Calc
LA = 1;
HA = LA + 1;

//F_5_:
// Address Check
//if(HA<=N) goto F_3_;// ≠ over range

F_6_:
// DATA COMPAR
if(DATA[LA] >= DATA[HA]) goto F_8_;//NO memory change

F_7_:
//memory change
temp = DATA[LA];
DATA[LA] = DATA[HA];
DATA[HA] = temp;

F_8_:
// shifting chk
if((LA-I) > 0 ) goto F_13_;//shifting

F_9_:
// next Address
LA = LA + 1;
HA = LA + I;//I:Interval

F_10_:
// HA <= N check
if(HA <= N) goto F_6_;//next compar

F_11_:
// Interva check(I=1?)
if(I==1) goto F_12_;//owari NG*****
goto F_3_;

F_13_:
//shifting calc
LA = LA - I;
HA = LA + I;
goto F_6_;

F_12_:
goto F_12_;
}

//-----------------------------------------

返信する
赤外線リモコン AVR版 (kawana)
2014-12-17 15:38:24
Mr. Chan.氏が6年も前の、2008年に製作されていた。
勉強のため、印刷してみた。
xitoa.sのasmが有るし、難しそう。理解には、半年くらい
かかるかな?
返信する

コメントを投稿