UART-Interface mit Attiny2313

OP #3498092
Lesenswert?

Hallo Leute,
wollte mal nach langer Zeit wieder anfangen ein wenig Tinys zu 
programmieren. Ich habe ein Ganz simples Programm geschrieben, welches 
Daten von einem Computer über einen UART einliest und diese dann wieder 
zurück senden. Das Programm hat keinen Sinn, einfach nur zum testen.

Leider empfange ich am PC nur Müll. Vielleicht könntet ihr ja mal 
draufschauen. Ich schätze mal das irgendetwas mit der Einstellung im 
UBRR falsch ist. Ich verwende übrigens kein externes Quarz.
1
/*
2
 * UART_Test.c
3
 *
4
 * Created: 21.01.2014 12:52:09
5
 *  Author: Jens
6
 */ 
7

8

9
#include <avr/io.h>
10
#include <inttypes.h>
11

12
#define FCPU 8000000L
13

14
#define USART_BAUD 9600L
15
#define USART_UBBR_VALUE ((FCPU+USART_BAUD*8)/(USART_BAUD*16)-1)
16

17
void USART_vInit(void)
18
{
19
  // Set baudrate
20
  UBRRH = (uint8_t) (USART_UBBR_VALUE>>8);
21
  UBRRL = (uint8_t) USART_UBBR_VALUE;
22
  // Enable receiver and transmitter
23
  UCSRB = (1<<RXEN)|(1<<TXEN);
24
  // Set frame format to 8 data bits, no parity, 1 stop bit
25
  UCSRC = (1<<USBS)|(3<<UCSZ0);
26
}
27

28
unsigned char USART_vReceiveByte(void)
29
{
30
  // Wait until a byte has been received
31
  while(!(UCSRA&(1<<RXC)));
32
  // Return received data
33
  return UDR;
34
}
35

36
int main(void)
37
{
38
  DDRB = 0xFF;
39
  unsigned char u8Data;
40
  // Initialize USART
41
  USART_vInit();
42
  
43
  while(1)
44
  {
45
    // Echo received characters
46
    u8Data = USART_vReceiveByte();
47
    while(!(UCSRA & (1<<UDRE)));
48
    UDR = u8Data;
49
  }
50
}

Am PC verwende ich einen UART-/USB-Konverter, sodass kein MAX232 nötig 
ist.

Gruß
Mister232
OP #3498166
Lesenswert?

Danke für die Antworten.
Also:
1. Die Kommunikation via UART-Interface habe ich schon einmal 
hinbekommen, auch ohne externes Quarz. Es soll ja auch nur ein 
Testaufbau sein. Leider habe ich das Programm von damals verlegt :-(
2.Ja, ich verwende den internen RC-Oszillator
3. Das CKDIV8 Fuse-Bit ist gesetzt
4. Ich verwende einen fertigen Adapter, welcher extra dafür da ist einen 
Mikrocontroller-UART direkt anzuschließen.
5.das Fuse-Bit INTRCOSC_8MHZ_14CK-65MS ist gesetzt
#3498174
Lesenswert?

Jens K. schrieb:
> Danke für die Antworten.
> Also:
> 1. Die Kommunikation via UART-Interface habe ich schon einmal
> hinbekommen, auch ohne externes Quarz. Es soll ja auch nur ein
> Testaufbau sein. Leider habe ich das Programm von damals verlegt :-(
> 2.Ja, ich verwende den internen RC-Oszillator
> 3. Das CKDIV8 Fuse-Bit ist gesetzt

gesetzt heißt "sie ist aktiv"?
Dann hast du nicht 8Mhz sondern nur 1Mhz.

Also: so ungefähr 8Mhz.
Gast #3498185
Lesenswert?

>Okay, stimmt. Ich habe FCPU entsprechend angepasst, doch leider kommt
>immer noch nur Müll an. Jetzt aber anderer Müll :-)

Dann nimm mal 4800 Baud. Bei 9600 ist der Fehler schon -7%.
Es sei denn du setzt U2X.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren