sportfreak
27.08.2009, 18:51
Hallo,
ich habe ein RN-2560 module von Roboternetz, also ein kleines Board mit Atmega2560 und USB-Anschluß hat. Diesen Programmiere ich über JTAG, dem AVR-Studio und C-Code.
Mein Ziel ist es über UART (so heißt die Komponenten, die man auf dem Atmega2560 ansprechen muss) auf USB Daten auszugeben und einzulesen. Der erste Teil ist gelungen, denn alle Daten, die ich vom Atmega2560 ausgebe, kommen in meinem Terminalprogramm auf dem PC an. -> also müssen alle Parameter der RS232-Kommunikation auch richtig eingestellt sein??? (Baudrate und so)
Aber leider kann ich über das Terminal (den PC) nicht an den Atmega2560 senden.
Die folgenden Routine, welche so in vielen Foren und im Manual des MC zu finden ist, springt nicht an (die while-schleife wird nie verlassen):
#define BAUDRATE 38400UL //Definition als unsigned long, sonst gibt es Fehler in der Berechnung
#define USART_BAUD_RATE 9600
void uart_init()
{
uint16_t ubrr = (F_CPU / (USART_BAUD_RATE * 16L) - 1);
UBRR3H = (uint8_t) (ubrr>>8);
UBRR3L = (uint8_t) (ubrr);
//###### ziel: 8 Datenbits, kein Parity, 1 Stopbit
// UART Receiver und Transmitter anschalten
// Data mode 8N1 (UCSZnx + USBSn), asynchron (UMSELnx)
UCSR3C &= ~((1 << UPM31)&&(1 << UPM30)); //kein Parity
UCSR3C &= ~(1<<USBS3); //1 Stop Bit
UCSR3B |= (1 << RXEN3) | (1 << TXEN3);
UCSR3C |= (1 << UCSZ31) | (1 << UCSZ30); //8-bit
UCSR3C &= ~((1 << UMSEL31)&&(1 << UMSEL30)); //asynchron
}
static inline uint8_t uart_getc_wait()
{
// Warten, bis etwas empfangen wird
while (!(UCSR3A & (1 << RXC3)));
// Das empfangene Zeichen zurückliefern
return UDR3;
}
Da das Senden geht sollte der zur RN-CD mitgelieferte USB-Seriell-treiber korrekt installiert sein, das USB-Kabel funktionieren und der Atmega2560 auch. Somit hab ich leider keine Idee mehr, woran es noch liegen kann. Habe es schon mit zwei verschiedenen PCs ausprobiert.
ich habe ein RN-2560 module von Roboternetz, also ein kleines Board mit Atmega2560 und USB-Anschluß hat. Diesen Programmiere ich über JTAG, dem AVR-Studio und C-Code.
Mein Ziel ist es über UART (so heißt die Komponenten, die man auf dem Atmega2560 ansprechen muss) auf USB Daten auszugeben und einzulesen. Der erste Teil ist gelungen, denn alle Daten, die ich vom Atmega2560 ausgebe, kommen in meinem Terminalprogramm auf dem PC an. -> also müssen alle Parameter der RS232-Kommunikation auch richtig eingestellt sein??? (Baudrate und so)
Aber leider kann ich über das Terminal (den PC) nicht an den Atmega2560 senden.
Die folgenden Routine, welche so in vielen Foren und im Manual des MC zu finden ist, springt nicht an (die while-schleife wird nie verlassen):
#define BAUDRATE 38400UL //Definition als unsigned long, sonst gibt es Fehler in der Berechnung
#define USART_BAUD_RATE 9600
void uart_init()
{
uint16_t ubrr = (F_CPU / (USART_BAUD_RATE * 16L) - 1);
UBRR3H = (uint8_t) (ubrr>>8);
UBRR3L = (uint8_t) (ubrr);
//###### ziel: 8 Datenbits, kein Parity, 1 Stopbit
// UART Receiver und Transmitter anschalten
// Data mode 8N1 (UCSZnx + USBSn), asynchron (UMSELnx)
UCSR3C &= ~((1 << UPM31)&&(1 << UPM30)); //kein Parity
UCSR3C &= ~(1<<USBS3); //1 Stop Bit
UCSR3B |= (1 << RXEN3) | (1 << TXEN3);
UCSR3C |= (1 << UCSZ31) | (1 << UCSZ30); //8-bit
UCSR3C &= ~((1 << UMSEL31)&&(1 << UMSEL30)); //asynchron
}
static inline uint8_t uart_getc_wait()
{
// Warten, bis etwas empfangen wird
while (!(UCSR3A & (1 << RXC3)));
// Das empfangene Zeichen zurückliefern
return UDR3;
}
Da das Senden geht sollte der zur RN-CD mitgelieferte USB-Seriell-treiber korrekt installiert sein, das USB-Kabel funktionieren und der Atmega2560 auch. Somit hab ich leider keine Idee mehr, woran es noch liegen kann. Habe es schon mit zwei verschiedenen PCs ausprobiert.