Gast
#468148
Hi leute! Ich habe hier eine kleine Schaltung, in der mein AVR (ein ATMEGA8515) über einen MAX485 mit einem anderen Gerät kommunizieren soll. Zu aller erst: Die Hardware ist vollkommen OK. Ich habe ein Programm von einem Kollegen auf den AVR gespielt, dass vollkommen einwandfrei über den UART kommuniziert. Mein Problem: Mein eigener Code funktioniert nicht so ganz. Gesendete Daten kommen zwar am anderen Gerät an, aber ich empfange nichts. Hier der Code zum initialisieren: INITIALISIERUNG: // Die beiden Datenleitungen des MAX händen an PortD0 und D1, die Richtungsleitung ist an C0 // Port-Richtungen setzen DDRA = 0xFF; DDRB = 0x00; DDRC = 0x00; DDRD = 0x00; // UART initialisieren UCSRB = (1 << RXEN) | (1 << TXEN); // Enable transmit and recieve UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1 UBRRH = (uint8_t)( UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ) >> 8 ); UBRRL = (uint8_t)UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ); DAS SENDEN UND EMPFANGEN: UCSRA = (1 << RXC) | (1 << TXC); // Clear TXC and RXC blinkSomeCrazyLEDs(); // 5 Sek blinken um anzuzeigen, dass es los geht // ----- SENDEN ------- // MAX auf senden PORTC &= ~(1 << PINC0); // C0 auf 1 while (!(UCSRA & (1<<UDRE))); // Warte bis bereit zum senden UDR = 201; // Sende byte "201" while(!(UCSRA&(1<<TXC))); // warte bis gesendet wurde UCSRA = (1 << RXC) | (1 << TXC); // Lösche alle input/output bits mit 1 // ----- EMPFANGEN------- // MAX auf empfangen PORTC |= (1 << PINC0); // C0 auf 0 while (!(UCSRA & (1<<RXC))); // warte bis byte reingekommen ist char temp = UDR; // lese byte aus blinkSomeCrazyLEDs(); // 5 Sek blinken um anzuzeigen, dass wir fertig sind WAS PASSIERT: Wie gesagt kommt das gesendete byte 201 problemlos an. Danach hängt sich das programm aber in der empfangs-endlosschleife auf ("while (!(UCSRA & (1<<RXC)));"). Das heißt also, dass der UART nichts empfängt. Dabei ist da ganz sicher eine antwort, die nur irgendwie nicht ankommt... :-( Und das Problem muss in dem code oben liegen, das es ja mit einem anderen Programm (an das ich leider nicht rankomme) funktioniert. hat jemand eine Idee? danke!!!!!