mikrocontroller.net

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


Autor: Manuel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Ausgeber (Gast)
Datum:

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

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Manuel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Andre R. (ryan87)
Datum:

Bewertung
0 lesenswert
nicht 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:
uint8_t mcucsr = MCUCSR;
mcucsr |= (1 << JTD);
MCUCSR = mcucsr;
MCUCSR = mcucsr;

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andre
Dein Code hat leider auch nicht funktioniert.

Gruß
Manuel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stell das JTAG per Fuse ab, dann hast du deine Ruhe.

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andre R. (ryan87)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm. Optimizer vom Compiler ist eingeschaltet?

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andre R. (ryan87)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Manuel (Gast)
Datum:

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

Gruß
Manuel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.