Forum: Mikrocontroller und Digitale Elektronik ATmega32 + FT232RL


von Phil W. (wurglitsphil)


Lesenswert?

Hallo Leute!

Möchte mit einem Atmega32 Zeichen auf den PC senden.
Als Converter arbeiter ein FT232R von FTDI.

Nur kommt leider lauter Mist am Hyperterminal an.

Baudrate und Code im Atmega funktionieren allerdings, da ich
das ganze auch schon mit einem MAX232 getestet habe.
Wenn ich den MC rausnehme und TX und RX vom FT232R verbinde kommen
die Daten die ich vom PC sende auch schön wieder zurück.

Nur beim Zusammenspiel zwischen MC und FT232R happert es ein wenig.

Der MC läuft noch auf dem internen Takt mit 8MHz - vielleicht
ist der Takt wirklich zu ungenau und der FT232R kommt damit nicht 
klar...

was meint ihr?

von Hannes J. (Firma: eHaJo.de) (joggl) Benutzerseite Flattr this


Lesenswert?

Hallo,

was für ne Baudrate hast du?
Hast du die Leitungen ausgekreuzt zw. ft232 und atmega (denk schon, 
sonst würd gar nix ankommen)
8MHz geht definitiv mit zB 9600Bd

von Phil W. (wurglitsphil)


Lesenswert?

Ja Baudrate ist 9600.
Leitungen habe ich ausgekreuzt, sonst würd gar nigs kommen, wie du schon 
gesagt hast...

das komische ist, dass mit dem max232 alles funktioniert,
das heißt am programm bzw. der Baudrateneinstellung im AVR kann es nicht 
liegen.

von Hannes J. (Firma: eHaJo.de) (joggl) Benutzerseite Flattr this


Lesenswert?

wie sieht der ft232 aus?
hast du dich an die standardschaltung vom datenblatt gehalten?
also Cs an 3V3 und so?

von ich (Gast)


Lesenswert?

Mit welcher Spannung versorgst du den mega32? Auf welcher Spannung liegt 
der VCCIO Pin vom FT232?

von Phil W. (wurglitsphil)


Lesenswert?

Am 3V3 Ausgang habe ich einen Kondensator gegen Masse.
Den Mega versorge ich mit 5V, mit der gleichen Spannung versorge ich 
auch den FT232.
Masse von USB und Platinenversorgung habe ich zusammengeschlossen

Aber ich sehe gerade dass ich VCCIO nicht beschaltn habe!
Das gefällt mir gar nicht, da nachträglich eine Leitung anlöten kann man 
vergessen oder?

von Hannes J. (Firma: eHaJo.de) (joggl) Benutzerseite Flattr this


Lesenswert?

nö, wenn du dünnen draht hast müsste das klappen, hab schon einiges an 
den ft232 gelötet ;)

wenn vccio keine spng hat weiß er nicht, auf welchem level er rx und tx 
machen soll. deswegen bekommst du wahrscheinlich müll, weil "ab und zu" 
ne 1 gesehen wird oder nicht.

von Philipp (Gast)


Lesenswert?

Wie ist das denn eigentlich zu sehen: Muss die Baudrate des Atmega die 
gleiche sein wie sie der Rechner erwartet? Oder sind das zwei getrennte 
vorgänge, also MC -> FT232 und FT232 -> PC und für jeden der Vorgänge 
muss also die Baudrate stimmen ... ich habe die Leitungen ebenso 
gekreuzt wie im Datenblatt angegeben, VCCIO an 5V angeschlossen wie den 
Atmel auch.

Wenn ich in der Konsole "echo "\n" > /dev/ttyUSB0" eingebe, leuchtet 
auch eine der LEDs, wenn ich allerdings mit dem Atmel sende, passiert 
gar nichts.

Ich habe allerdings auch die beiden Leitungen RTS# und CTS# nicht 
angeschlossen.

Hat jemand einen guten Debugging-Tipp? Vielleicht den, dass man auf 
jeden Fall den FT232 programmieren muss weil vorher gar nichts geht? Im 
Datenblatt finde ich auch keinen Hinweis auf eine 
Wald-und-Wiesen-Baudrate die immer geht oder so, daher denke ich dass 
die Baudrateneinstellung für den FT232 vom Treiber auf Rechnerseite 
übernommen wird.

von Hannes J. (Firma: eHaJo.de) (joggl) Benutzerseite Flattr this


Lesenswert?

Genau, der FT232 übernimmt die Baudrate vom Treiber.
Du musst am Rechner nur die selber Baudrate wie am Atmega einstellen 
dann klappt das auch ;-)
wenn du "nur echo blabla" machst kanns sein, dass "irgendwas" nicht 
stimmt mit deiner Schnittstelle.
Du musst auf jeden Fall ein stty davor machen damit zumindest die 
Baudrate stimmt.
Verwende mal gtkterm oder hterm, damit ist das Fehlerpotential schon mal 
weg.

> Wenn ich den MC rausnehme und TX und RX vom FT232R verbinde kommen
> die Daten die ich vom PC sende auch schön wieder zurück.

was ja bei jeder Baudrate funktioniert.

von Philipp (Gast)


Lesenswert?

Ach ja, hier noch der Code mit dem ich das getestet habe. Ich habe ihn 
mir hier aus dem Tutorial zusammenkopiert und nochmal im Datenblatt 
geschaut: Die C-Beispiele sind ähnlich.
1
#define F_CPU 20000000UL     // Systemtakt in Hz - Definition als unsigned long beachten 
2
                             // Ohne ergeben sich unten Fehler in der Berechnung
3
4
#define BAUD 9600UL      // Baudrate
5
 
6
// Berechnungen
7
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
8
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
9
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
10
 
11
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
12
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
13
#endif 
14
15
#include <avr/io.h>
16
#include <util/delay.h>
17
18
/* UART-Init Bsp. ATmega16 */
19
 
20
void uart_init(void)
21
{
22
  UCSRB |= (1<<TXEN);  // UART TX einschalten
23
  UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
24
 
25
  UBRRH = UBRR_VAL >> 8;
26
  UBRRL = UBRR_VAL & 0xFF;
27
}
28
29
int main (void){
30
31
  while (1) {
32
      while (!(UCSRA & (1<<UDRE)))
33
      {
34
      }
35
 
36
      UDR = 'x'; 
37
38
    while (!(UCSRA & (1<<UDRE)))
39
      {
40
      }
41
 
42
      UDR = '\n'; 
43
44
    _delay_ms(1000);
45
  
46
  }
47
48
49
  
50
}

von Hannes J. (Firma: eHaJo.de) (joggl) Benutzerseite Flattr this


Lesenswert?

sieht jetzt nicht wirklich komplex aus der code ;-)
ich berechne die baudrate immer lieber mit dem da:
http://www.gjlay.de/helferlein/avr-uart-rechner.html

da weiß ich dann auch, was in den registern steht...


_delay_ms() nimmt glaub ich nur 8bit-Werte

von Philipp (Gast)


Lesenswert?

Hm, ich hab jetzt beides geändert: 129 and UBRR und das Delay auf 255 ms 
runtergeschraubt. Trotzdem sehe ich nichts. Ich werde mal mit einem 
Oszilloskop schaueb, ob der AVR etwas an den Pins macht.

von Philipp (Gast)


Lesenswert?

Ok, habe was empfangen. Ich hab die Beispiele aus dem Datenblatt 1:1 
abgetippt und es kommt was an, einen richtigen Unterschied zum Tutorial 
konnte ich aber noch nicht feststellen. Naja, jetzt erfreu ich mich 
erstmal an den Zeichen die da über den Schirm flackern.

von Muetze1 (Gast)


Lesenswert?

In deinem Code definierst du F_CPU mit 20 MHz redest oben aber von 
internen 8 MHz. Auch wenn das hier keine Auswirkungen hat, sollte man 
sowas immer beachten und vor allem glatt ziehen!

von Philipp (Gast)


Lesenswert?

Muetze1, ich bin nicht der Originalposter sondern hab mich da nur 
eingehängt :)

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.