Forum: Mikrocontroller und Digitale Elektronik Port Intialisierungsproblem Atmega644


von Tobias (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Problem mit dem Initialisieren meiner Ports auf meinem 
Atmega644.
Mein altes, selbstgeschriebenes Programm funktioniert einwandfrei. Es 
werden die richtigen Ports als Ausgang definiert, und auch die LEDs 
leuchten, wenn der Port auf 1 gesetzt wird.
Jetzt habe ich Aufgrund eines anderen Problems den MCP2515-Code von 
Kreatives-Chaos hergenommen, um zu testen warum das von mir 
Programmierte Programm nicht funktioniert.
Nachdem ich die default Werte geändert habe, lies sich das Programm auch 
ohne Probleme kompilieren. Was mir aber auffiel war, dass keine LEDs 
leuchteten, obwohl ich ganz am Anfang der main-Funktion meinen PORTB als 
Ausgang gesetzt habe, und auch dann mit 1 beschrieben habe (So wie in 
meinem alten Programm auch).
Jetzt habe ich versucht, das ganze per Simulator zu debuggen, und dabei 
fiel mir auf, dass bei folgenden Zeilen schon nicht das gewünschte 
Funktioniert:
1
DDRB = 0x03;
2
PORTB = PORTB | 0x02;

Im Debugger ist zu sehen, dass der komplette Port B noch auf Eingang 
steht.
Ich weiß aber leider nicht, warum dies so ist.

Vielleicht hat ja jemand von euch eine Erklärung dafür.

Grüße,

Tobias

von holger (Gast)


Lesenswert?

>Im Debugger ist zu sehen, dass der komplette Port B noch auf Eingang
>steht.
>Vielleicht hat ja jemand von euch eine Erklärung dafür.

Du hast den Debugger auf der Zeile

DDRB = 0x03;

angehalten? Machs mal eine Zeile dahinter.

von Lutz Schulze (Gast)


Lesenswert?

Tobias schrieb:
> Im Debugger ist zu sehen, dass der komplette Port B noch auf Eingang
> steht.
Der Befehl gilt erst als abgearbeitet, wenn der Debugger die 
entsprechende Zeile bereits passiert hat.

von Tobias (Gast)


Lesenswert?

Das gleiche passiert auch, wenn ich mehrere Zeilen weiter 
gehe...deswegen ist es für mich nicht verständlich warum der Debugger 
meine Anweisung nicht ausführt. Genauso wie der µC selbst nicht.

von Karl H. (kbuchegg)


Lesenswert?

Steht deine Optimierungseinstellung des Compilers auf -Os?

Wenn ja, dann darfst du den Debugger nicht zeilenweise alles glauben. 
Der Compiler hat den Code umgeordnet um ihn schneller/kleiner zu machen. 
D.h. das was auf dem µC tatsächlich läuft stimmt nicht mehr 
buchstabengetreu mit dem überein, was du programmiert hast. Die 
Auswirkungen sind dieselben, aber die Reihenfolgen können andere sein.

von Tobias (Gast)


Lesenswert?

Ja stehen sie.
Was mich aber wundert ist, dass wenn ich mein anderes Programm debugge, 
und genau dort die zwei Zeilen einfüge, es ohne Probleme funktioniert.
Selbst wenn der Compiler alles anders ordnet, warum leuchtet dann die 
LED nicht auf meinem µC? Die ersten zwei Anweisungen müssten ja 
zumindest ausgeführt werden.

Ich habe zu testzwecken einfach einmal eine while(1) Schleife um die 
zwei Anweisungen gemacht. Trotzdem passiert auf dem µC nichts.
Kann es sein das ich mein Projekt falsch angelegt habe? Muss sich das in 
einem bestimmten Ordner befinden? Wobei ich dem µC ja auch mit der 
richtigen Hex-Datei flashe.

von Karl H. (kbuchegg)


Lesenswert?

Tobias schrieb:

> Trotzdem passiert auf dem µC nichts.
> Kann es sein das ich mein Projekt falsch angelegt habe?

Es kann alles sein, inklusive dass du den falschen µC eingestellt hast.

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.