www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Senden/Empfangen Problem mit ATtiny 2313 und FTDI FT232R


Autor: Andreas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich habe ein kleines Problem mit der Verbindung zwischen einem FT232 und 
meinem ATtiny 2313.

Ich initialisiere den UART mit folgender Routine:
#define BAUDRATE 300

void uart_init()
{
    uint16_t ubrr = (uint16_t)( ((uint32_t)F_CPU/ (16 * BAUDRATE)) - 1);

    UBRRH = (uint8_t) ( ubrr >> 8);
    UBRRL = (uint8_t) (ubrr);

    // UART Receiver und Transmitter anschalten
    // Data mode 8N1, asynchron
    UCSRB = (1 << RXEN) | (1 << TXEN);
    UCSRC = (0 << UMSEL) | (0 << USBS) | (3 << UCSZ0);
}

Wie schon im Code steht soll der Controller auf asynchrone Operation, 8 
Datenbits, 1 Stoppbit und keine Parity gestellt werden.

Mein main sieht so aus:
int main()
{
  uint8_t in;
  DDRB |= 1 << 2;
  PORTB |= 0 << 2;

  DDRB |= 1 << 3;
  PORTB |= 1 << 3;

  uart_init();
  // wait on key
  while(1)
  {
    in = uart_getc_wait();
    if( in == 0x31)
      PORTB |= 0 << 3;
    uart_putc(in);
  }
}

Die LED's steuere ich im moment zu debugzwecken an...

Die Sende / Empfangsroutinen:
static inline int uart_putc( const uint8_t c)
{
    while( !( UCSRA & (1 << UDRE)));
    UDR = c;
    return 1;
}

static inline uint8_t uart_getc_wait()
{
    while( !( UCSRA & (1 << RXC)));
    return UDR;
}

Das Programmiere ich dann in den ATtiny 2313.

Wenn ich meine Schaltung mit dem PC verbinde, schaltet sich die rote LED 
(auf Port B2) erwartungsgemäß ein, wenn ich jedoch per HTerm 
(eingestellt auf 300 Baud 8N1 eine '1' an den Controller schicke (lt. 
HTerm 0x31), sehe ich zwar die richtigen Waveforms auf dem RXD Eingang 
des Controllers, es wir jedoch keine LED eingeschaltet. (Wie es ja sein 
sollte wenn eine '1' empfangen wird.)

Ausserdem wird nicht das richtige Zeichen zurückgesendet, es kommt nicht 
immer ein Zeichen zurück, und wenn empfange ich 0x80, also Binär 
10000000...

Hat jemand von euch eine Idee wo hier der Fehler liegen könnte?

mfg
Andreas

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Andreas,

Das nicht das selbe Zeichen 'zurück' kommt deutet auf unterschiedliche 
Baud-raten hin. Und da du auch keinen stabielen Takt benutzt (Quarz, oÄ) 
ist das wohl auch dein Problem.

Für U(s)ART operationen sollte man sich nicht auf den interne 
RC-Oszilator verlassen, der ist abhängig von der Umgebungstemperatur und 
der Versorgungsspannung.
Wenn nicht anders möglich unbedingt OSCCAL anpassen (RC-Calibration 
AppNote).

Als Tip der FT232R kann ein Taktsignal über einen der CBUSx pins liefern
z.B.: 12MHz auf CBUS0. (MProg tool von FTDI).

Gruß
Olaf

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Danke für die Infos, dachte ich kann den Internen Oszillator auch bei 
UART benutzen, vor allem da ich die Tests mit 300 Baud durchgeführt 
habe...

Werde deine Vorschläge mal ausprobieren.

mfg
Andreas

Autor: Michael H* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hot und cold vom usb (also + und -) sind vertauscht am ft232 
angeschlossen. ka, ob er das "kompensieren" kann.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich habe gerade noch im Datenblatt gefunden, das die CKDIV8 Fuse von 
Werk aus Programmiert ist, was einen Prescaler von 8:1 zwischenschaltet. 
Damit läuft der Controller auf 1MHz statt auf 8MHz, was auch die Daten 
erklärt die er empfängt. 1 Bit high, da die Samplingpunkte gerade auf 
eine passende Anzahl von high Bit fallen, den Rest low, da sich der 
USART ja im Ruhezustand befindet.

Hab der Gerät leider gerade nicht zur Hand, deswegen werd ich das morgen 
mal ausprobieren wie das ausschaut wenn ich es umstelle.

mfg
Andreas

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Holli

Danke für die Info, ist uns schon aufgefallen, allerdings sieht das nur 
im Schaltplan so aus, es ist nur die Beschriftung verdreht, am 
Mapping/PCB stimmen die Pins...

Der FTDI Chip wird auch richtig erkannt, und am Ausgang (RS-TTL) des 
FTDI kann man sich mit dem Oszi schön die Daten anschaun die man an der 
FTDI schickt.

mfg
Andreas

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.