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

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