Forum: Mikrocontroller und Digitale Elektronik Taster an PortD funktionieren, an PortC nicht. Warum?


von Christian Schreiber (Gast)


Lesenswert?

Hallo,
ich möchte, dass mein Controller reagiert, wenn ich eine von 5 Tasten
drücke. Dazu habe ich bei meinem mega16 PortC auf Eingang geschaltet
und die Pullups aktiviert. Drücke ich den Taster, so wird der
entsprechende Pin an PortC und INT0 auf 0V gesetzt. Der Interupt wird
bei falender Flanke ausgelöst.
Die Interruptroutine soll nun nachgucken, welche Taste gedrückt wurde
und entsprechend reagieren.
Mein Code der Interruptroutine ist folgender:
interrupt1:
  sbis PINC, 1
  inc pls
  sbis PINC, 2
  ldi pls,0x00
  nop
  reti
Im Simulator des AVR Studio 4.12 funktioniert der Code genau so, wie
ich es erwarte. Die Befehle werden nur ausgeführt, wenn der
entsprechende Taster gedrückt wurde.(die Bits im Simulator
setzen/löschen)
Lade ich das Ganze aber in meinen Controller, wird immer ldi pls,0x01
ausgeführt, obwohl die Pins durchgehend 5V haben.(habe ich
kontrolliert)
Wenn ich die Taster aber an PortD anschließe und im Code oben PINC
durch PIND ersetze, funktioniert es komischerweise.
Habe ich etwas übersehen, was ich evtl. aktivieren/deaktivieren muss,
damit ich PORTC für I/O verwenden kann?
Oder hab ich mein Controller zerstört?

Gruß
Christian

von Dirk (Gast)


Lesenswert?

Ist das JTAG ( Portc )abgeschaltet?

von Christian Schreiber (Gast)


Lesenswert?

Danke für den Tip,
anscheinend ist das JTAG an.
Doch eigentlich sollte es aus sein.
Es sind bei mir alle Fusebits deaktiviert.
Auch OCDEN und JTAGEN.
Trotzdem vermute ich, dass der JTAG Interface noch an ist, denn
TDO(PC4) hat kein definiertes Level, obwohl die Pullups aktiviert sind.

Das trifft genau auf das Verhalten aus dem Datenblatt zu.
Da steht:
The TDO pin is left floating when the JTAG interface is enabled.
Auch das Setzen des JTD Bits in MCUCSR schaltet das Interface nicht
ab.
Was kann ich noch machen?

von Hannes L. (hannes)


Lesenswert?

Du kannst JTAG auch per AVR-Software deaktivieren:

 in wl,mcucsr               ;JTAG-
 sbr wl,1<<jtd              ;Interface
 out mcucsr,wl              ;deaktivieren
 out mcucsr,wl              ;(PortC aktivieren)

wobei "wl" ein oberes Register ist...

...

von Sebastian (Gast)


Lesenswert?

Hallo

Weis vieleicht jemand von euch wie man den jtag in bascom deaktivieren 
kann.

von Paul Baumann (Gast)


Lesenswert?

MCUCSR.JTD=1
müßte gehen.

MfG Paul

von Sebastian (Gast)


Lesenswert?

Danke

Hab es aber schon gemacht. War einfach bei die Fuses verändern

von Hc Z. (mizch)


Lesenswert?

> Es sind bei mir alle Fusebits deaktiviert.

Wie programmierst Du das Ding dann mit BASCOM?  Denn - wenn das stimmt - 
muss auch SPIEN deaktiviert sein.

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Paul Baumann schrieb:
> MCUCSR.JTD=1
> müßte gehen.

Aber nur, wenn man es zweimal direkt hintereinander macht. Wobei noch 
fraglich ist, ob Bascom den Bitnamen "JTD" kennt. Mir wurde mal von 
einem vertrauenswürdigen Bascom-Nutzer gesagt, dass man die Bitnamen 
nicht nutzen könnte, ich habe es daraufhin nie ausprobiert.

>
> MfG Paul

MfG, Consulter

von Paul Baumann (Gast)


Lesenswert?

@Kluchscheißender Kluchscheißer

Du hast Recht. Man muß sich heraussuchen, welches Bit in dem Register
MCUCSR ist. (Hier Bit 7)

MCUCSR.7=1 funktioniert. Ich habe es eben ausprobiert.

OT:
Dein alter Name war kürzer und einprägsamer...
;-)
MfG Paul

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.