Forum: Mikrocontroller und Digitale Elektronik Atmega16 PortC p2-5 ohne Funktion


von Kde (Gast)


Lesenswert?

Hallo, bin noch recht neu in der microcontroller Welt und steh vor einem 
Problem. Hatte mir eine LED Brücke gebaut (8 LEDs) und diese an PortC 
0-7 angeschlossen. Dann diese alle mit DDRC = 0xFF; PortC = 0x00; alle 
auf Low Pegel gesetzt jedoch gehen nicht alle LEDs nur PC0 PC1 PC6 und 
PC7. Die andern sind ohne Pegel. Hab die selbe Programmierung mal für 
Port B gemacht dort gehen alle 8. könnt mir jemand sagen was ich falsch 
mache.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

MCUCSR = _BV(JTD); MCUCSR = _BV(JTD);

von Kde (Gast)


Lesenswert?

Für was ist das ?

von Oliver H. (Firma: OliverHeinrichs.de) (dobson)


Lesenswert?

Du musst JTAG in den Fuses deaktivieren. Gibt nen Artikel hier im Wiki.

von MWS (Gast)


Lesenswert?

Schaltet das JTAG Interface ab, geht auch dauerhaft über die Fuses.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kde schrieb:
> Für was ist das ?

Um die JTAG-Funktion dieser Pins zur Laufzeit auszuschalten.

Oder auch: RTFM.  Entweder das Datenblatt (die Alternativfunktionen
TMS, TDI, TDO, TCK auf den Pins sollten dich stutzig machen), oder
die FAQ:

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_fuses

von Oliver H. (Firma: OliverHeinrichs.de) (dobson)


Lesenswert?

https://www.mikrocontroller.net/articles/AVR_Checkliste
unter 1.2 findest du weiteres und nen noch hilfreicheren Link.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

MWS schrieb:
> geht auch dauerhaft über die Fuses.

Dann schaltet man sich aber auch die Debugfunktionalität ab.

Bei der MCUCSR-Variante bleibt sie noch offen: wenn man die beiden
Befehle im single step durchläuft, verletzt man die erforderlichen
timing constraints, und JTAG bleibt trotzdem an.

von Oliver H. (Firma: OliverHeinrichs.de) (dobson)


Lesenswert?

Jörg W. schrieb:
> wenn man die beiden
> Befehle im single step durchläuft, verletzt man die erforderlichen
> timing constraints, und JTAG bleibt trotzdem an.

Wie meinst du das? Ich würde das lt. Datenblatt Mega32 S.228 so machen:

The application software must write this bit to the desired value twice 
within four cycles to change its value.
1
ldi    TMP1, (1<<JTD)
2
out    MCUCSR, TMP1
3
out    MCUCSR, TMP1

von MWS (Gast)


Lesenswert?

Jörg W. schrieb:
> Dann schaltet man sich aber auch die Debugfunktionalität ab.

Hab ich nie benötigt.

> Bei der MCUCSR-Variante bleibt sie noch offen: wenn man die beiden
> Befehle im single step durchläuft, verletzt man die erforderlichen
> timing constraints, und JTAG bleibt trotzdem an.

Wenn man sich die Einleitung des TE, bzw. dessen Fragestellung ansieht, 
dann dürfte Deine Antwort die bekannten Böhmischen Dörfer sein.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

MWS schrieb:
> Wenn man sich die Einleitung des TE, bzw. dessen Fragestellung ansieht,
> dann dürfte Deine Antwort die bekannten Böhmischen Dörfer sein.

Kann schon sein. ;-)

Ich bin trotzdem kein Fan davon, sich irgendwelche Funktionalität
wegzufusen, wenn man sein Problem auch anderweitig gelöst bekommt.

Aber ja, wenn er gar nicht weiß, was er mit JTAG anfangen könnte
und keinen Programmer hat, der JTAG kann, dann kann man auch ruhigen
Gewissens die Fuse dafür abklemmen.

von Oliver H. (Firma: OliverHeinrichs.de) (dobson)


Lesenswert?

@ Jörg: Bitte geh doch noch mal auf den single step genauer ein. Ich 
programmiere nur ASM. Da brauche ich genau 2 Zyklen um die Daten ins 
Register zu schreiben.
Das oben gezeigte Beispiel setzt z.B. alle anderen Bits auf 0 und wäre 
ungeeignet. Also würde ich eher ein IN, AND, OUT nutzen um die 
Registerinhalte zu sichern, ist hier aber irrelevant.
Was meinst du mit Single Step?
Dauert es in C länger ein simples Register zu beschreiben?

von MWS (Gast)


Lesenswert?

Jörg W. schrieb:
> Ich bin trotzdem kein Fan davon, sich irgendwelche Funktionalität
> wegzufusen, wenn man sein Problem auch anderweitig gelöst bekommt.

Diese Funktionalität kann man auch wieder hinfusen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Oliver H. schrieb:
> Bitte geh doch noch mal auf den single step genauer ein.

Das ist eine Operation des Debuggers, nichts, was man irgendwie
programmieren könnte.

MWS schrieb:
> Diese Funktionalität kann man auch wieder hinfusen.

Nur, wenn man zum Wegfusen kein JTAG benutzt hat. ;-)

Man kann sich via SPI zwar nicht die SPIEN-Fuse wegfusen, aber man
kann sich sehr wohl via JTAG die JTAGEN-Fuse wegfusen (und die SPIEN
ebenfalls …).

von Kde (Gast)


Lesenswert?

Danke für die schnellen Antworten hat auch sofort geklappt.

von Oliver H. (Firma: OliverHeinrichs.de) (dobson)


Lesenswert?

Jörg W. schrieb:
> Das ist eine Operation des Debuggers, nichts, was man irgendwie
> programmieren könnte.

Habs verstanden. Danke.

: Bearbeitet durch User
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.