Forum: Mikrocontroller und Digitale Elektronik FT232RL und Atmega32


von Martin W. (martin123)


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

von brumbaer (Gast)


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

von Martin W. (martin123)


Lesenswert?

Also mein Code hat gestimmt. Nur in der MAKEFILE war eine falsche 
Frequenz eingetragen. Tja sowas sieht man leider auch nicht sofort. Aber 
vielen Dank für deine Hilfe. DAs Problem ist somit gelöst!


Martin

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Ist es korrekt die Masse des Atmegas und des FT232RL miteinander zu
> verbinden?

Nicht nur korrekt, sondern zwingend erforderlich.

von Christian T. (shuzz)


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

von Falk B. (falk)


Lesenswert?

@  Christian T. (shuzz)

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

Eben, wer lesen kann ist klar im Vorteil.
1
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden


MfG
Falk

von brumbaer (Gast)


Lesenswert?

Danke, ich habe nur das plus gesehen und nicht weitergedacht.

Tja, manchmal ist die Hand schneller als der Verstand.

mfg
SH

von Martin W. (martin123)


Lesenswert?

Also danke euch allen nochmal!

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.