Hallo,
ich habe hier einen Attiny841 mit einem Ft232RL verbunden.
Nun möchte ich Daten darüber austauschen, allerdings bekomme ich keine
richtigen Werte zurück bzw. Empfange ich nur Müll.
Ich habe jetzt schon verschiedene Sachen ausprobiert, aber irgendwie
bekomme ich es nicht hin. Wahrscheinlich ist es ein ganz einfacher
Fehler ...
Hier einmal der Code für die USART Routinen:
1 | void USART_Init( uint16_t baudrate )
|
2 | {
|
3 | REMAP |= (1<<U0MAP);
|
4 | /* Set baud rate */
|
5 | UBRR0H = (baudrate>>8);
|
6 | UBRR0L = baudrate;
|
7 | /* Enable receiver and transmitter */
|
8 | UCSR0B |= (1<<RXCIE0) | (1<<RXEN0) | (1<<TXEN0);
|
9 | /* Set frame format: 8data, 2stop bit */
|
10 | UCSR0C |= (1<<UPM01) | (1<<USBS0) | (1<<UCSZ01) | (1<<UCSZ00);
|
11 | }
|
12 |
|
13 | void USART_Transmit( uint8_t data )
|
14 | {
|
15 | /* Wait for empty transmit buffer */
|
16 | while ( !( UCSR0A & (1<<UDRE0)) );
|
17 | /* Put data into buffer, sends the data */
|
18 | UDR0 = data;
|
19 | }
|
20 |
|
21 | uint8_t USART_Receive( void )
|
22 | {
|
23 | /* Wait for data to be received */
|
24 | while ( !(UCSR0A & (1<<RXC0)) );
|
25 | /* Get and return received data from buffer */
|
26 | return UDR0;
|
27 | }
|
und noch meine Initialisierung und die Main Routine:
1 | int main(void)
|
2 | {
|
3 | init();
|
4 | while (1)
|
5 | {
|
6 | USART_Transmit(55);
|
7 | }
|
8 | }
|
9 |
|
10 | void init(void)
|
11 | {
|
12 | cli();
|
13 | USART_Init(64);
|
14 | sei();
|
15 | }
|
Eigentlich stammen die USART Routinen aus dem Datenblatt und müssten so
funktionieren.
Zurück bekomme ich eine dezimale 63, obwohl es ja eigentlich eine 55
sein sollte.
Der Attiny läuft mit 10MHz.
Danke