Forum: Mikrocontroller und Digitale Elektronik Unterschiedliches Verhalten bei zwei gleichen μC


von Marat (Gast)


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!

von Lothar (Gast)


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.

von Stefan F. (Gast)


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.

von Carsten R. (kaffeetante)


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".

von Bernd K. (prof7bit)


Lesenswert?

Stefan U. schrieb:
> ATmega328P ist
> nicht gleich ATmega328P

Jetzt übertreibst Du aber.

von Torben K. (tokuhila)


Lesenswert?

Was genau funktioniert denn nicht?

von Lothar (Gast)


Lesenswert?

Torben K. schrieb:
> Was genau funktioniert denn nicht?

Es ist eigentlich alles schon gefragt. Nur noch nicht von jedem. (Frei 
nach Karl Valentin) :-)

von Carsten R. (kaffeetante)


Lesenswert?

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"

von Torben K. (tokuhila)


Lesenswert?

Das kennt aber in diesem Fall nur Revision A, kann also ausgeschlossen 
werden.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

> Das kennt aber in diesem Fall nur Revision A,
> kann also ausgeschlossen werden.

Stimmt doch gar nicht! Siehe Anhang.

von Lothar (Gast)


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.

von Torben K. (tokuhila)


Lesenswert?

> Stimmt doch gar nicht! Siehe Anhang.

Welcher Atmel ist auf dem Arduino Due verbaut?

von Hubert G. (hubertg)


Lesenswert?

Atmel SAM3X8E ARM Cortex-M3 CPU.

Also nichts mit Mega328P.

von Lothar (Gast)


Lesenswert?

Aha. Nun, dann fehlt nur noch, dass mal jemand zusammenfasst, was wir 
bisher erreicht haben.

Ich mach das mal: Nichts.

:-)

von Einer K. (Gast)


Lesenswert?

Meine Glaskugel sagt ganz deutlich:
Unterschiedliche/fehlende/falsche I2C Pullups.
ohne Gewähr

von Carsten R. (kaffeetante)


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. ;-)

von Stefan F. (Gast)


Lesenswert?

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 :-)

von Marat K. (marat)


Angehängte Dateien:

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

von Carsten R. (kaffeetante)


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.

von Marat K. (marat)


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

von Lothar (Gast)


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.

von Carsten R. (kaffeetante)


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.

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
Noch kein Account? Hier anmelden.