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