FT232RL und Atmega32

OP #1441212
Lesenswert?
• ▲
▼
Hallo!

Ich habe folgendes Problem: Ich wollte mit nem FT232RL einen Converter 
bauen, damit ich nen Atmega32 an den USB Anschluss anschließen kann. Der 
FT232RL ist Bus Powered und der Atmega32 hat ne extra Stromversorgung. 
Ist es korrekt die Masse des Atmegas und des FT232RL miteinander zu 
verbinden?
Bis jetzt hab ichs so gemacht. Ich verwende einen externen 16MHz Quarz 
und wollte eine Baudrate von 9600 einstellen.
1
#include <inttypes.h>
2
#include <avr/io.h>
3
#include <util/delay.h>
4

5
#ifndef F_CPU
6
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
7
#define F_CPU 16000000UL  // Systemtakt in Hz - Definition als unsigned long beachten
8
                         // Ohne ergeben sich unten Fehler in der Berechnung
9
#endif
10
 
11
#define BAUD 9600UL      // Baudrate
12
 
13
// Berechnungen
14
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
15
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
16
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
17
 
18
/*#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
19
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
20
#endif*/
21

22
int uart_putc(unsigned char c)
23
{
24
    while (!(UCSRA & (1<<UDRE)));
25
    UDR = c;                     
26
    return 0;
27
}
28
 
29
 
30
void uart_puts (char *s)
31
{
32
    while (*s)
33
    {
34
        uart_putc(*s);
35
        s++;
36
    }
37
}
38
 
39
int main(void)
40
{
41
  UCSRB = (1<<RXEN)|(1<<TXEN);       
42
  UCSRC |= (1<<URSEL)|(3<<UCSZ0);
43
 
44
  UBRRH = UBRR_VAL >> 8;
45
  UBRRL = UBRR_VAL & 0xFF;
46
 
47
  uart_puts('a');
48
  uart_puts('b');
49
  uart_puts('c');
50
  uart_puts('d');
51
  uart_puts('e');
52
  uart_puts('f');
53
  while(1!=0)
54
  {
55
   uart_puts('g');
56
   _delay_ms(1000);
57
  }
58
}

Auf dem PC verwende ich HTerm, ebenfalls mit 9600Baud 8 Bit und 1 
Stoppbit. Ich bekomme auch jede Sekunde ein Signal nur kein g sondern ò 
oder so ähnlich (Code 245 bzw. 244). Muss ich beim FT232RL auch etwas 
einstellen, wie Invert RX/TX oder ne Baudrate?

Vielen Dank für eure Hilfe!

Martin
Gast #1441243
Lesenswert?
• ▲
▼
Das ö bedeutet, dass die Baudrate nicht stiimmt.

Warum steht in

#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1


+BAUD*8 ?

Die Formel ist fosc / (16 * Baud) - 1

Ohne das +Baud*8  klappts wahrscheinlich auch mit der Anzeige.

mfg
SH
#1441391
Lesenswert?
• ▲
▼
brumbaer schrieb:
> Das ö bedeutet, dass die Baudrate nicht stiimmt.
>
> Warum steht in
>
> #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1
>
>
> +BAUD*8 ?
>
> Die Formel ist fosc / (16 * Baud) - 1
>
> Ohne das +Baud*8  klappts wahrscheinlich auch mit der Anzeige.
>
> mfg
> SH

Das "+BAUD*8" ist zum Runden mit drin.

Im Prinzip ist das wie ein "+0.5" vor dem Abschneiden der 
Nachkommastellen.

Siehe auch AVR-Tutorial: UART: UART konfigurieren

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.