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
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.
- Du verwendest sehr wenig Stützkondensatoren. Ist die Stromversorgung stabil? - AVCC bitte noch beschalten. - Reg1117 nicht nach DB beschaltet (10µF an beiden Seiten)
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?
Wie ist Display-GND auf der Platine geroutet; vielleicht nur bis ISP1-GND ohne Verbindung zu IC3-GND? Analoge Frage zu Display-Vcc.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.