ATmega644P - Display über UART funktioniert sporadisch. Liegt es am fehlenden Quarz?

OP #2722920
Hallo,

ich arbeite gerade an einer Platine, welche an einem Dynamixel-Motor 
(http://www.robotis.com/xe/dynamixel_en) angeschlossen wird, um diesen 
zu
kalibrieren (ID setzen , etc..). Dazu schließe ich den Dynamixel mit 
Hilfe eines Max485 an den zweiten UART eines
ATmega644P an. Am ersten hängt ein Display 
(http://www.sparkfun.com/products/9395). Die Baudrate für den Motor 
beträgt 1000000 BAUD und die für den Display
9600 BAUD. Mein Problem besteht darin, dass mein Programm nur kurz nach 
dem flashen komplett funktioniert. Wenn ich den
Stecker ziehe oder den ISP abbaue, so wird zwar meist die 
Motorkommunikaton ausgeführt und die richtigen LED's angesteuert,
doch bleibt der Display leer.

Meine Frage wäre, ob dies an Fehlern bei der Übertragung liegen könnte, 
da ich keinen externen Quarz benutze. Sollte ich lieber einen nehmen und 
wenn ja, könnt ihr mir einen empfehlen?

Grüße,

HeDo

Bild der Platine: https://dl.dropbox.com/u/1566663/testerplatine.png
Moderator Persönliche Seite #2723003
He Do schrieb:
> Meine Frage wäre, ob dies an Fehlern bei der Übertragung liegen könnte,
> da ich keinen externen Quarz benutze.

Solange du mit 5 V und bei Zimmertemperatur arbeitest, ist es recht
unwahrscheinlich, dass da der Fehler liegt.

> Sollte ich lieber einen nehmen und

Wenn du im laufenden Betrieb damit arbeiten willst, ist zumindest ein
Keramikresonator zu empfehlen.

> wenn ja, könnt ihr mir einen empfehlen?

Praktisch jeder beliebige.  Keramikresonator statt Quarz hatte ich
schon genannt, der braucht keine separaten Last-Kondensatoren und
ist ein wenig billiger und ungenauer.  Dafür schwingt er nach dem
Schlafen schneller an als ein Quarz.
OP #2727031
Hi,

@Jörg: vielen Dank für die schnelle Antwort.

@Pete: Dafür muss ich mich entschuldigen, denn diese sind nicht auf dem 
Schaltplan verzeichent, weil ich für die Stromversorgung den 
SMPS2Dynamixel(http://www.trossenrobotics.com/store/p/5886-SMPS2Dynamixel-Adapter.aspx) 
benutze.

Es scheint also doch ein Softwarefehler zu sein, da ich keine 
Kommunikation zum Diplay bekomme, sobald ich den 2. UART aktiviere.

Hier der Initialisierungscode für den Motor UART:
1
void usartMotorInit() {
2
  MAX485_PORT_DIR_OUTPUT;
3

4
  //Disables transmitter & receiver
5
  //UART_MOTOR_STATUS_CONFIG_B &= ~(UART_MOTOR_ENABLE_RECEIVER | UART_MOTOR_ENABLE_TRANSMITTER);
6

7
  usartMotorFlushReceiver();
8
  uint16_t baud = (uint16_t)((FREQUENZ_OF_CPU / UART_MOTOR_BAUDRATE / 16) - 1);
9
  UBRR1H =  (uint8_t) (baud >> 8);
10
  UBRR1L = (uint8_t) baud ;
11

12
  // FIXME configure double speed check
13
  // if the setbaud.h macros set USE_2X, we need to enable double speed
14

15
  UCSR1A |= (1 << U2X1);
16

17
  // enable tranmitter & receiver
18
  UCSR1B = ((1 << RXCIE1) | (1 << TXCIE1) |  (1 << RXEN1) |  (1 << TXEN1));
19

20

21
  // set 8n1
22
  UCSR1C = (3<<UCSZ10);
23

24
  // set MAX485 to receive data
25
  MAX485_RECEIVER_ENABLED;
26
}

Die Makros sind wie folgt definiert:
1
#define MAX485_PIN                                  (1 << PC3)
2
#define MAX485_PORT_ADDRESS                         (PORTC)
3
#define MAX485_PORT_DIR_ADDRESS                     (DDRC)
4
#define MAX485_PORT_DIR_OUTPUT                      (MAX485_PORT_DIR_ADDRESS |= MAX485_PIN)
5
#define MAX485_RECEIVER_ENABLED                     (MAX485_PORT_ADDRESS &= ~(MAX485_PIN))
6
#define MAX485_TRANSMITTER_ENABLED                  (MAX485_PORT_ADDRESS |= MAX485_PIN)

Erkennt ihr hierin irgendeinen Fehler?
OP #2732858
Hallo an alle,

danke für eure Hilfe. Das Problem lag wohl bei den fehlenden 
Stützkondensatoren. Zudem war der JTAG eingeschaltet. Das dürfte 
erklären, warum es immer nach dem Flashen funtioniert hat.


Viele Grüße,

HeDo

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.