Also ich habs jetzt mal so geschrieben (verkürzte Form):
Die keep_moving()-Methode ist noch fast die selbe. Ich habe nur mal statt dem CoController die Werte zu schicken eine Ausgabe über UART draus gemacht, die einem die momentanen Positionen der Servos angibt.Code:int main (void) { //TIMER-IINTERRUPT AN TCCR0 |= (1<<CS01) | (1<<CS00); TIMSK |= (1<<TOIE0); //UART-INTERRUPT AN UCSRB |= (1<<RXCIE); //UART INITIALISIEREN (RX UND TX ANSCHALTEN) uart_init(1, 1); //GLOBAL INTERRUPT AN sei(); //PRINTF FÜR AUSGABE KONFIGURIEREN fdevopen(putChar,NULL,0); printf("\n\n\rSTART !!!\n\r"); //HAUPTSCHLEIFE while(1) { //NUR AUFRUFEN, WENN EIN TIMER INTERUPT DA WAR if(servo_flag == 1) { calc_steps(); keep_moving(); } if(char_flag == 1) { input(); } } return 0; } void input(void) { inStr[inCnt] = uart_readChar(); printf("\nCHAR RECEIVED: %c\n\r", inStr[inCnt]); switch (inStr[inCnt]) { case (stopsign): //parseInput(); inCnt=0; break; case (startsign): inCnt=0; break; default: inCnt++; break; } char_flag = 0; } SIGNAL (SIG_OVERFLOW0){ servo_flag = 1; } SIGNAL(SIG_USART_RECV) { char_flag = 1; }
Die bekomme jetzt auch immer schön regelmäßig Informationen zu den Servopositionen. Wenn ich jetzt ein Zeichen schicke kommt auch "CHAR RECEIVED" allerdings stimmt das Zeichen nie. Entweder piept der PC nur oder es kommt > oder + oder # (das dürften so sie gängigsten sein)
Weiß jemand woran das liegt?
mfg
jagdfalke







Zitieren

Lesezeichen