Forum: Mikrocontroller und Digitale Elektronik UART-Interface mit Attiny2313


von Jens K. (mister232)


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

von KalterKaffee (Gast)


Lesenswert?

Wirkung: Leider empfange ich am PC nur Müll.

Ursache: Ich verwende übrigens kein externes Quarz.

von spess53 (Gast)


Lesenswert?

Hi

>Leider empfange ich am PC nur Müll.

>#define FCPU 8000000L

Interner RC-Oszillator?

MfG Spess

von holger (Gast)


Lesenswert?

CKDIV8 Fuse beachtet?

von Karl H. (kbuchegg)


Lesenswert?

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

Darauf geachtet, dass dann ein TTL-UART/USB Konverter nötig ist?

von chris du (Gast)


Lesenswert?

du hast den internen aber auch auf 8 Mhz eingestellt ?
geht über die Fusbits !

von Jens K. (mister232)


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

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Jens K. (mister232)


Lesenswert?

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

von holger (Gast)


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.

von Jens K. (mister232)


Lesenswert?

Cool danke! Jetzt klappt es. Vielen Dank für die ganzen und vorallem so 
schnellen Antworten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.