Gast
#466937
Hi,
Ich versuche gerade verzweifelt mit meinem Atmega168 etwas zu empfangen.
Hatte damals mein MyAVR Board mit einem Atmega8 und da ich mich vor
kurzem aus meinem Atmega8 ausgesperrt habe durch falsche FuseBits hab
ich mir den 168er gekauft.
Das versenden vom µc an den PC funktioniert ohne Probleme...
Hier mal der Code:
<code>
#define F_CPU 3686400
#define USART_BAUD_RATE 9600
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1)
#include <avr/io.h>
#include <avr/interrupt.h>
void sendUart(char* cmd)
{
do
{
while (!(UCSR0A & (1<<UDRE0))) {} // Warten bis man
senden kann
UDR0 = *cmd++; // senden und zum
nächsten zeichen wechseln
}
while(*cmd); // so lange bis das
ende erreicht ist
}
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) )
;
/* Get and return received data from buffer */
return UDR0;
}
void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRR0H = (unsigned char)(baud>>8);
UBRR0L = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0) | (1<<RXCIE0);
/* Set frame format: 8data, 2stop bit */
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}
ISR(USART_RX_vect)
{
PORTC = 0xFF;
}
int main(void)
{
USART_Init(USART_BAUD_SELECT);
sei();
DDRC = 0xFF;
sendUart("Programm gestartet\n");
PORTC = 0x00;
//USART_Receive();
//PORTC = 0xFF;
for(;;){}
}
</code>
USART_Init() und USART_Receive() hab ich aus dem Datenblatt übernommen.
Die Baudrate und das initialisieren müsste korrekt sein, da das Senden
ja funktioniert.
Nur egal ob ich die USART_Recieve(); verwende, oder die
Interrupt-methode, es passiert beidesmal nichts!! Das Kabel hab ich auch
schon durchgemessen, das müsste funktionieren. Ich verstehe das nicht.
Mit dem Atmega8 hat damals der Empfang auch funktioniert ( ist aber
schon 1 1/2 Jahre her)
Der Code müsste doch richtig sein oder nicht?
Was mache ich falsch?