mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmel mega16 verschiebt ungewollt


Autor: Michael Welker (herr_welker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich will einen atmega16 Microprozessor programmieren.
Ich benutze das STK500 und das AVR Studio 4.

Ich will, dass wenn ich an Port A einen Taster drücke die dazugehörige 
LED an Port B leuchtet.

Also so:

PA0 = PB0
PA1 = PB1 etc.

Zurzeit ist es so:

PA1 = PB3
PA2 = PB4
PA3 = PB5
PA4 = PB6
PA5 = PB7
PA6 = nichts
PA7 = nichts
#include "m16def.inc"

loop:
  ldi  R18, 0x00  ;schreibe 00 in das Register 18
  out  DDRA, R18  ;setzt kompletten PortA als Eingang
  
  in  R22, PinA   ;kopiere PinA in Register 22

  ldi  R18, 0xFF  ;schreibe FF in Register 18
  out DDRB,R18    ;setzt kompletten PortB als Ausgang
  out PORTB,R22   ;aktiviert LEDs

  rjmp loop       ;springe zu Loop

Kann mir jemand helfen?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast nen Stecker um eine Reihe verschoben aufgesteckt


Peter

Autor: Michael Welker (herr_welker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne, das wars nich.

10 poliges Kabel auf 10 poligen Stecker.

Hab das Kabel mal ausgetauscht. Etz funktionierts.

Danke.

Autor: Hans Josef (hjm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

könnte sein was Peter schreibt.

Zudem wäre es besser, die E/A-Konfiguration zu Anfang ausserhalb der 
Schleife zum machen.

#include "m16def.inc"

  clr  R18        ; Reg löschen
                  ; Pull-ups aus, TriState schalten
  out  PORTA,R18  ; Port A löschen
  out  PORTB,R18  ; Port B löschen

  out  DDRA,R18   ; alles als Eingang
  neg  R18        ; Reg invertieren
  out  DDRB,R18   ; Port B auf Ausgang

loop:
  in  R22, PinA   ;kopiere PinA in Register 22

  out PORTB,R22   ;aktiviert LEDs

  rjmp loop       ;springe zu Loop

alternativ kannst Du auch:
#include "m16def.inc"

  clr  R18             ; Reg löschen
  out  PORTA,R18       ; Port A löschen
  out  PORTB,R18       ; Port B löschen

  ldi  R18,0b00000000  ; Muster 0=Eingang, 1=Ausgang
  out  DDRA,R18        ; PORT A Richtung setzen
  ldi  R18,0b11111111  ; Muster 0=Eingang, 1=Ausgang
  out  DDRB,R18        ; Port B Richtung setzen

loop:
  in  R22, PinA   ;kopiere PinA in Register 22

  out PORTB,R22   ;aktiviert LEDs

  rjmp loop       ;springe zu Loop

Da, kannst Du dann auch direkt sehen, welche Port-Pins wie geschaltet 
sind.


Grüße
Hans-Josef

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.