Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - vbaserv

#1
เห็นมีในอีเบย์ราคาไม่แรง  เลยซื้อมาลอง  ชิปหลักที่ควบคุมการทำงานคือ TEA5767 เป็นระบบ  FM ที่เล็กจริงๆ ไม่ต้องใช้ทั้ง if transformer,coil,variable C   โค๊ดตัวอย่างก็พอหาได้จาก ccs forum  ผมเพิ่มส่วนรับค่าเพื่อสั่งงานชิปผ่าน  RS232 เหตุที่ทำก็เพราะ register (ที่ควบคุมการทำงานทั้งหมด) ของชิปตัวนี้มี 5 byte   แต่หลายบิทก็ควบคุมไปแต่ละอย่าง  การทดลองเปลี่ยนค่าแต่ละบิทแล้ว compile,upload code  ไม่น่าจะสนุกนัก

ตัว ic TEA5767  ติดต่อได้ทั้งแบบ i2c และ  spi  แต่สำหรับโมดูลนี้เขา fix เป็นแบบ i2c 

หมายเหตุ การซื้อฃองราคาถูกในอีเบย์ คงตั้งความหวังสูงไม่ได้ 
จากที่ซื้อ 4 บอร์ด จาก 2 seller พบว่า 2 บอร์ดใช้งานได้ perfect  1 บอร์ดรับสัญญาณได้น้อยอย่างน่าผิดหวัง  อีก 1 บอร์ดเงียบสนิท


// compiler CCS 4.x
#define onsim 0
#define useintclk 1
#define startf 88
//#define stopf 95
//#define startf 88.25
#define stopf 108
#define incf 0.5
//#define incf 0.25

#define hw 2525
#define swspi 1
#define op1 4 // 3=tst fm 4=tst232
#define op2 2 // printf option 1=\n 2=, in 1line csv
#if onsim==1
#define dl1 2 //1
#else
#define dl1 200 //50 too fast //200 ok op1=1
#endif

#if hw==2525
#include <18F2525.h>
#if useintclk==1
#fuses INTRC_IO, NOFCMEN,NOIESO,NOWDT, NOBROWNOUT, PUT, NOLVP
#fuses NOLPT1OSC,NOPBADEN
#use delay(clock=4000000)
#else
#fuses XT, NOFCMEN,NOIESO,NOWDT, NOBROWNOUT, NOPUT, NOLVP
#fuses NOLPT1OSC,NOPBADEN
#use delay(clock=9600000)
#endif

#if op1==4
#use i2c(master, sda=PIN_C4, scl=PIN_C5,slow)
#else
#use fast_io(c)
#use fast_io(b)
#endif
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //, ERRORS)

#endif

unsigned char frequencyH=0;
unsigned char frequencyL=0,fh,fl,fl0,
dat3,dat4,dat5;
unsigned int16 frequencyB,frb;  //int got 8
double frequency=0,x1; //32bit
int8 i=0,raw_frame[10],index=0, tmp;
int1 immeflg=0, serialflg=0,srchflg=0,srchflgdw=0;

#LOCATE frb=0x30  //

// a-b-c-d order as int32
#byte fh=0x31
#byte fl=0x30

void tea_setup(){
//tst cmnd
i2c_start();
// i2c_write(0x60); //adres om te schrijven
i2c_write(0xC0); //adres om te schrijven
i2c_write(raw_frame[0]); //frequencyH
i2c_write(raw_frame[1]); //frequencyL);
i2c_write(raw_frame[2]); //0xB0);
i2c_write(raw_frame[3]); //0x10);
i2c_write(raw_frame[4]); //0x00);
i2c_stop();
// output_toggle(PIN_C0);
delay_ms(2000);
// rd back
i2c_start();
// i2c_write(0x60); //adres om te schrijven
i2c_write(0xC1); //adres om te schrijven
fh=i2c_read();
fl=i2c_read();
dat3=i2c_read();
dat4=i2c_read();
dat5=i2c_read(0);
i2c_stop();
fh=fh &0b00111111; //requi
dat3=dat3 &0b01111111; // for if cnt
dat4 >>=4;
#if op2==1
//@# xl ok rcv printf("\nx1=%f",x1);
// printf("\nx1=%g",x1); //?dif
printf("\n%2x",fh);
printf("\n%2x",fl);
// printf("\n");
// printf("\n%2x %2x",x1);
printf("\n%2x",dat3);
printf("\n%2x",dat4);
printf("\n__"); //mark end
#endif
}
void tea_wr(int8 srchup,mono,srchlevel){
int8 by3=0,by4;
if (mono==1) by3=by3+0x08;
if (srchup==1) by3=by3+0x90; //hi side inject
// if (srchup==1) by3=by3+0x80; //also lo side inject
if (srchlevel==1) by3=by3+0x20; //as pdf
if (srchlevel==2) by3=by3+0x40;
if (srchlevel==3) by3=by3+0x60;
//for srch up
printf("\n%Lx ",frb);
if (srchup==1)
frb=frb+10; // 10
else
frb=frb-10;
printf(" ; %Lx ",frb);
// @# locate 16bit var
i2c_start();
i2c_write(0xC0); //adres om te schrijven
i2c_write(fh+0x40);
i2c_write(fl);
// if (srchup==1)
// i2c_write(fl+10); //frequencyL);
// else
// i2c_write(fl-10); //frequencyL);
i2c_write(by3);
i2c_write(0x10);
i2c_write(0x00);
i2c_stop();

}
void tea_rd(){
// rd back
fl0=fl; //sav val
i2c_start();
// i2c_write(0x60); //adres om te schrijven
i2c_write(0xC1); //adres om te schrijven
fh=i2c_read();
fl=i2c_read();
dat3=i2c_read();
dat4=i2c_read();
dat5=i2c_read(0);
i2c_stop();
fh=fh &0b00111111;
dat3=dat3 &0b01111111; // for if cnt
dat4 >>=4;
#if op2==1
//@ # xl ok rcv printf("\nx1=%f",x1);
// printf("\nx1=%g",x1); //?dif
printf("\n%2x",fh);
printf("\n%2x",fl);
// printf("\n");
// printf("\n%2x %2x",x1);
printf("\n%2x",dat3);
printf("\n%2x",dat4);
printf("\n__"); //mark end
#endif
#if op2==2
printf("\ncurr f= %2x %2x",fh,fl);
printf(",%2u",dat3);
// printf(",%2x",dat3);
printf(",%2x",dat4);
printf(", dif fl=%x, fl0=%x",fl-fl0,fl0);
#endif
}

#INT_RDA
void serial_isr() {
int8 in_char,i;

restart_wdt();
   in_char =getc();
if (index==0) {
if (in_char==254) {
srchflgdw=1;
goto quit1;
}
if (in_char==255) {
srchflg=1;
goto quit1;
}
}

raw_frame[index]=in_char;
index++;
if (index==5) {
//dump
// for (i=0;i<10;i++) printf(" %c",raw_frame[i]);
for (i=0;i<5;i++) printf(" %x",raw_frame[i]);
printf(" index= %u\n",index);
tmp=0; serialflg=1;
index=0;
goto quit1;
}

quit1:
tmp=0;

}

void main() {
int8 dig7,seg7;
// tmp=0;
delay_ms(10);
setup_adc(adc_off); setup_comparator(NC_NC_NC_NC);
set_tris_c(0b10011110);
clear_interrupt(INT_RDA);
enable_interrupts(INT_RDA);
enable_interrupts(global);
#if op1==4
while(1){
// printf("x");
if (serialflg){
printf("y");
tea_setup();
// delay_ms(100);
serialflg=0; index=0;
}
if (srchflg){
tea_rd();
delay_ms(100);
tea_wr(1,1,1); // int8 srchup,mono,srchlevel
srchflg=0;
}
if (srchflgdw){
tea_rd();
delay_ms(100);
tea_wr(0,1,1);
srchflgdw=0;
}
delay_ms(1000);
}
#endif
#if op1==3
set_tris_c(0b00011110);
// frequency=91.3; //starting frequency
// frequency=102.1*1000000; //starting frequency
x1=startf; //105.5; //93.5;
nx1:
frequency=x1*1000000; //starting frequency
// frequencyB=4*(frequency*1000000+225000)/32768; //calculating PLL word
//t got some
//as goog  if at rx mixer 10.7M
// frequencyB=4*(x1*1000000+225000)/32768; //calculating PLL word
frequencyB=4*(frequency+125000)/32768; //calculating PLL word
frequencyH=frequencyB>>8; // =get b15-b8 store in frequencyH
frequencyL=frequencyB&0XFF;
tmp=0;
//         byteInput[j] >>= 1;
        //shift right 1bit 0 fill in
#if onsim==0
i2c_start();
// i2c_write(0x60); //adres om te schrijven
i2c_write(0xC0); //adres om te schrijven
i2c_write(frequencyH+0x40); // add 40h seem not much good?
i2c_write(frequencyL);
i2c_write(0xB0);
i2c_write(0x10);
i2c_write(0x00);
i2c_stop();
output_toggle(PIN_C0);
delay_ms(2000);
goto nx3c;
// rd back
i2c_start();
// i2c_write(0x60); //adres om te schrijven
i2c_write(0xC1); //adres om te schrijven
fh=i2c_read();
fl=i2c_read();
dat3=i2c_read();
dat4=i2c_read();
dat5=i2c_read(0);
i2c_stop();
nx3c:
fh=fh &0b00111111;
dat3=dat3 &0b01111111; // for if cnt
dat4 >>=4;
        //shift right 1bit 0 fill in
#endif

x1=x1+incf; //0.5;
if(x1>stopf) {
x1=startf;
tmp=0;
}
goto nx1;
while(1){}
#endif
// output_b(0);
set_tris_b(0b01100111);
set_tris_c(0b00000110);
output_high(pin_b3);
i=1;  //tst as led running by 1led ON multi shield bd


delay_ms(2000);
/*
*/
}
#2
ถ้าจำไม่ผิด electoday โฉมเก่านี่ใช้ระบบของ smf  ใช่ใหมครับ  โฉมใหม่ใช้ระบบของอะไรครับ ดูทันสมัยดี  (ผมใช้ firefox นะ)

ถ้าเป็นการย้ายระบบด้วย ก็ขอชมเชย admin ละครับว่าย้าย database มาได้แหล่มมาก  รู้สึกกระทู้ยังคงครบถ้วน
#3
บอร์ดแสดงผล พร้อม โมดูล LED 6 หลัก  โดยแบ่งเป็น 15 segment 5 หลัก-สีเขียว  7 segment 5 หลัก-สีแดง  โดยหลักที่6 จะเป็น LED  ด้านบน-ขวา และล่างตามรูป    รับค่าที่จะให้แสดงผลผ่าน RS232 แบบ TTL level  (หากจะต่อกับ PC คุณต้องต่อ max232 เพิ่มเพื่อแปลง level ก่อน) ทำให้โปรเจคต์ของคุณลดภาระของ mcu ในการแสกน 7segment แสดงผล 









รูปแบบข้อมูล ที่ส่งให้บอร์ดนี้เป็นดังนี้

-รูปแบบที่หนึ่ง  17byte
byte meaning   
0   byte 0 สำหรับส่วน bar led ด้านล่าง ส่งเป็นค่า 0 ถึง 32
1   byte ที่ 1 ถึง 5 สำหรับ led ดังแสดงในรูป
2   
3   
4   
5   
6   byte ที่ 6 ถึง 10 สำหรับส่วน 7segment ส่งเป็นค่า ascii ของตัวเลข 0 to 9 และ space
7   
8   
9   
10   
11   byte ที่ 11 ถึง 15 สำหรับส่วน 15segment ส่งเป็นค่า ascii ของตัวเลข 0 to 9  A to Z และ space
12   
13   
14   
15   
16   
17   0xFE  เพื่อบอกการจบสตรีมคำสั่ง

-รูปแบบที่สอง 2byte  สำหรับส่วน bar graph led   สามารถส่งจาก rs232  ได้เร็วถึงระดับ 1/10 วินาที  จึงสามารถแสดงผลเคลื่อนไหวแบบ vu meter ได้
byte meaning   
0   byte 0 สำหรับส่วน bar led ด้านล่าง ส่งเป็นค่า 0 ถึง 32
1   0xFE  เพื่อบอกการจบสตรีมคำสั่ง

บอร์ดทำงานโดย mcu pic 16F  74HC595  4 ตัว  และ UDN2981  รับค่า rs232 แบบ TTL level
(หมายเหตุ เนื่องจาก UDN2981 ไม่ใช่ constant current led driver  หากมีการแสดงผลทุก ทุกหลัก  ความสว่างของ LED จะมีการ เปลี่ยนแปลง   หากโปรเจคต์คุณซีเรียสเรื่องนี้ สอบถามเพิ่มเติมได้ครับ)

ราคา 550 บาท

หากคุณมีโมดูล LED  นี้อยู่แล้ว  จะสั่งซื้อเฉพาะบอร์ด ไม่รวม โมดูล LED ก็ได้ ราคา 450 บาท
ค่าจัดส่งทางไปรษณีย์ลงทะเบียน 40 บาท

ตัวอย่างการแสดงผล



#4
ไอซีสั่งงานสโคป goodwill instek ด้วยรีโมทคอนโทรล เพิ่มความสะดวกการใช้งาน

ในสโคปรุ่นประหยัด เช่น GDS-806s การตั้งค่าบางอย่างจะเป็นแบบวนรอบ ผ่านระบบเมนูและปุ่มกดของตัวสโคป ตัวอย่างเช่น  การตั้งชนิดของ trigger  รูปแบบวนรอบของสโคปรุ่นนี้จะเป็น  auto  ,auto level ,normal ,single  ขณะกำลังทดสอบวงจรชิ้นหนึ่ง  หากส่วนใหญ่ใช้การทริกแบบ normal  ในบางขณะอาจต้องใช้แบบ auto  แต่เมื่อจะกลับมาใช้แบบ normal อีก  คุณต้องกดผ่าน auto level ก่อน ทำให้ระดับ level การทริกถูกเปลี่ยนไป   หากข้อจำกัดแบบนี้ทำให้คุณทดสอบงานไม่สะดวกเท่าที่ควร  โมดูลนี้คือคำตอบครับ

feature:  สั่งตั้งค่าเหล่านี้ได้ด้วยการกดปุ่มเดียวบนรีโมตอินฟราเรด  ไม่ต้องเข้าระบบเมนู-ปุ่มกดของสโคปอีก

1.สั่งให้ทริกจาก ch1 ch2 หรือ external 
      โดยปุ่มบนรีโมทที่แมพไว้คือ ปุ่ม 4  5  6
2.สั่งให้ทริกจาก  rising edge หรือ falling edge
      โดยปุ่มบนรีโมทที่แมพไว้คือ ปุ่ม 7  8
3.สั่งให้ทริกแบบ normal,auto หรือ single
      โดยปุ่มบนรีโมทที่แมพไว้คือ ปุ่ม 1  2  3
4.สั่งให้แสดงตำแหน่งทริกบนจอชิดด้านซ้ายหรือด้านขวา  หรืออยู่ตรงกลาง  (ปกติของสโคปรุ่นนี้  การปรับตำแหน่งทริกบนจอจะใช้ปุ่มหมุนปรับ  แต่ค่อนข้างช้าไม่ทันใจ) 
      โดยปุ่มบนรีโมทที่แมพไว้คือ ปุ่ม left, ok, right

5. สั่งให้สโคปมี sampling rate ที่ 50000 point   สโคปซีรีย์นี้เมื่อตั้งโหมดการทำงานด้าน  horizontal เป็น roll   เมื่อกลับมาเป็นแบบทริกปกติ   sampling rate  ยังคงเป็น 500 point ตามโหมด roll 
      โดยปุ่มบนรีโมทที่แมพไว้คือ ปุ่ม menu
6. สั่ง save หรือ recall  การตั้งค่าของตัว scope ไว้ใน setup memory ช่องที่ 3 และ 4
      โดยปุ่มบนรีโมทที่แมพไว้คือ ปุ่ม red  green [save #3 #4]  yellow blue [recall #3 #4]

หากต้องการใช้กับสโคปยี่ห้ออื่นๆที่มี port RS232  ลองส่ง RS232 command manual (คุณอาจต้องค้นหาจากเวปของผู้ผลิตว่ามีการเผยแพร่ไว้หรือไม่)  มาให้เราวิเคราะห์ได้ครับ
ราคา 250 บาท เฉพาะ mcu pic 14pin ที่โปรแกรมแล้ว
ค่าจัดส่งทางไปรษณีย์ลงทะเบียน 35 บาท

หากต้องการใช้งานกับรีโมทที่คุณมีอยู่แล้ว ลองส่งรูป-รุ่นมาได้ครับ  หากทางเรามีข้อมูลของรีโมทรุ่นนั้น ก็สามารถแมพค่าปุ่มใหม่ได้  ในขณะนี้แมพใช้กับรีโมททีวี toshiba CT-90336 หรือใกล้เคียง

และแจก hex file สำหรับ lite version ให้คุณเบิร์นโค๊ดเอง โดยมีฟีเจอร์เฉพาะข้อ 1,2,3
https://drive.google.com/file/d/0B4F39tmZe1dDelRIYTBTSGEwV3M/view?usp=sharing

วงจรของโมดูลนี้


#5
ขอประชาสัมพันธ์หน่อยนะครับ  สินค้าผลิตในประเทศครับ
บอร์ดรับสัญญาณอินฟาเรดรีโมตคอนโทรล และถอดรหัสเป็น ASCII Code ส่งออก RS232
ราคา 200 บาท
http://www.pantipmarket.com/mall/mycontrol?node=products&id=236422

บอร์ดรับสัญญาณอินฟาเรดรีโมตคอนโทรล และถอดรหัสเป็นสัญญาณ logic 4 หรือ 8 channal
ราคา 250-300 บาท
http://www.pantipmarket.com/mall/mycontrol?node=products&id=292516
#6
ขอปิดกระทู้ครับ
ไม่ทราบว่ามีท่านใดมีประสบการณ์ใน field การทดสอบตัว IC โดยใช้ ATE (automatic test equipment) tester ยี่ห้อ SPEA  บ้างใหมครับ  สามารถพัฒนาโปรแกรมบน tester นี้ได้   หากสนใจโทรคุยเพิ่มเติมได้ที่