Frodo89
11.04.2014, 22:41
Hallo zusammen,
ich habe schon wieder mal n problemchen...
Ich habe eine kleine Testplatine gebaut um einen motor Per PWM anzusteuern. Kleines Testprogramm geschrieben - läuft nicht. Kann mir jemand sagen woran es liegen könnte? Die Tasten "anaus" für start&stopp und "schnell" für das drehzahlsignal(1 linkslauf,0 rechtslauf) reagieren einfach nicht...
/* * File: main.c
* Author: Ben
*
* Created on 9. April 2014, 20:55
*/
#include <stdio.h>
#include <stdlib.h>
#include <htc.h>
#define _XTAL_FREQ 20000000
#define PWM PORTBbits.RB3 //PWM out
#define LR PORTBbits.RB7 //Signal für richtung
#define CHA PORTBbits.RB1 //Lichtschranke teilA
#define CHB PORTBbits.RB2 //Lichtschranke TeilB
#define REF PORTBbits.RB4 //Fork 1 - REF
#define LMI PORTBbits.RB5 //Fork 2 - LMI
#define END PORTBbits.RB6 //Fork 3 - END
#define ANAUS PORTBbits.RB0 //Start/Stopp
#define schnell PORTAbits.RA1 //Schneller
#define langsam PORTAbits.RA2 //Signal links/rechtslauf
char istaus;
/*
*
*/
__CONFIG(FOSC_HS & WDTE_OFF & MCLRE_OFF & LVP_OFF & CP_OFF & BOREN_OFF);
void pwm_an(void);
void pwm_aus(void);
//void interrupt start_int (void){
//}
void init(void);
void main(void){
init();
while(1){
if ((ANAUS == 1) && (istaus == 1)){
pwm_an();
__delay_ms(30);
}
if ((ANAUS == 1) && (istaus == 0)){
pwm_aus();
__delay_ms(30);
}
if (schnell == 1){
LR = !LR;
__delay_ms(30);
}
}
}
void pwm_an(void){
CCP1CON = 0b1100;
istaus = 0;
}
void pwm_aus(void){
CCP1CON = 0x00;
istaus = 1;
}
void init(void){
TRISA = 0b000110; //Ein-Ausgänge einstellen
TRISB = 0b01110111; //Ein-Ausgänge einstellen
CCP1CON = 0x00; //PWM aus
INTE = 1; //Int an
GIE = 1; //Int an
PEIE = 1; //Int an
RBIE = 1; //Int an bei RB 4..7
PORTA = 0x00; //Ausgänge 0setzen
PORTB = 0x00; //Ausgänge 0setzen
T2CKPS0 = 1; //Vorteiler 4:1
T2CKPS1 = 0; //Vorteiler 4:1
TMR2ON = 1; //Timer2 an (fuer pwm)
PR2 = 0x7C; //Tacktung
CCPR1L = 0x3E; //Tastverhältnis
CMCON = 0x07; //Comparator aus
istaus = 1;
di(); //alle interrupts deaktivieren
LR = 1;
}
Danke schonmal für hilfe und ideen
Gruß
Frodo
ich habe schon wieder mal n problemchen...
Ich habe eine kleine Testplatine gebaut um einen motor Per PWM anzusteuern. Kleines Testprogramm geschrieben - läuft nicht. Kann mir jemand sagen woran es liegen könnte? Die Tasten "anaus" für start&stopp und "schnell" für das drehzahlsignal(1 linkslauf,0 rechtslauf) reagieren einfach nicht...
/* * File: main.c
* Author: Ben
*
* Created on 9. April 2014, 20:55
*/
#include <stdio.h>
#include <stdlib.h>
#include <htc.h>
#define _XTAL_FREQ 20000000
#define PWM PORTBbits.RB3 //PWM out
#define LR PORTBbits.RB7 //Signal für richtung
#define CHA PORTBbits.RB1 //Lichtschranke teilA
#define CHB PORTBbits.RB2 //Lichtschranke TeilB
#define REF PORTBbits.RB4 //Fork 1 - REF
#define LMI PORTBbits.RB5 //Fork 2 - LMI
#define END PORTBbits.RB6 //Fork 3 - END
#define ANAUS PORTBbits.RB0 //Start/Stopp
#define schnell PORTAbits.RA1 //Schneller
#define langsam PORTAbits.RA2 //Signal links/rechtslauf
char istaus;
/*
*
*/
__CONFIG(FOSC_HS & WDTE_OFF & MCLRE_OFF & LVP_OFF & CP_OFF & BOREN_OFF);
void pwm_an(void);
void pwm_aus(void);
//void interrupt start_int (void){
//}
void init(void);
void main(void){
init();
while(1){
if ((ANAUS == 1) && (istaus == 1)){
pwm_an();
__delay_ms(30);
}
if ((ANAUS == 1) && (istaus == 0)){
pwm_aus();
__delay_ms(30);
}
if (schnell == 1){
LR = !LR;
__delay_ms(30);
}
}
}
void pwm_an(void){
CCP1CON = 0b1100;
istaus = 0;
}
void pwm_aus(void){
CCP1CON = 0x00;
istaus = 1;
}
void init(void){
TRISA = 0b000110; //Ein-Ausgänge einstellen
TRISB = 0b01110111; //Ein-Ausgänge einstellen
CCP1CON = 0x00; //PWM aus
INTE = 1; //Int an
GIE = 1; //Int an
PEIE = 1; //Int an
RBIE = 1; //Int an bei RB 4..7
PORTA = 0x00; //Ausgänge 0setzen
PORTB = 0x00; //Ausgänge 0setzen
T2CKPS0 = 1; //Vorteiler 4:1
T2CKPS1 = 0; //Vorteiler 4:1
TMR2ON = 1; //Timer2 an (fuer pwm)
PR2 = 0x7C; //Tacktung
CCPR1L = 0x3E; //Tastverhältnis
CMCON = 0x07; //Comparator aus
istaus = 1;
di(); //alle interrupts deaktivieren
LR = 1;
}
Danke schonmal für hilfe und ideen
Gruß
Frodo