Externer Kristall des AVR funktioniert nicht mit UART

Ich habe also einen ATmega328P mit einem externen Quarz von 14,7456 MHz, Full-Swing-Einstellungen, und ich versuche, über UART und ein FTDI-Friend-Type-Gerät mit meinem Mac zu sprechen.

Wenn ich AVR Tx mit AVR Rx verbinde, kommen alle Bytes perfekt durch (ich kann es auf einigen 7-Set-Displays anzeigen). Wenn ich FTDI Rx mit FTDI Tx verbinde, kommen alle Bytes perfekt durch (auf dem seriellen Arduino-Monitor angezeigt). Die Baudraten beider Geräte sind gleich.

Wenn ich sie jedoch miteinander verbinde ...

Der serielle Monitor erhält Daten (Bildlaufleiste wird angezeigt und beginnt mit dem Scrollen), aber es werden keine Zeichen angezeigt. Es ist, als ob sie alle Leerzeichen wären (ich sende 'a' oder eine beliebige 8-Bit-Zahl). Wenn ich die halbe Baudrate wähle, dann erscheinen komische Zeichen, aber nicht das, was ich sende.

AVR empfängt Zeichen (Empfangen von Interrupt-Feuern), aber was es empfängt, ist entweder 0 oder die gleiche Zahl (z. B. 173, aber es scheint ziemlich zufällig) für jedes Zeichen, das ich sende.

Ich habe gegoogelt und gegoogelt und keine Lösung dafür gefunden. Irgendwelche Ideen? Hilfe dazu wird sehr geschätzt. (hoffentlich habe ich genug Informationen geliefert)

Binden Sie die Gründe der beiden Geräte zusammen?
Wie stellt man die Baudrate ein? Haben Sie speziell berücksichtigt, dass z. B. ein Arduino-Kern für Ihre bestimmte Taktfrequenz NICHT funktioniert?
Haben Sie den Fehler gemacht, TxD von Avr mit TxD von FTDI zu verbinden - und RxD von Avr mit RxD von FTDI zu verbinden? Es ist ein häufiger Fehler.
Bitte zeigen Sie uns Ihren Code und Schaltplan.
wie Michael Karas den Fehler erwähnt. Es sollte beachtet werden, dass Sie immer genau auf die Beschreibungen/Verbindungen auf den Platinen achten sollten. Manchmal benennt die Pin-Beschriftung auf Platinen nicht die eigenen Pins, sondern die Leitungen, an die angeschlossen werden muss. Der RX-Pin ist also mit TX beschriftet und umgekehrt.

Antworten (1)

Überprüfen Sie die folgenden Dinge:

  • ist Ihre Baudratenberechnung/Registereinstellung korrekt?
  • unterstützt Ihr Quarz die gewählte Baudrate (liegt der Baudratenfehler unterhalb der kritischen Schwelle)
  • ist Ihre F_CPU-Einstellung korrekt (die Berechnung des Baudratenregisterwerts kann davon abhängen)
  • Haben Sie Ihre Sicherungen richtig eingestellt, um den Kristall zu verwenden?
  • haben Sie RX-TX-Leitungsverbindungen verwechselt (siehe meinen Kommentar oben)
All diese Dinge überprüft (RX-TX-Verbindungen erforderten einige Versuche, aber sie sind korrekt). Ich habe den Quarz gewählt, um eine fehlerfreie Baudrate zu erhalten. Ein Freund versuchte dasselbe mit dem internen Oszillator und stellte fest, dass der interne Oszillator viele Fehler hatte ... keine Ahnung, wie das für Kristall funktioniert.