Ένα δοκιμαστικό project ενός gear indicator,
από ότι είπε ο φίλος σε αυτό το θέμα http://www.hlektronika.gr/forum/showthread.php?t=59296 το αυτοκίνητο-μηχανή του βγάζει κάποιες συγκεκριμένες τάσεις,
1st gear = 1.782v
2nd gear = 2.242v
3rd gear = 2.960v
4th gear = 3.630v
5th gear = 4.310v
6th gear = 4.660v
Neutral = 5.000v
για να αναγνωριστούν και να δείξουν τη ταχύτητα υπάρχει στο κιβώτιο ταχυτήτων.
Ο μ/ε είναι ο pic16f506 χρονισμένος στα 4Mhz με το εσωτερικό ρολόι του
το σχέδιο.
gear_indicator.jpg
Ο κώδικας σε ccs, για κατέβασμα http://www.2shared.com/file/5a-bie6b/code.html
Κώδικας:
#include <16F506.h>
#device adc=8
#FUSES NOWDT
#FUSES INTRC_IO
#FUSES NOPROTECT
#FUSES MCLR
#FUSES IOSC4
#use delay(clock=4000000)
void display(int8 gear_out)
{
const int8 segment[7] = {63,12,91,94,108,118,119};
int8 show;
switch (gear_out)
{
case 1: show=segment[1];
break;
case 2: show=segment[2];
break;
case 3: show=segment[3];
break;
case 4: show=segment[4];
break;
case 5: show=segment[5];
break;
case 6: show=segment[6];
break;
default : show=segment[0];
break;
}
if (show & 64) output_high(PIN_B1);
else output_low(PIN_B1);
output_c(show & 63);
}
void main()
{
int8 gear,i;
setup_adc_ports(AN0_AN2);
setup_adc(ADC_CLOCK_DIV_16);
setup_comparator(NC_NC_NC_NC);
set_adc_channel(0);
delay_us(50);
for (i=0;i<7;i++)
{
display(i);
delay_ms(200);
}
output_c(0);
for (i=0;i<10;i++)
{
output_toggle(pin_b1);
delay_ms(100);
}
while(1)
{
gear = read_adc();
if (gear>245) display(0);
else if ((gear>=0)&(gear<=97)) display(1);
else if ((gear>=97)&(gear<=122)) display(2);
else if ((gear>=122)&(gear<=163)) display(3);
else if ((gear>=163)&(gear<=204)) display(4);
else if ((gear>=204)&(gear<=227)) display(5);
else display(6);
delay_ms(100);
}
}
Και ένα video με την δοκιμή της εξομείωσεις
με το που πάρει τροφοδοσία κάνει ένα self-check για την ένδειξη καλής λειτουργίας.