PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : brauche hilfe...



bukurti
09.05.2008, 11:31
bin ganz neu bei diesem thema...
bin ganz ganz am anfang...und probiere um ein quadrocopter...

ich habe ein MPLAB project , das nur für anfanger ist...und probiere diese codesaetze zu verstehen...was wofür geht...
und ichglaube darum brauche ich hilfe...
könnt jemand mir diese kleine codesaetze erklaeren??

ich will erst die gezielt das Verhalten der Motoren ändern.
und die kommunikation zw μC und der Außenwelt umfassend verstehen...

__________________________________________
******************************************

/*#include <stdio.h>*/
#include <p18f4580.h>
#include <math.h>

#pragma config OSC = HS // Enable OSC switching and LP
#pragma config PWRT = ON // Enable POR
#pragma config BOR = OFF, BORV = 42 // Enable BOR at 4.2v
#pragma config WDT = OFF // Disable WDT
#pragma config PBADEN = OFF // PORTB<4:0> pins are configured as digital I/O on Reset
#pragma config LPT1OSC = OFF
#pragma config STVREN = OFF // stack overflow reset
#pragma config LVP = OFF // Low voltage programming
#pragma config XINST = OFF

unsigned int Imp1, Imp2, Imp3, Imp4, ImpT;


void PWM();
void PAUSE(int p);
extern void PWM_ASM (void);

#pragma interrupt ISR
void ISR(void){

}


void PAUSE(int p) {
int i;
for (i=1; i<=p; i++);
}


void init(void) {

/* Initialisieren des Interrupt-Systems */
// Globale Interrupts ausschalten
INTCONbits.GIE = 0;
// Disable peripheral interrupts
INTCONbits.PEIE = 0;
// Disable priority levels on interrupt
RCONbits.IPEN = 0;

/* Initialisiere Timer2 fuer PWM */
// 1:1 postscaler
T2CONbits.T2OUTPS3 = 0;
T2CONbits.T2OUTPS3 = 0;
T2CONbits.T2OUTPS3 = 0;
T2CONbits.T2OUTPS3 = 0;
// Prescaler is 1
T2CONbits.T2CKPS1 = 0;
T2CONbits.T2CKPS0 = 0;
// Timer2 Interrupt aus
PIE1bits.TMR2IE = 0;
// Timer2 am Anfang aus lassen
T2CONbits.TMR2ON = 0;

/* Initialisiere PWM-Funktion */
// Duty cycle LSBs setzen
CCP1CONbits.DC1B1 = 0;
CCP1CONbits.DC1B0 = 0;
// Duty cycle MSBs setzen
CCPR1L = 0x01;
// PWM am Anfang aus
CCP1CONbits.CCP1M3 = 0;
CCP1CONbits.CCP1M2 = 0;
CCP1CONbits.CCP1M1 = 0;
CCP1CONbits.CCP1M0 = 0;
// Timer2 Period register setzen
PR2 = 0x02;

// PortC Pin 2 ist PWM Ausgang
TRISCbits.TRISC2 = 0;
}


void PWM(void){

// PWM aus
CCP1CONbits.CCP1M3 = 0;
CCP1CONbits.CCP1M2 = 0;
CCP1CONbits.CCP1M1 = 0;
CCP1CONbits.CCP1M0 = 0;
// Timer2 anhalten
T2CONbits.TMR2ON = 0;


// PWM CPLD laden
PWM_ASM ();


// Timer2 starten
T2CONbits.TMR2ON = 1;
// PWM ein
CCP1CONbits.CCP1M3 = 1;
CCP1CONbits.CCP1M2 = 1;
// CCP1CONbits.CCP1M1 = 0; // die sind egal
// CCP1CONbits.CCP1M0 = 0;

}


void main (void){

int i;

LVDCON = 0x00;
PORTD = 0x00;
LATD = 0x00;

init();

Imp1 = 0xFF;
Imp2 = 0xFF;
Imp3 = 0xFF;
Imp4 = 0xFF;

PWM();

while(1==1){
for (i=0xA0; i<=(0xFF); i++) {
Imp1 = 0xA0 + 0xFF - i;
Imp4 = i;
PWM();
PAUSE(10000);
}
for (i=0xA0; i<=(0xFF); i++) {
Imp2 = 0xA0 + 0xFF - i;
Imp1 = i;
PWM();
PAUSE(10000);
}
for (i=0xA0; i<=(0xFF); i++) {
Imp3 = 0xA0 + 0xFF - i;
Imp2 = i;
PWM();
PAUSE(10000);
}
for (i=0xA0; i<=(0xFF); i++) {
Imp4 = 0xA0 + 0xFF - i;
Imp3 = i;
PWM();
PAUSE(10000);
}
}
}