Forum: Mikrocontroller und Digitale Elektronik UART-Interface mit Attiny2313


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jens K. (mister232)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Wirkung: Leider empfange ich am PC nur Müll.

Ursache: Ich verwende übrigens kein externes Quarz.

von spess53 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi

>Leider empfange ich am PC nur Müll.

>#define FCPU 8000000L

Interner RC-Oszillator?

MfG Spess

von holger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
CKDIV8 Fuse beachtet?

von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht 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)


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

von Jens K. (mister232)


Bewertung
0 lesenswert
nicht 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) (Moderator)


Bewertung
0 lesenswert
nicht 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 Moderator
von Jens K. (mister232)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.