Basti_x
07.02.2006, 12:22
Hallo,
Ich habe gerad anfängliche Probleme mit meinem Controller...
Wenn ich auf dem PORTC nur mit den LEDs arbeite klappt alles. Arbeite ich nur mit den Motoren klappt alles. Nur wenn ich beides kombinieren will geht es nicht mehr....
also mein code für allgemeines INIT
void init(void)
{
DDRA = 0x00; /* Port als Eingang deklarieren ( A/D-Wandler Eingänge ) */
PORTA = 0x80;
DDRB = 0xff; /* Port als Ausgang deklarieren */
PORTB = 0x00;
DDRC = 0xff; /* Port als Ausgang deklarieren */
PORTC = 0x00;
DDRD = 0xff; /* Port als Ausgang deklarieren */
PORTD = 0x00;
ADMUX = 0;
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);
/* Spezialfunktionen ausschalten */
SFIOR = 0;
}
Wenn ich diesen lade kann ich mit meinen LEDs mit folgendem Befehl arbeiten: PORTC = ~((1<<3)|(1<<4));
habe auch schon PORTC &= ~((1<<3)|(1<<4)); probiert
wenn ich nun noch mein MotorInit machen geht das nicht mehr. Es liegt an der gemeinsamen Nutzung und ich weiß auch, dass ich PC7 und PC6 nicht mehr zur Verfügung habe. Wie muss ich das anstellen damit ich meinen Motor verwenden kann aber trotzdem eine LED anschalten kann
Mein Code für die MotorInit:
void motorInit(void){
DDRD= (1<<PD4) | (1<<PD5); // PWM Pins als ausgang
DDRC= (1<<PC6) | (1<<PC7); // 6=Motor 1 Kanal 1 7= Motor 1 Kanal 2
DDRB= (1<<PB0) | (1<<PB1); // 0=Motor 2 Kanal 1 1= Motor 2 Kanal 2
TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<COM1A0) | (1<<COM1B0) | (1<<WGM11) | (1<<WGM10); // 10 Bit Pwm, invertierend
TCCR1B = (1<<CS11) | (1<<CS10); // Prescaler 64
OCR1A=1; // Mindestzeit für PWM1
OCR1B=1; // Mindestzeit für PWM2
}
Mein Motor wird später mit folgendem Befehl gesetzt: Portc |= (1<<PC6)
Wie ich das sehe liegt mein Denkfehler an der AND und OR-Verknüpfung. Habe jedoch schon einiges probiert und bin bis jetzt noch auf keine Lösung gekommen.
Vielen Dank für einen Tipp
Basti
Ich habe gerad anfängliche Probleme mit meinem Controller...
Wenn ich auf dem PORTC nur mit den LEDs arbeite klappt alles. Arbeite ich nur mit den Motoren klappt alles. Nur wenn ich beides kombinieren will geht es nicht mehr....
also mein code für allgemeines INIT
void init(void)
{
DDRA = 0x00; /* Port als Eingang deklarieren ( A/D-Wandler Eingänge ) */
PORTA = 0x80;
DDRB = 0xff; /* Port als Ausgang deklarieren */
PORTB = 0x00;
DDRC = 0xff; /* Port als Ausgang deklarieren */
PORTC = 0x00;
DDRD = 0xff; /* Port als Ausgang deklarieren */
PORTD = 0x00;
ADMUX = 0;
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);
/* Spezialfunktionen ausschalten */
SFIOR = 0;
}
Wenn ich diesen lade kann ich mit meinen LEDs mit folgendem Befehl arbeiten: PORTC = ~((1<<3)|(1<<4));
habe auch schon PORTC &= ~((1<<3)|(1<<4)); probiert
wenn ich nun noch mein MotorInit machen geht das nicht mehr. Es liegt an der gemeinsamen Nutzung und ich weiß auch, dass ich PC7 und PC6 nicht mehr zur Verfügung habe. Wie muss ich das anstellen damit ich meinen Motor verwenden kann aber trotzdem eine LED anschalten kann
Mein Code für die MotorInit:
void motorInit(void){
DDRD= (1<<PD4) | (1<<PD5); // PWM Pins als ausgang
DDRC= (1<<PC6) | (1<<PC7); // 6=Motor 1 Kanal 1 7= Motor 1 Kanal 2
DDRB= (1<<PB0) | (1<<PB1); // 0=Motor 2 Kanal 1 1= Motor 2 Kanal 2
TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<COM1A0) | (1<<COM1B0) | (1<<WGM11) | (1<<WGM10); // 10 Bit Pwm, invertierend
TCCR1B = (1<<CS11) | (1<<CS10); // Prescaler 64
OCR1A=1; // Mindestzeit für PWM1
OCR1B=1; // Mindestzeit für PWM2
}
Mein Motor wird später mit folgendem Befehl gesetzt: Portc |= (1<<PC6)
Wie ich das sehe liegt mein Denkfehler an der AND und OR-Verknüpfung. Habe jedoch schon einiges probiert und bin bis jetzt noch auf keine Lösung gekommen.
Vielen Dank für einen Tipp
Basti