PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pic 16F627A Programmierfehler in C? (Hitec-C)



Frodo89
11.04.2014, 21: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

witkatz
13.04.2014, 01:04
Kleines Testprogramm geschrieben - läuft nicht.
Das ist normal, Software läuft fast nie auf Anhieb. Deshalb kommt das Testen nach dem Programmieren.

Kann mir jemand sagen woran es liegen könnte?
Nö, dafür müsstest du das Problem zunächstmal etwas einkreisen. Wie weit bist du mit Debuggen gekommen? Läuft der Controller überhaupt an?

ossy
20.04.2014, 00:07
Hallo Frodo89 (https://www.roboternetz.de/community/members/48333-Frodo89),

wo wird denn in deiner Software die PWM-Frequenze eingestellt?

Gruß

Wolfgang

HeXPloreR
20.04.2014, 08:54
Frohe Ostern :-b

ossy
20.04.2014, 23:43
Hallo Frodo,

tut sich irgend was?
Fehlt vielleicht der Widerstand vom MCLR an VDD ?

Gruß
Wolfgang