Unterschiedliches Verhalten bei zwei gleichen μC

Gast #4555249
Lesenswert?

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!
Gast #4555269
Lesenswert?

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.
Gast #4555281
Lesenswert?

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.
#4555325
Lesenswert?

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".
Gast #4555382
Lesenswert?

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.
#4555459
Lesenswert?

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. ;-)
#4560051
Lesenswert?

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
Angehängte Dateien:
#4560078
Lesenswert?

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.
#4560137
Lesenswert?

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
Gast #4560172
Lesenswert?

@ 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.
#4560173
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren