bonjour ,
je souhaite generer un signal de 40khz a l aide d un , sur un carte picdemplus2, compiler c18 et pickit3 en programmer, le tout sur mplab8.87


je pense que mon code a souffert de mes different essai mais je vous le soumet malgre tout ... J'ai de tres gros soucis avec l'utilisation des timer ... malgre les divers sujets lus sur le sujets ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 
 */
#include  <p18f4520.h> //ATTENTION penser a adapter la ref du uC
 
#pragma config OSC = INTIO67, FCMEN = OFF, PWRT = OFF, MCLRE = ON
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config WDT = OFF, DEBUG=ON
 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
#define TRISA_Init		0b00111111			//LEDS (RA6 et RA7 configure en output )
#define TRISB_Init		0b11111110			//RB0 configure en output
#define TRISC_Init		0b00111111			//Toutes les pins configurees en input par mesure de securite
#define	LED_PRESENCE	LATA = 0b10000000	//allume une LED : RA7 allumee et RA6 eteinte
#define	LED_ABSENCE		LATA = 0b01000000	//allume une LED : RA6 allumee et RA7 eteinte
#define Compteur_Pulses_TX_Init 20			//configure le nombre de pulses du compteur 
 
int  	Compteur_Pulses_TX;			//declaration de notre compteur de pulses emis
int  	Compteur_Pulses_RX;			//declaration de notre compteur pulses recus
int 	Compteur_MS_TIMEOUT;		//declaration de notre compteur nombre de cycles complets				///////////////////////////////////////////////////////////////////////////
 
void main(void) 
 
{	OSCCON = 0b01110000;			//configuration du registre de controle de l oscillateur 
	while (!(OSCCONbits.IOFS) )		//quand le bit IOFS (i/o frequency stable)est a 0
	Nop()
	OSCTUNE = 0b01000000;			//configuration du registre de reglage de l oscillateur  :oscillateur interne
	while (!(OSCCONbits.IOFS) )		//quand le bit IOFS (i/o frequency stable)est a 0
	Nop()							//,PLL active, frequence calibree en usine,
//Config des PORT
 
	TRISA = TRISA_Init;  	// initialisation de portA
	TRISB = TRISB_Init;		// initialisation de portB
	TRISC = TRISC_Init;		// initialisation de portC
//config des timer 0 et 1
//Timer0
	T0CON =   0b11000000; 		//Timer0 enable sur 16bits
	INTCON =  0;				//initialisation du registre interuption 0
	INTCON2 = 0b01000000;		//initialisation du registre interuption 2
	TMR0L	= 0b1010;			//
	//TMR0H	= 0;				//
								//
 
//
	T1CON =   0b10000001; 					//  enable en 16 bits
	INTCON =  0;							//initialisation du registre interuption 0
	INTCON2 = 0b100100;						//initialisation du registre interuption 2
//	TMR1L	= 0b11111111;//0b11011011;		//(40 000 000/4)=x; (10cm/34300=y)c'est le temps  pour parcourir 10 cm a la vitesse de la lumiere
//	TMR1H	= 0b11111111;//0b11111110;		//x*y =292 cycles, nous somme sur 16 bits donc 292 = la duree 
											//du timer
///////////////////////////////////////////////////////////////////////////////////////
TMR1H = 0;//initialise le timerH 1
TMR1L = 0;//initialise le timerL 1
 
while(1)
	{ 				///////////////////////////////////////////////////////////////////////////////////
	Compteur_Pulses_TX = Compteur_Pulses_TX_Init;	//initialisation du compteur de pulses emis
	TRISB = TRISB_Init;								// initialisation de portB
 
	// debut de l emission de pulses I0IO.....
	while	(Compteur_Pulses_TX)
		{ 	
			LATB = 0b00000001;				//creation d un pulse I		
 
			LATB = 0;						//creation d un pulse 0
		//	Nop();							//creer de courts delais afin d affiner le signal carre
 
		Compteur_Pulses_TX = Compteur_Pulses_TX -1;		//compte a rebour 20->0 dans l exemple
		}
	// passage en entree 
	TRISB = 0xFF;				// toutes les pins a 1, donc en entree	
	//init du TimeOut
//Timer0
	T0CON =   0b11000000; 		//Timer0 enable sur 16bits
 
	TMR0L = 0; 					//Timer0 low 
	INTCONbits.TMR0IF = 0;		//overflow flag bit a 0
	INTCONbits.INT0IF = 0;		//external interrupt flag bit a 0
	Compteur_MS_TIMEOUT = 500;	//500ms
	Compteur_Pulses_RX = Compteur_Pulses_TX_Init;	// init du cptr de pulses recues à 20, pour decrementer a chaque pulses reçues
 
/*while (Compteur_Pulses_TX)
	{
INTCONbits.TMR0IF == 1;//quand le flag passe a 1
TMR0L = TMR0L +1; 	   //tu incremente le timer 0
}*/	}
}