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
Manuel schrieb: > Hat jemand eine Idee, wie ich den Port als Ausgabe nutzen kann?
1 | DDRC=AUSGABE_BITS; |
> 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.
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
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; |
@Andre Dein Code hat leider auch nicht funktioniert. Gruß Manuel
@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.
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).
@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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.