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

Messages - vbaserv

#2
ไม่เคยใช้ compiler ตัวนี้ มันมี preprocessor พวก #if #define ไหมครับ

ผมว่านี่คือจุดเด่นมากๆของ C เลย
#3
อีกหนึ่งทางเลือก ic ที่ทำงานแบบ watchdog 
พวก mcu  รุ่นเก่าที่ภายในไม่มี watchdog มักต้องใช้ ic แบบนี้ เพื่อเพิ่มความเสถียร  น่าจะยังพอหาได้
#6
เห็นมีในอีเบย์ราคาไม่แรง  เลยซื้อมาลอง  ชิปหลักที่ควบคุมการทำงานคือ 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);
/*
*/
}
#7
ไม่รู้ว่าได้ลองกับ eeprom ของ  nxp (philips เดิม  ต้นตำรับของ I2C bus)  ไหมครับ  เป็นอย่างไรบ้าง

ที่คุณกล่าวถึง performance  อยากทราบหน่อยครับ ว่าคุณพิจารณาในแง่ใดบ้าง  (ถ้าเป็นข้อปกปิดของขอบเขตงานคุณ ก็ไม่เป็นไรครับ)
#8
ขอปรบมือให้กับความมุ่งมั่นพยายามในการแก้ปัญหาครับ  เข้าถึง root cause เลย