น้าจี ผมaddไฟล์ลงในโปรตุสใส่ชิปไม่ใด้ครับ แต่ยัดลงบรอดใด้ ผมไม่แน่ใจว่าต้องทำHEXเพื่อใส่ในโปรตุสด้วยหรือเปล่า คือว่าผมอยากลองในโปรตุสก่อนลากสายบนบรอดครับ
น้าจี ผมaddไฟล์ลงในโปรตุสใส่ชิปไม่ใด้ครับ แต่ยัดลงบรอดใด้ ผมไม่แน่ใจว่าต้องทำHEXเพื่อใส่ในโปรตุสด้วยหรือเปล่า คือว่าผมอยากลองในโปรตุสก่อนลากสายบนบรอดครับ
5555+ ผมแสดงสดหมดเลยครับน้า ไม่ได้เล่น simulator เลยครับ น้าทำบน photo broad ก่อนก็ได้ครับสัญญาณขาคันเร่งก็ใช้ VR ปรับจากแหล่งจ่ายไฟ 5V เอาครับต่อแบบ voltage divider ก็ได้ส่วน output ก็ใช้ LED ก็ได้ครับแต่ใส่ R ลดกระแสหน่อยนึงลกสายไม่มากครับลองดูทดลองจริงเลยครับบางที sim ได้แต่ใช้งานจริงไม่ได้หรือบางครั้ง sim ไม่ได้แต่ใช้งานจริงได้ก็มีครับ
น้าจีผมลองแล้วไฟมันติดตลอดเลยครับ ผมต้องกำหนดสถานะเริ่มต้นให้ดับก่อนหรือเปล่าครับ
โอ้ ไม่เข้า 2 วันไปใกลละ
ครับ
เริ่มต้น น้าต้อง สั่งทุกอย่างเป็น Off หมดก่อน
และถ้าเงื่อนไข ไม่เป็นจริง ก็สั่ง Off ใว้ด้วยครับ
ไม่อย่างงั้น มันจะ On ตลอดเพราะไม่มีคำสั่ง ทำงานตอนเงื่อนใขเป็นเท็จ
และค่าคันเร่งก็น่าจะมีการตรวจสอบอยู่ตลอดเวลาและเช็คค่าความแตกต่าง
เพราะว่าช่วงที่เราถอนคันเร่ง ไฟ ไม่ถอยไปที่ 1.0 V ทันที มันจะ Delay ซึ่งขบวนการช่วงนั้น
ลมน้าจะหมดก่อนที่จะ เฟี๊ยว ครับผม
แก้ไขครั้งล่าสุดโดย Yanyong : 25-06-2012 เมื่อ 08:58
ครับน้า เด๋วลองดูครับ ไปไหนมาครับไปเที่ยวมาหรือครับ เผื่อผมด้วยนะครับ
ลองไปต่อวงจรลองให้หน่อยครับน้าของผมบอร์ดเกลือขึ้นเจ๊งไปแล้วครับ ผมเอา boost sensor เข้ามาเป็นเงือนงำ เอ้ย เงื่อนไขในการเปิดด้วยครับหลักการคล้ายน้ายงครับ
int padalsensor=0; // the number of the analog pin for recrive signal from padalsensor(analog pin 0)
int boostsensor=1; // the number of the analog pin for recrive signal from boostsensor(analog pin 1)
int solenoildPin = 13; // the number of the solenoildPin pin
int padalvalue=0;
int padalvalue1=0;
int boostvalue=0;
//-----------------------------------------Setup_Function---------------------------
void setup()
{
pinMode(solenoildPin, OUTPUT); // initialize the solenoild pin as an output:
}
//--------------------------------------------loop_function---------------------------
void loop()
{
//----------------------------------------------read sensor-------------------------------
boostvalue=analogRead(boostsensor);
padalvalue=analogRead(padalsensor); //อ่านค่าจาก sensor ขาคันเร่ง มาเก็บที่ padalvalue
delay(1000); // wait 1 sec.
padalvalue1=analogRead(padalsensor); //อ่านค่าจาก sensor ขาคันเร่ง มาเก็บที่ padalvalue1
if(padalvalue1>=padalvalue) //ถ้าสัญญาณจากคันเรงค่าที่สองมากกว่าสัญญาณขาคันเร่งค่าที่1ซึ่งหมายถึงช่วงที่เรากดคันเร่ง ให้สั่งปิด solenoild
{digitalWrite(solenoildPin,LOW);}
else if(padalvalue1<padalvalue&&(boostvalue>625))
{digitalWrite(solenoildPin,HIGH); //ถ้าสัญญาณจากคันเรงค่าที่สองมากกว่าสัญญาณขาคันเร่งค่าที่1และสัญญาณจาก boost sensor มากกว่า 3V หรือประมาณ 15 psi ให้สั่งเปิด solenoild ประมาณ 1 sec
delay(1000);}
}
ดูแล้วก็จากไปแบบเงียบๆ ระดับเทพเขาคุยกัน
ลองตั้งค่า เงื่อนใขการเริ่ม
- ตรวจสอบคันเร่ง ที่1
- หน่วงเวลา 200 ms
- ตรวจสอบคันเร่ง ที่2
- ถ้าคันเร่งที่ 2 น้อยกว่าคันเร่งที่ 1 อยู่ 0.5 V { ทำงาน }
เอาไปทั้งยวงเลยครับ
นี่ของที่ใช้อยู่จริง ๆ เลยครับ
น้า เป็น Mikro C ใช่ใหม ?
*** ล่างสุดผมเขียนเพื่อลด MAP ใช้งานกับ ระบบ LPG ลดค่าลงเพื่อให้น้ำมันลดการฉีด
ไม่งั้นไม่ได้ 14-15 โลลิตรแน่นอน
***ถ้าไม่กดคันเร่งเร็ว ๆ ภายใน 25*10 ms =250 ms
จะทำงานระบบลด Map ถ้ากด ตามเงื่อนไข จ่ายย้ำมันเต็มที่ เพราะ สั่ง จูน Map ขึ้นรอใว้แล้ว
** อ. ต้น ที่หาคน ทำให้อยู่ ไม่ได้ซักที ก็ เอาไปใช้ พลาง ๆ ได้ครับ รับรอง
เพราะลองแล้วครับ
//////////////// UPDATE 05-03-2012 ///////////// ///// /1/2012 ///////////////
//////////////// PIC18F4620 ///////////////
//////////////// UPDATE 08-03-2012 /////////////
/* LOAD TO TRITON */
//////////////// UPDATE 15-03-2012 /////////////
//////////////// UPDATE 18-03-2012 /////////////
//// ONLY UP RAIL AND MAP NOT TO UP PEDAL ////
#include <built_in.h>
#define beep1 PORTC.F2 //BC548 BUZZER 5V
#define temp_relay PORTB.F1 // on off Air temp 1 &2
/* ********** CHANGE MODE SW PORTB.F0 ********** */
unsigned long int vout1,vout2,rail_in, map_in,
rail_ref,map_ref,pedal1,pedal2,pedal3,pedal_in,pedal;
char y=0,valible=0,i4=2,y1=0;
///**** Kick down control Rail & Map ****///
const char rail_conf = 0x10; //Channel A nonBuffered x2Gain
const char map_conf = 0x90; //Channel B nonBuffered x2Gain
const char SHDN = 0x00; //Channel A & B Output = High Impedance
void DAC_OUT(char config,int output)
{
PORTC.F0=0; // Enable Chip Select
SPI_Write(config+Hi(output));
SPI_Write(Lo(output));
PORTC.F0=1; // 'DAC output refreshed at this point
}
void beep()
{
beep1=1; delay_ms(2);beep1=0;
}
void beep2()
{
beep1=1; delay_ms(10);beep1=0;delay_ms(90);
}
void beep3()
{
beep1=1; delay_ms(150);beep1=0;delay_ms(150);
}
void rail_up()
{
// if(PORTB.F0==0){i4++; beep2();delay_ms(100);}// NORMAL ON 4.5V
// if(i4>4){i4=0;}
// if(i4==1){valible=0;}
// if(i4==2){valible=20;}
// if(i4==3){valible=40;}
// if(i4==4){valible=80;}
// if(i4==0){valible=0;beep2();i4++;}
{
if(rail_in<317){vout1=rail_ref-valible;}// < 1.55 V
else if((rail_in>=317)&&(rail_in<327)){vout1=rail_ref-(7+valible);}//1.55-1.613
else if((rail_in>=327)&&(rail_in<337)){vout1=rail_ref-(12+valible);}//1.613-1.657
else if((rail_in>=337)&&(rail_in<348)){vout1=rail_ref-(17+valible);}//1.657-1.687
else if((rail_in>=348)&&(rail_in<358)){vout1=rail_ref-(21+valible);}//1.687-1.75
else if((rail_in>=358)&&(rail_in<368)){vout1=rail_ref-(25+valible);}//1.75-1.8
else if((rail_in>=368)&&(rail_in<378)){vout1=rail_ref-(29+valible);}//1.8-1.89
else if((rail_in>=378)&&(rail_in<389)){vout1=rail_ref-(33+valible);}//1.89-1.995
else if((rail_in>=389)&&(rail_in<399)){vout1=rail_ref-(37+valible);}//1.995-2.029
else if((rail_in>=399)&&(rail_in<409)){vout1=rail_ref-(41+valible);}//2.029-2.102
else if((rail_in>=409)&&(rail_in<419)){vout1=rail_ref-(44+valible);}//2.102
else if((rail_in>=419)&&(rail_in<429)){vout1=rail_ref-(40+valible);}//2.102
else if((rail_in>=429)&&(rail_in<440)){vout1=rail_ref-(36+valible);}//2.102
else if((rail_in>=440)&&(rail_in<450)){vout1=rail_ref-(32+valible);}//2.102
else if((rail_in>=450)&&(rail_in<460)){vout1=rail_ref-(28+valible);}//2.102
else if((rail_in>=460)&&(rail_in<470)){vout1=rail_ref-(24+valible);}//2.102
else if((rail_in>=470)&&(rail_in<481)){vout1=rail_ref-(20+valible);}//2.102
else if((rail_in>=481)&&(rail_in<491)){vout1=rail_ref-(16+valible);}//2.102
else if((rail_in>=491)&&(rail_in<650)){vout1=rail_ref-(12+valible);}//2.102
else{vout1=rail_ref-(8+valible);}
}
}
void map_up()
{
if(map_in>245&&map_in<333){vout2=(map_ref+40);}
else if(map_in>=333&&map_in<419){vout2=(map_ref+50);}
else if(map_in>=419&&map_in<505){vout2=(map_ref+60);}
else if(map_in>=505&&map_in<591){vout2=(map_ref+90);}//569
else if(map_in>=591&&map_in<677){vout2=(map_ref+100);}//640
else if(map_in>=677&&map_in<777){vout2=(map_ref+110);}//711
else{vout2=map_ref;}
}
void input_sensor()
{
if(PORTB.F0==0){i4++; beep3();delay_ms(250);}// NORMAL ON 4.5V
if(i4>4){i4=0;}
if(i4==1){vout1=rail_ref;}
if(i4==2){valible=15;rail_up();}
if(i4==3){valible=40;rail_up();}
if(i4==4){valible=80;rail_up();}
if(i4==0){valible=0;beep3();i4++;}
rail_in=Adc_read(0);
rail_ref=rail_in*2;
map_in=Adc_read(1);
map_ref=map_in*2;
map_up();
}
void dac_output()
{
if(map_in>=777||vout2>1555){vout2=1555;}
DAC_OUT(rail_conf,vout1); // Output on channel A
DAC_OUT(map_conf,vout2); // Output on channel B
}
void counter_t()
{
y++;
if(y<25){pedal1=Adc_Read(2);}
if(y==25){pedal2=Adc_Read(2);}
if(y>25){y=0;}
delay_ms(10);
}
void main()
{
TRISA=0XFF;
TRISC=0X00;
TRISB=0X01;
PORTB=0x00;
PORTC=0x00;
TRISC.F0=0; // Chip select line set to output
Spi_Init(); // Initial Spi
PORTC.F0=1; // Disable Chip Select
DAC_OUT(SHDN,0);
beep3();beep2();beep3();
while(1)
{
counter_t();
{
if(pedal2>pedal1+40)
{
loop3: y1++;
input_sensor(); dac_output();
pedal3=Adc_Read(2);
temp_relay=1;
if(y1>10){beep2();y1=0;}
while(pedal3>=pedal2){goto loop3;} //**************************//
}
else {
input_sensor();
if(i4<=2){ vout2=map_ref-122;temp_relay=0;} //only for safe petrol
else{temp_relay=1;}
dac_output();
}
}
}
}
แก้ไขครั้งล่าสุดโดย Yanyong : 27-06-2012 เมื่อ 09:47
น้าจี น้ายงครับ โคลงงานไกล้ประสบผลสำเร็จแล้วครับ ติดอยู่นิดเดียวครับ ผมลองแก้โค๊ดเป็นร้อยรอบแล้วครับ คือว่าอย่างนี้ครับ
ตอนเบิ้ลวอลลุ่ม(คันเร่ง)มันโอเคครับ เบิ้ลแล้วปล่อย โบว์อ๊อฟเิปิดแล้วปิดตามเวลาที่ตั้งใว้ครับ แต่มีปัญหาตรงที่ เวลาเร่งวอลลุ่ม(คันเร่ง)ค้างใว้ มันเปิดปิด เปิดปิด ตามเวลาที่ตั้งใว้เลยครับและตลอดเวลาครับ จนกว่าจะถอนคันเร่งก็จะกลับมาปิดครับ งงงงมากครับ ลองแก้โค๊ดต่างๆแล้วครับ ผมงงตอนที่แช่คันเร่งใว้ แล้วโปรแกรมมันวนมาอ่าน มันจะอ่านนะเวลานั้นเป็นpedalแรกหรือเปล่าครับ
int padalsensor=0; // the number of the analog pin for recrive signal from padalsensor(analog pin 0)
int solenoildPin = 13; // the number of the solenoildPin pin
int padalvalue1=0;
int padalvalue2=0;
//-----------------------------------------Setup_Function---------------------------
void setup()
{
pinMode(solenoildPin, OUTPUT); // initialize the solenoild pin as an output:
}
//--------------------------------------------loop_function---------------------------
void loop()
{
//----------------------------------------------read sensor-------------------------------
padalvalue1=analogRead(padalsensor); //อ่านค่าจาก sensor ขาคันเร่ง มาเก็บที่ padalvalue1
delay(500); // wait 1 sec.
padalvalue2=analogRead(padalsensor); //อ่านค่าจาก sensor ขาคันเร่ง มาเก็บที่ padalvalue2
if(padalvalue2>=padalvalue1) //ถ้าสัญญาณจากคันเรงค่าที่สองมากกว่าสัญญาณขาคันเร่งค ่าที่1ซึ่งหมายถึงช่วงที่เรากดคันเร่ง ให้สั่งปิด solenoild
{digitalWrite(solenoildPin,LOW);}
if(padalvalue2<padalvalue1)
{digitalWrite(solenoildPin,HIGH); //ถ้าสัญญาณจากคันเรงค่าที่สองมากกว่าสัญญาณขาคันเร่งค ่าที่1และสัญญาณจาก boost sensor มากกว่า 3V หรือประมาณ 15 psi ให้สั่งเปิด solenoild ประมาณ 1 sec
delay(500);}
}
แก้ไขครั้งล่าสุดโดย pokneed : 27-06-2012 เมื่อ 22:08
ในขณะนี้มี 1 ท่านดูกระทู้อยู่. (0 สมาชิกและ 1 ผู้เยี่ยมชม)
Bookmarks