Un grand pas pour Vincent !! ... et un petit pas pour l'avancement de mon interface-bulle. Sa m'a pris toute l'après midi de faire marcher ce circuit mais, si simple soit'il, je suis ansé fière du résultat. Le plus long fut de trouver comment faire fonctionner les Input du PIC et surtout comment récupérer des données 8bit grâce a eux.
Donc maintenant, cette petite plaque est équipée de 6 cellules photosensibles, 6 diodes, et un PIC (le petit micro contrôleur noir) qui est programmé pour traduire les variations d'intensité lumineuse captées par les cellules en différentes fréquence d'impulsion qu'il envoi aux diodes. Et c'est exactement ce que je voulais (ouaip !).
Premiers pas 14 / 02 / 2006 | 0 commentaires | Electronique

Voici a quoi ressemble le programme en C qui tourne dans le PIC 8bit, c'est vraiment tout bête comme programme mais quand on sais pas ... c'est quand même dure a metre en place :
[code = c]#include <16F88.H>
#device ADC=8
#fuses INTRC, NOWDT, NOPROTECT, NOBROWNOUT, PUT, NOLVP, NOMCLR
#use standard_io(B)
#use delay(clock = 8000000)
#define OUT_1 PIN_B0
#define OUT_2 PIN_B1
#define OUT_3 PIN_B2
#define OUT_4 PIN_B3
#define OUT_5 PIN_B7
#define OUT_6 PIN_B4
#define IN_1 0
#define IN_2 1
#define IN_3 2
#define IN_4 3
#define IN_5 4
#define IN_6 5
void main(){
int count;
int delay;
setup_oscillator(OSC_8MHZ | OSC_INTRC);
setup_port_a( sAN0 | sAN1 | sAN2 | sAN3 | sAN4 | sAN5 | sAN6 );
setup_adc( ADC_CLOCK_INTERNAL );
count = 0;
output_high(OUT_3);
while(TRUE){
//---------------------------------
//#1
set_adc_channel( IN_1 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_1);
//output_low(OUT_1);
}
//---------------------------------
//#2
set_adc_channel( IN_2 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_2);
//output_low(OUT_2);
}
//---------------------------------
//#3
set_adc_channel( IN_3 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_3);
//output_low(OUT_3);
}
//---------------------------------
//#4
set_adc_channel( IN_4 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_4);
//output_low(OUT_4);
}
//---------------------------------
//#5
set_adc_channel( IN_5 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_5);
//output_low(OUT_5);
}
//---------------------------------
//#6
set_adc_channel( IN_6 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_6);
//output_low(OUT_6);
}
delay_ms(1);
output_low(OUT_1);
output_low(OUT_2);
output_low(OUT_3);
output_low(OUT_4);
output_low(OUT_5);
output_low(OUT_6);
count += 1; //incrasing this number incrases the frequency
}
}[/code]
[code = c]#include <16F88.H>
#device ADC=8
#fuses INTRC, NOWDT, NOPROTECT, NOBROWNOUT, PUT, NOLVP, NOMCLR
#use standard_io(B)
#use delay(clock = 8000000)
#define OUT_1 PIN_B0
#define OUT_2 PIN_B1
#define OUT_3 PIN_B2
#define OUT_4 PIN_B3
#define OUT_5 PIN_B7
#define OUT_6 PIN_B4
#define IN_1 0
#define IN_2 1
#define IN_3 2
#define IN_4 3
#define IN_5 4
#define IN_6 5
void main(){
int count;
int delay;
setup_oscillator(OSC_8MHZ | OSC_INTRC);
setup_port_a( sAN0 | sAN1 | sAN2 | sAN3 | sAN4 | sAN5 | sAN6 );
setup_adc( ADC_CLOCK_INTERNAL );
count = 0;
output_high(OUT_3);
while(TRUE){
//---------------------------------
//#1
set_adc_channel( IN_1 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_1);
//output_low(OUT_1);
}
//---------------------------------
//#2
set_adc_channel( IN_2 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_2);
//output_low(OUT_2);
}
//---------------------------------
//#3
set_adc_channel( IN_3 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_3);
//output_low(OUT_3);
}
//---------------------------------
//#4
set_adc_channel( IN_4 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_4);
//output_low(OUT_4);
}
//---------------------------------
//#5
set_adc_channel( IN_5 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_5);
//output_low(OUT_5);
}
//---------------------------------
//#6
set_adc_channel( IN_6 );
delay_ms(1);
delay = read_adc();
if(count%delay == 0){
output_high(OUT_6);
//output_low(OUT_6);
}
delay_ms(1);
output_low(OUT_1);
output_low(OUT_2);
output_low(OUT_3);
output_low(OUT_4);
output_low(OUT_5);
output_low(OUT_6);
count += 1; //incrasing this number incrases the frequency
}
}[/code]
Aucuns message n'a été écrit à ce sujet pour l'insant ...