Forum: Mikrocontroller und Digitale Elektronik Ein Programm mit unterschiedlichen Auswirkungen


von Kk (Gast)


Lesenswert?

Grüß euch!

Ich stehe hier vor einem, etwas verwirrenden, Problem. Ich hab hier 
mehrer Controller vom Typ Mega88PA. Wenn ich nun die selbe Software auf 
unterschiedliche Controller (vom selben Typ natürlich) brenne bekomme 
ich unterschiedliche Verhalten oO! Ein Mal wacht er nicht mehr auf, das 
andere Mal funktioniert eine Berechnung nicht oder die zweite PWM geht 
nIcht mehr. Das ist doch sehr verwirrend für mich. Woran kann das 
liegen?

Weiß nicht ob es wichtig ist aber ich compiliere mit -0S.

Lg

von Geist (Gast)


Lesenswert?

Ist dein Programm vom intenen Takt abhängig? Wenn du Code postest, ist 
es für alle einfacher, dein Problem zu lösen.

von µC-Bastler (Gast)


Lesenswert?

Kk schrieb:
> Wenn ich nun die selbe Software auf unterschiedliche Controller (vom
> selben Typ natürlich) brenne bekomme ich unterschiedliche Verhalten oO!

Dann bekommen deine µCs wohl unterschiedliche Eingangssignale.

von MitLeser (Gast)


Lesenswert?

vielleicht unterschiedliche Fuses ?

von 42er (Gast)


Lesenswert?

Schon der erste Osterwochened-Rätsel-Thread ...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wahrscheinlich unterschiedliche Schaltungen...
Oder Schwankungen in der Spannungsversorgung...
Oder ein Programmfehler...
Oder kaputte uCs...
Oder.....
Oder..

Kk schrieb:
> Weiß nicht ob es wichtig ist aber ich compiliere mit -0S.
Ein Operating System braucht doch sowieso jeder PC.
BTW: welchen Compiler verwendest du?

von kk (Gast)


Angehängte Dateien:

Lesenswert?

Geist schrieb:
> Wenn du Code postest, ist
> es für alle einfacher, dein Problem zu lösen.

Wurde nun beigefügt.

µC-Bastler schrieb:
> Kk schrieb:
> Dann bekommen deine µCs wohl unterschiedliche Eingangssignale.

Nicht das ich wüsste.

MitLeser schrieb:
> vielleicht unterschiedliche Fuses ?

Sollten die selben sein. Das einzige was an den Fuses verändert wurde 
war die CKDIV, mit er mit den vollen 8Mhz läuft. Die hab ich bei allen 
anderen µCs auch dementsprechend gesetzt.

42er schrieb:
> Schon der erste Osterwochened-Rätsel-Thread ...
Sry, sollte eig. kein Rätsel-Thread werden :(. Aber ich wollte die Sache 
sehr allgemein halten. Anscheinend, kann nicht so allgemein auf das 
Problem geschlossen werden.

@Lothar:
Nein die äußeren Bedingung sind alle gleich. Es wird lediglich der 
Prozessor getauscht.

Lothar Miller schrieb:
> Ein Operating System braucht doch sowieso jeder PC.
> BTW: welchen Compiler verwendest du?

Also mit -0S meinte ich die Optimierungsstufe. Die ist auf -0S 
eingestellt.
IDE verwende ich AVR Studio 4 und den GCC Compiler.

Lg

von Andreas B. (andreas_b77)


Lesenswert?

kk schrieb:
> Also mit -0S meinte ich die Optimierungsstufe. Die ist auf -0S
> eingestellt.

Und die gibts halt nicht. Aber es gäbe -Os.

von Rolf M. (rmagnus)


Lesenswert?

Zu hohe oder zu niedrige Spannung? Starke Störungen auf der 
Versorgunsleitung? Fehlende Abblock-Kondensatoren? Fehlende 
RESET-Beschaltung? Nicht alle Versorgungsleitungen korrekt beschaltet?

> Also mit -0S meinte ich die Optimierungsstufe. Die ist auf -0S
> eingestellt.

Optimierung schaltet man mit -O, nicht mit -0 ein. Und eine 
Optimierungsstufe S gibt es auch nicht. Es gäbe höchstens s.
Keine Ahnung, was passiert, wenn man -0S angibt...

von kk (Gast)


Lesenswert?

> Optimierung schaltet man mit -O, nicht mit -0 ein. Und eine
> Optimierungsstufe S gibt es auch nicht. Es gäbe höchstens s.
> Keine Ahnung, was passiert, wenn man -0S angibt...

Ok, tut mir Leid. Dann also -Os. Hab das aus dem Kopf geschrieben^^.

Rolf Magnus schrieb:
> Zu hohe oder zu niedrige Spannung? Starke Störungen auf der
> Versorgunsleitung? Fehlende Abblock-Kondensatoren? Fehlende
> RESET-Beschaltung? Nicht alle Versorgungsleitungen korrekt beschaltet?

Wie gesagt. Es wird nur der Prozessor getauscht (Sockel zum wechseln).
Also denk ich mir das die äußeren Bedingung die Selben sind.

Lg

von spess53 (Gast)


Lesenswert?

Hi

>Wie gesagt. Es wird nur der Prozessor getauscht (Sockel zum wechseln).
>Also denk ich mir das die äußeren Bedingung die Selben sind.

Dann überprüfe mal, ob du wirklich das gleiche Programm geflasht hast.

MfG Spess

von Rolf M. (rmagnus)


Lesenswert?

kk schrieb:
> Also denk ich mir das die äußeren Bedingung die Selben sind.

Das mag ja sein, daß die immer die selben sind, aber wenn die außerhalb 
der Spezifikationen liegen, kann es durchaus passieren, daß die 
einzelnen Prozessoren aufgrund von Fertigungstoleranzen unterschiedlich 
darauf reagieren.
Es gibt da eigentlich nur zwei Möglichkeiten: Entweder die 
Umgebunsbedingungen passen nicht, oder deine Prozessoren sind alle 
kaputt.

von kk (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Es gibt da eigentlich nur zwei Möglichkeiten: Entweder die
> Umgebunsbedingungen passen nicht, oder deine Prozessoren sind alle
> kaputt.

Also wenn das wirklich alle Möglichkeiten sind, dann bin ich etwas 
verwirrt....
Ich bilde mir so etwas doch nicht ein^^. Nächste Woche kann ich der 
Sache noch ein Mal genauer auf den Grund gehen.

Danke für eure Hinweise.

Ich dachte, dass das ev. mit der Optimierungsstufe zusammenhängt. Ist 
eig. ungeschickt wenn ich mit -Os komiliere. Also welche Vorteile würde 
mir eine Optimierung bringen?

Danke für eure Hinweise.

von kk (Gast)


Lesenswert?

Vergesst das letzte "Danke für eure Hinweise."

von Rolf M. (rmagnus)


Lesenswert?

kk schrieb:
> Rolf Magnus schrieb:
>> Es gibt da eigentlich nur zwei Möglichkeiten: Entweder die
>> Umgebunsbedingungen passen nicht, oder deine Prozessoren sind alle
>> kaputt.
>
> Also wenn das wirklich alle Möglichkeiten sind, dann bin ich etwas
> verwirrt....

Es könnte höchstens noch ein defekter Programmer sein, der jedesmal ein 
paar Bytes fehlerhaft in den Prozessor schreibt, bzw. 
Versorgungsspannungs-Probleme während des Programmiervorgangs.
Also bist du dir absolut 100% sicher, daß alle Sachen, die bisher im 
Thread genannt wurden, definitiv korrekt sind?

> Ich dachte, dass das ev. mit der Optimierungsstufe zusammenhängt.

Dann würde der Fehler aber nicht vom Prozessor abhängen. Die einzelnen 
Prozessoren können nicht unterschliedlich auf einen Fehler durch 
Optimierungen reagieren, schließlich ist es ja überall das gleiche 
Programm.

> Ist eig. ungeschickt wenn ich mit -Os komiliere.

Nö, warum sollte es? Es ist sogar die empfohlene Einstellung.

> Also welche Vorteile würde mir eine Optimierung bringen?

Daß der Code kleiner und schneller ist als ohne.

von kk (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Es könnte höchstens noch ein defekter Programmer sein, der jedesmal ein
> paar Bytes fehlerhaft in den Prozessor schreibt, bzw.
> Versorgungsspannungs-Probleme während des Programmiervorgangs.

Ich verwende das STK500 als Programmer. Wie kann ich denn sicherstellen, 
dass das Programm richtig übertragen wurden? Hilft es die Option 
"Verify" zu verwenden? Obwohl ich mir fast nicht vorstellen kann, das da 
ein Fehler vorliegt.

> Also bist du dir absolut 100% sicher, daß alle Sachen, die bisher im
> Thread genannt wurden, definitiv korrekt sind?

Naja, 100% ist relativ :D!
Was genau meinst du?
Ich beschreib es noch ein mal kurz. Ich hab eine Schaltung vor mir die 
den dementsprechenden Sockel hat. Dann wird der erste Controller 
geflashed und auf den Sockel gesteckt und geschaut ob es funktioniert. 
Wenn es nicht funktioniert lass ich den Controller meistens noch weiter 
in der Schaltung um zu sehen wie er sich verhält.
Also such ich den Bug, wenn ich ihn gefunden hab nimm ich einen zweiten 
Controller, vom gleichen Typ, flashe den und steck diesen dann auf den 
Sockel. Nun geht aber ein anderer Teil des Programmes nicht der mit dem 
1. Controller aber wunderbar funktioniert hat.

Deswegen bin ich so verwirrt^^.

Rolf Magnus schrieb:
> Nö, warum sollte es? Es ist sogar die empfohlene Einstellung.
>> Also welche Vorteile würde mir eine Optimierung bringen?
> Daß der Code kleiner und schneller ist als ohne.

Uppps. Ich befürchte ich hab dann doch -O0 verwendet. Micht hat die 
Aussage "ist die empfohle Einstellung" etwas stutzig gemacht, da ich 
wusste das ich eine andere Verwende :D! Sry für die Verwirrung.

Lg

von Rolf M. (rmagnus)


Lesenswert?

kk schrieb:
> Ich verwende das STK500 als Programmer. Wie kann ich denn sicherstellen,
> dass das Programm richtig übertragen wurden? Hilft es die Option
> "Verify" zu verwenden?

Ja. Genau dazu ist sie da.

>> Also bist du dir absolut 100% sicher, daß alle Sachen, die bisher im
>> Thread genannt wurden, definitiv korrekt sind?
>
> Naja, 100% ist relativ :D!
> Was genau meinst du?
> Ich beschreib es noch ein mal kurz. Ich hab eine Schaltung vor mir die
> den dementsprechenden Sockel hat.

Die Frage war jetzt, ob diese Schaltung korrekt aufgebaut ist.

von Umpa Lumpa (Gast)


Lesenswert?

Am besten die ganze Schaltung posten.

von Stefan Z. (Gast)


Lesenswert?

Hi!
1
OSCCAL = 0x5F; // Manually adjusting the Internal Oscialator
Damit überschreibst du die interne Kalibrierung des RC-Oszillators. 
Jeder µC läuft dann mit einer anderen Geschwindigkeit - eventuell auch 
übertaktet.
http://www.atmel.com/Images/doc8161.pdf Seite 37

Noch ein Tipp:
1
DDRB |= (1 << PB1) | (1 << PB2)| (1 << PB3) | (1 << PB4);   // ...
2
...
Beim ersten Beschreiben der Register solltest du nicht mit "oder" 
verknüpfen sondern direkt beschreiben. Das verhindert den beliebten 
Fehler, eine init() Funktion während des Programms nochmals aufzurufen 
und sich zu wundern, warum die Register danach nicht korrekt eingestellt 
sind.
Besser:
1
DDRB = (1 << PB1) | (1 << PB2)| (1 << PB3) | (1 << PB4);   // ...
2
...

Noch ein Tipp (Geschmackssache):
Wenn du defines wie Full_Hour komplett groß schreibst, also FULL_HOUR, 
ist beim Überfliegen des Codes sofort ersichtlich, dass es sich um ein 
define und keine Variable handelt.

Ansonsten: Schön formatiert und gute Variablennamen gewählt!

von Stefan Z. (Gast)


Lesenswert?

P.S.:

Wie hoch ist die Betriebsspannung?
http://www.atmel.com/Images/doc8161.pdf Seite 316 unten

von Thomas B. (nichtessbar)


Lesenswert?

kk schrieb:
> Also such ich den Bug, wenn ich ihn gefunden hab nimm ich einen zweiten
> Controller, vom gleichen Typ, flashe den und steck diesen dann auf den
> Sockel. Nun geht aber ein anderer Teil des Programmes nicht der mit dem
> 1. Controller aber wunderbar funktioniert hat.

Versuch doch mal den Controller der in der Schaltung war mit dem 
Programm mit behobenen Fehler zu beschreiben.

Kanns sein dass du beim Fehler ausbessern einen anderen Programmteil 
beeinflusst/zerschießt?

von Rolf M. (rmagnus)


Lesenswert?

Hm, jetzt wo Thomas es sagt, klingt das:

kk schrieb:
> Also such ich den Bug, wenn ich ihn gefunden hab nimm ich einen zweiten
> Controller, vom gleichen Typ, flashe den und steck diesen dann auf den
> Sockel. Nun geht aber ein anderer Teil des Programmes nicht der mit dem
> 1. Controller aber wunderbar funktioniert hat.

als würde doch nicht, wie im ersten Posting behauptet, das selbe 
Programm auf allen Controllern probiert, sondern immer ein anderes. Da 
wäre es natürlich sehr wichtig, was nun tatsächlich der Fall ist.

von kk (Gast)


Angehängte Dateien:

Lesenswert?

Wow, hier ging ja was weiter.
Sry, war bei Bekannten. Ostern unso :)!

Danke für die viele Vorschläge!

Schaltung werde ich nachliefern.


Stefan Zimmermann schrieb:
> Damit überschreibst du die interne Kalibrierung des RC-Oszillators.

Hey! Ja, dass wollte ich auch so. Da ich die Zeit messe hab ich den 
Oszillator versucht anzupassen. Die sind alle ein wenig unterschiedlich. 
Ich muss 55 Sekunden messen. Jedenfalls stoppe ich die Zeit mit und wenn 
er vor oder nach 55 Sekunden die LED blinkt, dann korrigiere ich 
dementsprechend. Da ich mir die Zeit für 55 Sekunden und 8MHz 
ausgerechnet und die 55 Sekunden dann so gut wie möglich einstelle, hab 
ich mir gedacht, dass ich dadurch Nahe an 8MHz liege. Wenn du verstehst 
was ich meine^^.

Deine anderen Verbesserungsvorschlag hab ich einfließen lassen.

Stefan Zimmermann schrieb:
> Schön formatiert und gute Variablennamen gewählt!
Danke.

Stefan Zimmermann schrieb:
> Wie hoch ist die Betriebsspannung?
5V

Stefan Zimmermann schrieb:
> Noch ein Tipp (Geschmackssache):
Hast natürlich recht.


@letzten beiden Post:
Da könnt ihr natürlich auch recht haben.
Ich hoffe das ich mir das Morgen oder Übermorgen wieder genauer 
anschauen kann.

lg

von Stefan Z. (Gast)


Lesenswert?

kk schrieb:
> Hey! Ja, dass wollte ich auch so. Da ich die Zeit messe hab ich den
> Oszillator versucht anzupassen. Die sind alle ein wenig unterschiedlich.
> Ich muss 55 Sekunden messen. Jedenfalls stoppe ich die Zeit mit und wenn
> er vor oder nach 55 Sekunden die LED blinkt, dann korrigiere ich
> dementsprechend. Da ich mir die Zeit für 55 Sekunden und 8MHz
> ausgerechnet und die 55 Sekunden dann so gut wie möglich einstelle, hab
> ich mir gedacht, dass ich dadurch Nahe an 8MHz liege. Wenn du verstehst
> was ich meine^^.

Ja, das verstehe ich. Allerdings musst du das für jeden Controller (also 
jeden einzelnen IC) extra machen. In der Fertigung haben die Controller 
Toleranzen.
Bei dir würde der Ablauf so aussehen:
Der Controller lässt eine LED für 55 Sekunden leuchten. Da sein interner 
Oszillator nicht genau ist, werden es wahrscheinlich nicht genau 55 
Sekunden sein. Du misst also die Zeit mit ner Stoppuhr. Je nachdem, ob 
die Zeit zu lang oder zu kurz ist, musst du OSCCAL für diesen Controller 
verkleinern oder vergrößern. Das musst du bei jedem Controller machen.

Das ganze gilt aber nur, wenn das unterschiedliche Verhalten in deinem 
Controller auch mit einem ungenauen Oszillator zusammen hängt.

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.