pointhi
29.02.2012, 15:39
Hy, ich arbeite gerade an meinem roboter. Der verwendete controller ist ein PIC18F6520. Das problem ist das der ADC sich selber immer beeinflusst. Wartezeit sollte eigentlich nicht wenig zu sein.
for(int i=0;i<=10000;i++);
die Initialisierung (hab den code von ein paar init-funktionen auch herauskopiert:
// PORT-Konfiguration
TRISA = 0b11111111; // 1...Eingang
TRISB = 0b11111101; // 0...Ausgang
TRISC = 0b11111001;
TRISD = 0b11111111;
TRISE = 0b11100001;
TRISF = 0b11111111;
TRISG = 0b11100000;
// PORT-Reset
PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = 0x00;
PORTE = 0x00;
PORTF = 0x00;
PORTG = 0x00;
// ADC
ADCON0 = 0b00000001; // AD-Enable
ADCON1 = 0b00000000; // alle enable
ADCON2 = 0b10000110; // Rechtsbündig, FOSC/64
// PWM
Engine1Stop(); // Sorge dafür dass die Motoren nicht anlaufen
Engine2Stop();
Engine3Stop();
PR4 = 0xFF; // PWM-Periode // 2441.4Hz
T4CON = 0b00000111; // Prescaler 1:16, Timer 2 Enable
Engine1PWM(0xFF); // Setze die PWM-Ports auf "Vollgas"
Engine2PWM(0xFF);
Engine3PWM(0xFF);
CCP3CON = 0b00111100; // PWM Enable // Duty zykle 1 0
CCP4CON = 0b00111100; // PWM Enable // Duty zykle 1 0
CCP5CON = 0b00111100; // PWM Enable // Duty zykle 1 0
PR2 = 0b11111001;
T2CON = 0b00000111;
CCPR2L = 0b01111100;
CCP2CON = 0b00111100;
// USART
TXSTA = 0b00100100; // BRGH=1
RCSTA = 0b10010000;
SPBRG = baudrate; // Baudrate
Das problem ist dass einerseits, dass alle ADC von AD9 beeinflusst werden (an AD9 ist ein Sharp-Sensor, die anderen AD sind noch nicht alle connectet.
Und anderseits, wenn ich ADCON1 nur bis AD9 einstelle, ich die Digitalwerte von RF5 und RF6 trotzdem nicht lesen kann. Es liegt aber ein korrektes signal an.
hab keinen plan mehr deswegen, brauche aber die pins. RF5 kann ich analog einlesen, aber das signal wird dann von AD9 zu stark verändert. Alle ADC eingänge sind mit mindestens 270R angeschlossen, teilweise aber mit mehreren K (bis 100K). Könnte das das problem sein?
mfg. pointhi
for(int i=0;i<=10000;i++);
die Initialisierung (hab den code von ein paar init-funktionen auch herauskopiert:
// PORT-Konfiguration
TRISA = 0b11111111; // 1...Eingang
TRISB = 0b11111101; // 0...Ausgang
TRISC = 0b11111001;
TRISD = 0b11111111;
TRISE = 0b11100001;
TRISF = 0b11111111;
TRISG = 0b11100000;
// PORT-Reset
PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = 0x00;
PORTE = 0x00;
PORTF = 0x00;
PORTG = 0x00;
// ADC
ADCON0 = 0b00000001; // AD-Enable
ADCON1 = 0b00000000; // alle enable
ADCON2 = 0b10000110; // Rechtsbündig, FOSC/64
// PWM
Engine1Stop(); // Sorge dafür dass die Motoren nicht anlaufen
Engine2Stop();
Engine3Stop();
PR4 = 0xFF; // PWM-Periode // 2441.4Hz
T4CON = 0b00000111; // Prescaler 1:16, Timer 2 Enable
Engine1PWM(0xFF); // Setze die PWM-Ports auf "Vollgas"
Engine2PWM(0xFF);
Engine3PWM(0xFF);
CCP3CON = 0b00111100; // PWM Enable // Duty zykle 1 0
CCP4CON = 0b00111100; // PWM Enable // Duty zykle 1 0
CCP5CON = 0b00111100; // PWM Enable // Duty zykle 1 0
PR2 = 0b11111001;
T2CON = 0b00000111;
CCPR2L = 0b01111100;
CCP2CON = 0b00111100;
// USART
TXSTA = 0b00100100; // BRGH=1
RCSTA = 0b10010000;
SPBRG = baudrate; // Baudrate
Das problem ist dass einerseits, dass alle ADC von AD9 beeinflusst werden (an AD9 ist ein Sharp-Sensor, die anderen AD sind noch nicht alle connectet.
Und anderseits, wenn ich ADCON1 nur bis AD9 einstelle, ich die Digitalwerte von RF5 und RF6 trotzdem nicht lesen kann. Es liegt aber ein korrektes signal an.
hab keinen plan mehr deswegen, brauche aber die pins. RF5 kann ich analog einlesen, aber das signal wird dann von AD9 zu stark verändert. Alle ADC eingänge sind mit mindestens 270R angeschlossen, teilweise aber mit mehreren K (bis 100K). Könnte das das problem sein?
mfg. pointhi