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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.