www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega32 + FT232RL


Autor: Phil Wurglits (wurglitsphil)
Datum:

Bewertung
0 lesenswert
nicht 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?

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

Bewertung
0 lesenswert
nicht 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

Autor: Phil Wurglits (wurglitsphil)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

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

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit welcher Spannung versorgst du den mega32? Auf welcher Spannung liegt 
der VCCIO Pin vom FT232?

Autor: Phil Wurglits (wurglitsphil)
Datum:

Bewertung
0 lesenswert
nicht 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?

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

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

#define F_CPU 20000000UL     // Systemtakt in Hz - Definition als unsigned long beachten 
                             // Ohne ergeben sich unten Fehler in der Berechnung

#define BAUD 9600UL      // Baudrate
 
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
 
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
#endif 

#include <avr/io.h>
#include <util/delay.h>

/* UART-Init Bsp. ATmega16 */
 
void uart_init(void)
{
  UCSRB |= (1<<TXEN);  // UART TX einschalten
  UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
 
  UBRRH = UBRR_VAL >> 8;
  UBRRL = UBRR_VAL & 0xFF;
}

int main (void){

  while (1) {
      while (!(UCSRA & (1<<UDRE)))
      {
      }
 
      UDR = 'x'; 

    while (!(UCSRA & (1<<UDRE)))
      {
      }
 
      UDR = '\n'; 

    _delay_ms(1000);
  
  }


  
}        


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

Bewertung
0 lesenswert
nicht 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

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Muetze1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Philipp (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.