Hallo
Die komplette Ausgabe der Fehlermeldungen wäre sinnvoll. Vermutlich wurde RP6ControlLib.c nicht in das Projekt eingebunden und deshalb kennt der Kompiler die Funktion initRP6Control(); nicht.
Bist du sicher, dass du das so machen willst? "TIMSK |= (1 << TOIE1);" funktioniert mit dem RP6, weil seine Library den Timer1 zur Motoransteuerung nutzt und der Timer deshalb auch schon richtig initialisiert wurde.
Init vom m32:
(Aus RP6ControlLib.c)Code:void initRP6Control(void) { portInit(); // Setup port directions and initial values. // This is the most important step! cli(); // Disable global interrupts. // UART: UBRRH = UBRR_BAUD_LOW >> 8; // Setup UART: Baud is Low Speed UBRRL = (uint8_t) UBRR_BAUD_LOW; UCSRA = 0x00; UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE); // Initialize ADC: ADMUX = 0; //external reference ADCSRA = (0<<ADIE) | (0<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADIF); SFIOR = 0; // Initialize External interrupts - all disabled: MCUCR = (1 << ISC11) | (1 << ISC10) | (1 << ISC01) | (1 << ISC00); GICR = (0 << INT2) | (0 << INT1) | (0 << INT0); MCUCSR = (0 << ISC2); // 10kHz Timer 0: TCCR0 = (0 << WGM00) | (1 << WGM01) | (0 << COM00) | (0 << COM01) | (0 << CS02) | (1 << CS01) | (0 << CS00); OCR0 = 199; /* Timer 1 is free for your application! */ // Timer 2 - used for beeper: TCCR2 = 0; OCR2 = 0xFF; // Enable timer interrupts: TIMSK = (1 << OCIE0); // SPI Master (SPI Mode 0, SCK Frequency is F_CPU/2, which means it is 8MHz // on the RP6 CONTROL M32...): SPCR = (0<<SPIE) | (1<<SPE) | (1<<MSTR) | (0<<SPR0) | (0<<SPR1) | (0<<CPOL) | (0<<CPHA); SPSR = (1<<SPI2X); sei(); // Enable Global Interrupts }
Init vom RP6:
(Aus RP6RobotBaseLib.c)Code:void initRobotBase(void) { portInit(); // Setup port directions and initial values. // THIS IS THE MOST IMPORTANT STEP! cli(); // Disable global interrupts enableResetButton(); // Make sure the Reset Button is enabled! // Do not disable it if you want to be able to // reset your robot! (Otherwise you can only // stop it by switching it off completely, // if it gets out of control ;) ) IRCOMM_OFF(); // Make sure that IRCOMM and ... setACSPwrOff(); // ACS are turned OFF! // UART: UBRRH = UBRR_BAUD_LOW >> 8; // Setup UART: Baudrate is Low Speed UBRRL = (uint8_t) UBRR_BAUD_LOW; UCSRA = 0x00; UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE); // Initialize ADC: ADMUX = 0; //external reference ADCSRA = (0<<ADIE) | (0<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADIF); SFIOR = 0; // Initialize External interrupts: MCUCR = (0 << ISC11) | (1 << ISC10) | (0 << ISC01) | (1 << ISC00); GICR = (1 << INT2) | (1 << INT1) | (1 << INT0); MCUCSR = (0 << ISC2); // Initialize Timer 0 - 100µs cycle for Delays/Stopwatches, RC5 reception etc.: TCCR0 = (0 << WGM00) | (1 << WGM01) | (0 << COM00) | (0 << COM01) | (0 << CS02) | (1 << CS01) | (0 << CS00); OCR0 = 99; // Initialize Timer1 - PWM: // PWM, phase correct with ICR1 as top value. TCCR1A = (0 << WGM10) | (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1); TCCR1B = (1 << WGM13) | (0 << WGM12) | (1 << CS10); ICR1 = 210; // Phase corret PWM top value - 210 results in // about 19 kHz PWM. // ICR1 is the maximum (=100% duty cycle) PWM value! // This means that the PWM resolution is a bit lower, but // if the frequency is lower than 19 kHz you may hear very // annoying high pitch noises from the motors! // 19 kHz is a bit over the maximum frequency most people can // hear! // // ATTENTION: Max PWM value is 210 and NOT 255 !!! OCR1AL = 0; OCR1BL = 0; setMotorDir(FWD,FWD); // Direction Forwards // Initialize Timer2 - ACS: TCCR2 = (1 << WGM21) | (0 << COM20) | (1 << CS20); OCR2 = 0x6E; // 0x6E = 72kHz @8MHz // Initialize Timer Interrupts: TIMSK = (1 << OCIE0); //| (1 << OCIE2); // Fixed: Timer2 Interrupt is turned // off by default now! It is only active // when ACS/IRCOMM are transmitting. // Initialize ACS: sysStatACS.channel = ACS_CHANNEL_RIGHT; acs_state = ACS_STATE_IRCOMM_DELAY; sei(); // Enable Global Interrupts }
Gruß
mic






Zitieren

Lesezeichen