generer un signal 40khz carre
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:
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
}*/ }
} |