www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik FT232RL und Atmega32


Autor: Martin W. (martin123)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>

#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
#define F_CPU 16000000UL  // Systemtakt in Hz - Definition als unsigned long beachten
                         // Ohne ergeben sich unten Fehler in der Berechnung
#endif
 
#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*/

int uart_putc(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE)));
    UDR = c;                     
    return 0;
}
 
 
void uart_puts (char *s)
{
    while (*s)
    {
        uart_putc(*s);
        s++;
    }
}
 
int main(void)
{
  UCSRB = (1<<RXEN)|(1<<TXEN);       
  UCSRC |= (1<<URSEL)|(3<<UCSZ0);
 
  UBRRH = UBRR_VAL >> 8;
  UBRRL = UBRR_VAL & 0xFF;
 
  uart_puts('a');
  uart_puts('b');
  uart_puts('c');
  uart_puts('d');
  uart_puts('e');
  uart_puts('f');
  while(1!=0)
  {
   uart_puts('g');
   _delay_ms(1000);
  }
}

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

Autor: brumbaer (Gast)
Datum:

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

Autor: Martin W. (martin123)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist es korrekt die Masse des Atmegas und des FT232RL miteinander zu
> verbinden?

Nicht nur korrekt, sondern zwingend erforderlich.

Autor: Christian T. (shuzz)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Christian T. (shuzz)

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

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


MfG
Falk

Autor: brumbaer (Gast)
Datum:

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

Tja, manchmal ist die Hand schneller als der Verstand.

mfg
SH

Autor: Martin W. (martin123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also danke euch allen nochmal!

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.