www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit sbis(c)


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hab ein sonderbares Problem mit dem Befehl sbis(c) beim ATmega16.
Ich versuche am PortC den Zustand der Pins abzufragen, PortC wurde mit
0x00 im DDRC als Eingang definiert.
Hier der Ausschnitt aus dem Porgramm:

                  ...
      ldi temp1, 0x00    ;Port c = Eingang
      out DDRC, temp1

      ldi temp1, 0x00    ;Port d = Eingang
      out DDRD, temp1

              ldi temp1, 0xFF      ;Port b = Ausgang
              out DDRB, temp1

      ldi temp1, 0xFF    ;Port a = Ausgang
      out DDRA, temp1

      rcall lcd_init       ;Display initialisieren
loop:              rcall lcd_clear      ;Display löschen

      sbis PINC, 4
      rcall LabelA
      sbis PINC, 1
                  rcall LabelB
      sbis PINC, 2
      rcall LabelC
      sbic PINC, 0
      rcall LabelD
      rjmp loop
                  ...
Mein Problem:
Nur Pin 0 und 1 werden quasi vom Controller erfasst!! Bei den
restlichen Pins kann ich machen was ich will, er überspringt nicht den
nächsten Befehl!!
z.B. Pin (Bit) Nr. 4, ich lege +5V an den Pin aber er überspringt nicht
den Befehl "rcall LabelA"!! So ist es auch bei den restlichen außer
Pin 1 und 0. Selbst wenn ich die Bits vertausche, also Bit 0 oder 1 auf
LabelA beziehen lasse, funktioniert dann zwar das überspringen von
LabelA aber das war's auch schon.
Die Reihenfolge ist auch egal nur Pin 0 und 1 funktionieren.
Ich habe den Controller schon getauscht und die Spannungen
nachgemessen. Also am Controller und der Spannung scheint es dann wohl
nicht zu liegen.

Hab ich irgendwas nicht beachtet? Wo liegt der Hund begraben?

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hab ich irgendwas nicht beachtet? Wo liegt der Hund begraben?

Schaut ganz danach aus, als hättest Du die JTAG-Schnittstelle
aktiviert.
Pins 2-5 am PORTC sind JTAG-Pins.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, du hast recht!! Danke, darauf wäre ich nie gekommen!

Man muß JTAG disablen, ist anscheinend immer an. Im MCUCSR Bit Nr.7 auf
1 setzen. Wichtig: man muss das ganze zweimal hintereinander machen!!!

ldi temp1, 0b10000000
out MCUCSR, temp1
out MCUCSR, temp1

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst auch das JTAGEN-Fusebit auf 1 setzen,
dann brauchst Du es nicht immer per JTD-Bit abschalten.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, auch eine Möglichkeit.

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.