PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC18F2550 PWM Pegel nur 1V



the.badger
09.09.2012, 17:40
Hallo zusammen,

ich möchte einen kleinen Roboter mit 2 Motoren mit einem PIC18F2550 zu steuern.
Um die Geschwindigkeit der Räder zu ändern verwende ich 2 PWM Signale CCP1 und CCP2.



// 20 MHz Takt
/** Configuration ************************************************** ******/
#pragma config PLLDIV = 2, CPUDIV = OSC1_PLL2, USBDIV = 2, FOSC = HSPLL_HS
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config VREGEN = ON //USB Voltage Regulator Enable:
#pragma config WDT = OFF //Watchdog Timer:
#pragma config MCLRE = ON //MCLR Enable:
#pragma config PBADEN = OFF //PORTB<4:0> pins are configured as digital I/O on Reset
#pragma config LVP = OFF //Low Voltage ICSP:
#pragma config CCP2MX = ON


/** V E C T O R R E M A P P I N G *******************************************/
// Für den Bootlodader
extern void _startup (void); // See c018i.c in your C18 compiler dir
#pragma code _RESET_INTERRUPT_VECTOR = 0x000800
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code

#pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
void _high_ISR (void)
{
;
}

#pragma code _LOW_INTERRUPT_VECTOR = 0x000818
void _low_ISR (void)
{
;
}
#pragma code

void Port_Init(void)
{
TRISA = 0x00; //PORTA als Ausgang
TRISB = 0x00; //PORTB als Ausgang
TRISC = 0x00; //PORTC als Ausgang

// Interrupt konfiguration
RCONbits.IPEN = 0;
INTCON = 0xC8; // Enable all Interrupts
T1CON = 0b00101011;
// PIE1bits.TMR1IE = 1; // Enable Timer1 Interrupt
// IPR1bits.TMR1IP = 1; //
// PIR1bits.TMR1IF = 0; // Timer1 Interruptflag löschen
// PWM konfiguration
PR2=0x80; //1.:Register PR2 Wert zuweisen
CCPR1L=0x80; //2.:
CCPR2L=0x80;
CCP2CONbits.DC2B0=0;
CCP2CONbits.DC2B1=0;
CCP1CONbits.DC1B0=0;
CCP1CONbits.DC1B1=0;
TRISCbits.TRISC2=0; //3.: CCP1 als Ausgang
TRISCbits.TRISC1=0; // CCP2 als Ausgang
T2CONbits.T2CKPS1=0; //4.: TMR2 Prescale setzen (1:2)
T2CONbits.T2CKPS0=0; // Wert egal
T2CONbits.TMR2ON=1; //Timer2 ON
CCP1CONbits.CCP1M2=1; //5.: CCP1 für PWM konfiguriert
CCP1CONbits.CCP1M3=1;
CCP2CONbits.CCP2M2=1; // CCP2 für PWM konfiguriert
CCP2CONbits.CCP2M3=1;

PORTAbits.RA2 = 1; //power LED einschalten
}

Die PWM kann ich mit dem Oszi messen, jedoch hat die PWM2 nur einen Pegel von 1V und PWM1 wie erwartet 5V.
Was muss ich machen, damit PWM2 auch 5V hat. (Beide Pins sind unbelastet und nur mit dem Oszi verbunden)

Danke für eure Antworten.

Siro
09.09.2012, 18:55
Ich vermute mal ganz blödes: Schlag mich nicht, wenn ich falsch liege:
Dein Configuratioword
#pragma config CCP2MX = ON
ist falsch
Es setzt nicht den RC1 sondern den RB3 Port für die PWM
Was dein Ossi Dir anzeigt, ist ein Übersprechen vom nebenliegendem Pin RC2, also der ersten PWM
Dein zweite PWM kommt aber vermutlich am Pin RB3 raus.
Häng mal den Ossi an RB3 und guck mal nach, ob Du da eine PWM messen kannst.
Bin mal gespannt.....

Lieg ich doch falsch ???
Laut Anleitung hast Du es richtig gemacht. Ich hab mir grade die Header Datei angesehen.
; CCP2 MUX bit:
; CCP2MX = OFF CCP2 input/output is multiplexed with RB3
; CCP2MX = ON CCP2 input/output is multiplexed with RC1
Was anderes fällt mir aber nicht dazu ein.

the.badger
09.09.2012, 21:09
Danke für die Antwort!
Das CCP2MX bit muss laut Datenblatt ON sein. Ich hab nachdem es nicht funktioniert hat dann aber auch OFF versucht, aber immer nur an RC1 gemessen.
Jetzt messe ich egal ob ON oder OFF die PWM2 immer an RB3.
Mit dem übersprechen auf den anderen Pin hast du absolut Recht, was ich durch verschiedene duty cycle nachgewiesen hab.

Was muss ich noch anders machen, um die PWM2 an RC1 zu bekommen?

Siro
10.09.2012, 08:30
Dann lag ich ja doch nicht so falsch.
Das ist schon merkwürdig, was da passiert.
Das klingt so, als wenn dein Configurationword nicht richtig programmiert wird.
Ich vermute mal Du arbeitest mit MPLAB 8.xxx
Dort kannst Du einstellen ob das Configurationsword vom Programmcode oder separat (Manuell) eingestellt wird.
Menüleiste "Configure"
Da gibt ein Kästchen "Configuration Bits set in code." Dieser Haken muss gesetzt sein.
Ansonsten könnte es auch am Programmer bzw. den Einstellungen liegen.
Du kannst, je nach Modell einstellen, ob das Configuration Word mitprogrammiert werden soll oder nicht.
Was benutzt Du denn zum Programmieren ?
MPLAB Version / Programmer ?
Vielleicht solltest Du mal ein "Bulk Erase" machen . Also den kompletten Chip löschen.