Guten Morgen, ich habe in meinem Projekt eine ganz merkwürdige Anomalie, die ich, und jeden den ich anspreche nicht erklären kann. Ich habe zwei Arduino Due Boards und einen Quellcode, den ich im Atmel Studio verwalte und über den, in der Arduino IDE mitgelieferten, Bootloader "bossac.exe" übertrage. Das erste Arduino Board ist ein original von der Arduino Foundation, das zweite ein billiger China Klon. Ich verwende die Boards als Steuerungszentrale für einen Motorprüfstand und benutze einiges an Peripherie der CPU. Nun zu dem merkwürdigen Teil: wenn ich meinen Quellcode kompiliere und auf die Arduinos übertrage, funktioniert es nur auf dem China-Board. Natürlich könnte man auf die Idee kommen, dass das originale Board kaputt ist. Das kann ich allerdings ausschließen, weil ich die betroffenen Pins mit einer älteren Version meines Programms getestet habe. Auch Beispiele aus der Arduino IDE laufen ohne Probleme. Es gibt auch ein Unterschied im Baujahr der μCs, das China Board hat einen Chip von 2015, das Originalboard dagegen 2013. Es gibt Änderungen in den neuen Revisions - aber keine die mein Projekt betreffen. Ich hoffe Ihr habt eine Idee, die mich ein bisschen weiter bringt. Vielen Dank im Voraus!
Ich würde Dir vorschlagen, Dich zunächst auf den Fall zu konzentrieren, in dem "es nicht funktioniert". Poste bitte den Schaltplan des fraglichen Boards, sowie den, der darum herum aufgebauten Schaltung. Bitte auch ein Foto des Aufbaus. Dazu postest Du bitte, den Quellcode. Dazu schreibst Du bitte genau auf, was das Programm tun soll. Danach beschreibst Du, was stattdessen tatsächlich geschieht. Dann sehen wir mal weiter.
Die beiden Boards haben sicher unterschiedliche Bauteile. ATmega328P ist nicht gleich ATmega328P, wenn sie aus unterschiedlichen Serien stammen. Und dann sind da ja auch noch andere Bauteile drauf, die schon sichtbar unterschiedlich sind. Häufig ist auch ausschlaggebend, ob sich dein Programm und deine Hardware an die Vorgaben aus dem Datenblatt hält. Nur um ein Beispiel zu nennen: Im Datenblatt des µC steht vielleicht, dass ein Signal mindestens 3V haben muss, um als High erkannt zu werden. Eine Schaltung, die stattdessen nur 2,9V liefert, wird dann auf einigen Boards funktionieren, aber eben nicht auf allen. Ich denke, das ist jetzt auch genug herum geraten. Für mehr Hilfe solltest du erst einmal mehr Angaben zu deinem Projekt machen. Angefangen mit den Schaltplänen DEINER Schaltung und vor allem auch dem Schaltplan der beiden unterschiedlichen Ardunio Boards. Das Programm ist sicher auch von bedeutung.
Ich habe zwei ähnliche aber nicht identische Geräte, welche sich unter bestimmten geheimen Bedingungen irgendwie (das sage ich auch nicht) unterschiedlich verhalten. Warum? Die Bezeichnung China-Klon ist selbstverständlich absolut ausreichend und 100% eindeutig! Es gibt ja nur ein einziges Gerät mit der Bezeichnung. "China Klon" TM ist ein eigetragenes Warenzeichen der "Nachmach-ER GmbH".
Torben K. schrieb: > Was genau funktioniert denn nicht? Es ist eigentlich alles schon gefragt. Nur noch nicht von jedem. (Frei nach Karl Valentin) :-)
Bernd K. schrieb: > Stefan U. schrieb: >> ATmega328P ist >> nicht gleich ATmega328P > > Jetzt übertreibst Du aber. Keineswegs, selbst wenn es sich um Originalchips aus dem selben Werk handelt. Hast Du schon einmal etwas von Stepping oder Produktrevision etc. gehört? Im Datenblatt von Atmel gibt es ein Kapitel unter dem Namen "Errata"
Das kennt aber in diesem Fall nur Revision A, kann also ausgeschlossen werden.
> Das kennt aber in diesem Fall nur Revision A, > kann also ausgeschlossen werden. Stimmt doch gar nicht! Siehe Anhang.
Wozu soll diese Diskussion darüber, ob und welche Unterschiede es gibt führen? Das es Varianten gibt, ist doch ohnehin völlig unstrittig. Wollt Ihr die Unterschiede als Anhaltspunkt benutzen um dann über den unbekannten Fehler zu spekulieren? Ihr wisst ja noch nicht mal welche Varianten auf den beiden Boards bestückt sind und ob es verschiedene sind. Dann nehmt auch gleich die Variationen (spezifiziert und nicht spezifiziert) der anderen Bauteile, der Platinen, des Wetters und der Mondphase dazu. Nicht das irgendwas vergessen wird und man eine Vermutung über den Fehler nicht formuliert.
> Stimmt doch gar nicht! Siehe Anhang.
Welcher Atmel ist auf dem Arduino Due verbaut?
Aha. Nun, dann fehlt nur noch, dass mal jemand zusammenfasst, was wir bisher erreicht haben. Ich mach das mal: Nichts. :-)
Meine Glaskugel sagt ganz deutlich: Unterschiedliche/fehlende/falsche I2C Pullups. ohne Gewähr
Lothar schrieb: > Wozu soll diese Diskussion darüber, ob und welche Unterschiede es gibt > führen? Das es Varianten gibt, ist doch ohnehin völlig unstrittig. > > Wollt Ihr die Unterschiede als Anhaltspunkt benutzen um dann über den > unbekannten Fehler zu spekulieren? Es ging nur darum, daß der "Fehler" ohne detaillierte Angaben nahezu überall liegen kann, selbst wenn es scheinbar der gleiche Chip ist. Im Prinzip also genau das was du auch sagst. Hubert G. schrieb: > Atmel SAM3X8E ARM Cortex-M3 CPU. > > Also nichts mit Mega328P. Ups, da hat uns Stefanus ja einen Bären aufgebunden.^^ Ich hab da auch nicht weiter nachgeschaut ob es stimmt was er schreibt. So schnell kann's passieren mit den Details. ;-)
Jo, ich hatte Arduino Uno im Kopf. Keine Ahnung, warum. Vielleicht, weil der in den letzten Tagen immer wieder genannt wurde. Aber schön, dass ihr alle meinem Irrweg gefolgt seid :-)
Hallo an alle, vielen Dank für die vielen Rückmeldungen! Ich entschuldige mich für die wenigen Details bezüglich meinem Projekt und die des Boards. Für das chinesische Board habe ich keinen Schaltplan, nehme aber stark an, dass es den gleichen Layout besitzt. Bei der Webseite, in der ich das Board bestellt habe gibt es keine Dokumentation dazu außer dem Vermerk, dass es Revision 3 des Arduino Due Boards ist (wie das originale). Mein Projekt beinhaltet eine Kommunikationsschnittstelle über UART und eine Ansteuerung einer Drehstromsbrücke über die PWM Ausgänge für eine Asynchronmaschine. Die Kommunikationsschnittstelle hat die Aufgabe Befehle entgegen zu nehmen und Messdaten von A/D-Eingängen an eine MATLAB Anwendung zu übertragen. Dazu was nicht funktioniert: Wenn ich einen Befehl zum Starten des Motors versende, blickt kurz die RX LED des Boards auf und es geschieht nichts - ich kann also annehmen, dass der Empfang einer Botschaft nicht ordnungsgemäß verläuft. Die Übertragungsrate ist mit 460800 baud/s angesetzt. Habe allerdings auch 9600 baud/s ausprobiert -- das gleiche traurige Ergebnis. Den Quellcode als Fehlerquelle kann ich wie gesagt ausschließen, weil er auf dem anderen Board anstandslos ausgeführt wird. Den Aufbau meiner Testbench habe ich beigefügt, der Aufbau mit drei LEDs ist trivial. Die LEDs verwende ich nur als visuelles Feedback für die Ansteuerung der Drehstrombrücke. Grüße, Marat
Marat schrieb: > Das erste Arduino Board ist ein > original von der Arduino Foundation, das zweite ein billiger China Klon. Marat schrieb: > Nun zu dem merkwürdigen Teil: wenn ich meinen Quellcode kompiliere und > auf die Arduinos übertrage, funktioniert es nur auf dem China-Board. Der "Fehler", also das nicht nachvollziehbare Verhalten, tritt also auf dem Original Arduino auf. Marat K. schrieb: > Mein > Problem ist, dass ich nicht verstehen kann warum, weil es auf einem > baugleichen Board funktioniert. Dann hast Du also doch noch ein zweites Original-Arduino, eines geht nicht, das Andere schon. Dann ist das Eine wohl defekt. Oder verwendest du eine Art Bootloader oder so, welcher nicht gewechselt wird, so daß du deine Software lädst, aber das Gesamtpaket der Software (deine Software + Sonstiges) eben nicht identisch ist, da du den Bootloader nicht überschreibst. Dann kann es auch gut sein, daß die Hardware nur anders initialisiert und konfiguriert wurde. Marat K. schrieb: > Die Übertragungsrate ist mit 460800 baud/s angesetzt. Habe allerdings > auch 9600 baud/s ausprobiert -- das gleiche traurige Ergebnis. Wo hast du das von 460800 auf 9600 geändert? Auf dem Arduino oder dem PC? Marat K. schrieb: > Dazu was nicht funktioniert: > > Wenn ich einen Befehl zum Starten des Motors versende, blickt kurz die > RX LED des Boards auf und es geschieht nichts - ich kann also annehmen, > dass der Empfang einer Botschaft nicht ordnungsgemäß verläuft. Mein > Problem ist, dass ich nicht verstehen kann warum, weil es auf einem > baugleichen Board funktioniert. Wie wäre es, wenn du es mal systematisch angehst? Lade mal nur ein Testprogramm auf den "fehlerhaften" Arduino, welches nur die Aufgabe hat die Kommunikation über UART zu testen.
Ich glaube, ich muss mal systematisch zusammenfassen, was ich bisher gemacht habe um den Fehler zu finden. Ausgangssituation: - 1x original Arduino Due - 1x Arduino Due (China Klon, keine weitere Doku verfügbar) - 1x Quellcode in C (in Atmel Studio) zur Ansteuerung einer Drehstrombrücke. Befehl- und Datenaustausch über UART zwischen dem Arduino und einer MATLAB Anwendnung. PROBLEM: Der Quellcode wird bei gleichen Ausgangsbedingungen nur auf dem China-Klon ausgeführt. _____ Schritte, die ich vorgenommen habe, um die Ursache festzustellen: 1. Überprüfung der seriellen Schnittstelle Ich habe auf den "fehlerbehafteten" Arduino ein Beispielsketch aus der Arduino IDE übertragen und konnte Daten empfangen (d.h. an der UART-Unit des uC kann es nicht liegen. 2. Vermindern der UART-Übertragungsrate Es lag die Vermutung dass der "fehlerhafte" Arduino nicht mit der hohen Übertragungsrate zurechtkommt - deshalb habe ich im Quellcode die Baudrate Schritt für Schritt (230400, 115200, ...) vermindert und getestet mit gleichem Ergebnis - das Board reagiert nicht auf meine Befehle. 3. Überprüfung der PWM-Ausgänge Die Ausgänge werden verwendet um IGBT Treiber einer Drehstrombrücke anzusprechen. Um die Funktionsfähigkeit zu prüfen habe ich diese Pins in einem neu angelegten Projekt angesprochen. Keine Probleme festgestellt. _____ Als nächstes werde ich den Bootloader des originalen Arduinos aktualisieren, mit der Hoffnung auf Besserung. Auch über die Fuse-Bits in einem uC werde ich mich einlesen und mich hier melden. Danke für eure Rückmeldung, viele Grüße
@ Marat Bei allem Respekt: Du strapazierst meine Geduld (und vermutlich auch die der einiger Mitleser). Letztlich aber verursachst Du nur Dir selbst Schwierigkeiten und Zeitverlust, daher ist es kein Problem, das zu ignorieren. Ich persönlich ziehe es vor, Dich erstmal im Kreis laufen zu lassen bis Du erschöpft entweder aufgibst oder Dich reumütig ALLEN Nachfragen und Anweisungen fügst oder sogar einen Glückstreffer landest. Denn darum würde es sich im positiven Fall handeln: Nicht um das Ergebnis systematischer Analyse sondern um einen Zufall. Dennoch wünsche ich Dir, das Du Erfolg hast. So oder so.
Vorschlag: Ändere dein Programm so, daß zwischen Kommunikation und Ausführung des Befehls eine Pause liegt. In der Pause sendest du eine Empfangsbestätigung zurück oder läßt eine LED leuchten. Ich habe den Verdacht, daß deine Leistungsstufe den Arduino stört. Die eine Platine verkaftet das noch, die Andere nicht.
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.

