Forum: Mikrocontroller und Digitale Elektronik ATmega16 Probleme bei der PORTC Nutzung


von Manuel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
bei der Nutzung des PORTCs beim ATMEGA16 bekomme ich immer zusätzlich 
falsche Werte ausgegeben. Die JTAG-Schnittstelle hab ich temporär mit 
dem Befehl:
  MCUCSR |= 0x80;     // 1 in JTD Bit schreiben.
  MCUCSR |= 0x80;     // 1 in JTD Bit festnageln.
schon zweil mal deaktiviert. (Da ich noch weiter Programmieren muss, 
kann ich sie nicht bei den Fusebits deaktivieren.) Zur Progammierung hab 
ich manuell einen Reset ausgelöst.
Mein JATG Programmiergerät hab ich vom PORTC entfernt. Schließe ich eine 
LED-Leiste an, sehe ich  Bit 0, 1, 4, 6,7 aus und Bit 2, 3, und 5 
dimmen.

Hat jemand eine Idee, wie ich den Port als Ausgabe nutzen kann?

Danke für eure Hilfe.

Gruß
Manuel

von Ausgeber (Gast)


Lesenswert?

Manuel schrieb:
> Hat jemand eine Idee, wie ich den Port als Ausgabe nutzen kann?
1
DDRC=AUSGABE_BITS;

von ich (Gast)


Lesenswert?

> bei der Nutzung des PORTCs beim ATMEGA16 bekomme ich immer zusätzlich
> falsche Werte ausgegeben.

Und welche Werte erwartest du? In deinem Codebeispiel, sehe ich nicht, 
wo du den Port C überhaupt benutzst.

von Manuel (Gast)


Angehängte Dateien:

Lesenswert?

Danke für die Antworten
@Ausgeber:
DDRC 0xff; war im Ursprünglichen Code auch drin, nur beim Verschlanken 
zum Herausfinden des Fehlers hab ich es ausversehen mit gelöscht. Hab 
dies wieder eingefügt, gleiches Fehlerbild.

@ich:
siehe Anhang mit dem Code jetzt vollständig. Es soll nur 0 ausgegeben 
werden, selbst dies bereitet schon Probleme.

Gruß
Manuel

von Andre R. (ryan87)


Lesenswert?

Für das JTD Bit im MCUCSR gelten spezielle Regeln, du musst es zweimal 
mit den gleichen Werten beschreiben, soweit ich weiß innerhalb von 4 
taktzyklen.

Deine ODER-Operation braucht zulange bis das MCUCSR beschrieben wird.

Versuch es doch mal hiermit:
1
uint8_t mcucsr = MCUCSR;
2
mcucsr |= (1 << JTD);
3
MCUCSR = mcucsr;
4
MCUCSR = mcucsr;

von Manuel (Gast)


Lesenswert?

@Andre
Dein Code hat leider auch nicht funktioniert.

Gruß
Manuel

von Karl H. (kbuchegg)


Lesenswert?

Stell das JTAG per Fuse ab, dann hast du deine Ruhe.

von Manuel (Gast)


Lesenswert?

@Karl Heinz
In Prinzip ein guter Tipp, aber ich möchte den µC noch weiter 
Programmieren und hab nur einen JTAG ice nachbau, welcher nur TAG 
spricht und nicht SPI, deshalb kann ich die Fuse nicht abschalten.

von Andre R. (ryan87)


Lesenswert?

Hast du mal getestet ob das mit JTAG ausschalten per Code wirklich 
funktioniert? Und zwar nicht in dem du auf die LEDs achtest sondern 
versuchst das Ding wirklich mit JTAG zu debuggen (was ja nicht gehen 
dürfte wenn JTAG aus ist).
Dann könnte man zumindest schonmal genau sagen wo das Problem liegt.

Mein Code oben funktioniert in meinem Projekt übrigens wunderbar 
(ATMega32).

von Karl H. (kbuchegg)


Lesenswert?

Hmm. Optimizer vom Compiler ist eingeschaltet?

von Manuel (Gast)


Lesenswert?

@Andre
Debugging mittels JTAG funktioniert nicht - wie ja gewünscht.
Was könnte da noch passieren, was man ausschalten muss?


@Karl-Heinz
Optimizer auf -00 beim AVR-Studio eingestellt.

von Karl H. (kbuchegg)


Lesenswert?

Manuel schrieb:

> @Karl-Heinz
> Optimizer auf -00 beim AVR-Studio eingestellt.

Stell den mal hoch -Os. Nicht dass dir da der Compiler beim Portzugriff 
rumtrödelt. 4 Takte sind schnell verbraten.

von Andre R. (ryan87)


Lesenswert?

Kannst du den Schaltplan mal posten? Evtl. hast du hier auch ein 
Beschaltungsproblem.

Am Optimizer liegt es glaube ich nicht, Manuel schreibt ja das der JTAG 
Port wie erwartet deaktiviert wird.

von Manuel (Gast)


Lesenswert?

Danke Karl Heinz,
beim Einstellen der Optimierung auf -0s hat es dann geklappt ;-)

Gruß
Manuel

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.