www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik pin abfragen,einfache frage zu tutorial


Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

hier schreibt einer so aufgeregt wie kurz vor dem jahreswechsel!


folgendes funktioniert nicht, wie ich es mir vorstelle:


.include "tn2313def.inc"      ;Definitionsdatei einbinden


         ldi r16, 0b00011000 ; 3, 4 als ausgang, rest eingang.
         out DDRB, r16      ;(portart bestimmen)

         ldi r16, 0b11111111 ; 3, 4 einschalten, rest pull-ups
aktivieren
         out PORTB, r16



loop:    sbic PINB, 6        ;"skip if bit cleared", nächsten Befehl
überspringen,
                             ;wenn Bit 0 im IO-Register PIND =0 (Taste
0 gedrückt)
         rjmp loop           ;Sprung zu "loop:" -> Endlosschleife

         cbi PORTB, 4        ;Bit 3 im IO-Register PORTB auf 0 setzen
-> grüne LED aus

ende:    rjmp ende           ;Endlosschleife



was passiert?
die led geht sofort aus (bzw. 'gar nicht erst an', avrisp abziehen
oder spannung aus/ein), ohne, daß ich den besagten knopf gedrückt
hätte.

meine beiden taster sind an 5 und 6, der pull-up ist aktiv (zumindest
messe ich etwas um 5V) und die pins werden durch die taster jeweils
erfolgreich gegen masse geschaltet.

wenn es also (?) kein hardware-problem ist, wo mache ich den denkfehler
im programm?

schonmal danke,

leif

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah moment, es könnte sich erledigt haben..

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@leif

schön daß du da drüber gesprochen hast und wir dir helfen konnten g

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[fortsetzung von
http://www.mikrocontroller.net/forum/read-1-234032.html#new]

Hi Bolle, vielen Dank für die Erklärung! Als Gegenleistung werde ich
mich ab jetzt bemühen, hin und wieder mal die Shift-Taste einzusetzen.

Hier erstmal der aktuelle Code (wie oben, nur nach Deinen Anweisungen
initialisiert):


.include "tn2313def.inc"      ;Definitionsdatei einbinden

        ldi r16, 0b11111111 ;wert ins Arbeitsregister r16 laden
         out PORTB, r16       ;Inhalt von r16 ins IO-Register DDRB
ausgeben (pull-ups einschalten, bzw wert ausgeben)

         ldi r16, 0b00011000 ;wert in r16 laden
         out DDRB, r16      ;r16 ins IO-Register PORTB ausgeben
(portart bestimmen)



loop:    sbic PINB, 6        ;"skip if bit cleared", nächsten Befehl
überspringen,
                             ;wenn Bit 0 im IO-Register PIND =0 (Taste
0 gedrückt)
         rjmp loop           ;Sprung zu "loop:" -> Endlosschleife

         cbi PORTB, 4        ;Bit 3 im IO-Register PORTB auf 0 setzen
-> rote LED aus

ende:    rjmp ende           ;Endlosschleife


Und diesmal wir die rote LED ausgeschaltet.

"leif steckt nochmal eben den AVRISP drauf, um zu checken, ob dann
wirklich beide LEDs leuchten, wie sein Gedächtnis aus unbekanntem Grund
einwendet. leif zieht den AVRISP ab, und, und SIE BLEIBEN AN! bis leif
den knopf drückt."

freu


Aber ich wollte noch was fragen, und .. zwar hat sich das gerade auch
geklärt. Wenn beim Einschalten alls Inputs sind, macht es auch nichts,
wenn ich alles (auch meine geplanten Ausgänge) logisch 1 setze.

Vielen Dank!

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr seid wirklich hilfsbereit!
Es ist echt erstaunlich, wieviel Freude eine kleine LED macht, wenn man
sie per Knopfdruck ausschalten kann :-)

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
vielen Dank an Bolle. Hat mir viel Schreibarbeit abgenommen und ich
könnts nicht besser erklären!

Vielleicht noch mein Beispiel warum mir das ins Auge gestochen ist. Ich
hab, als ich mit den AVRs angefangen hab auch einfach das Tutorial
abgetippt. Damals hab ich eine Phasenanschnittsteuerung für einen Motor
gebaut und mich immer gewundert warum der Motor beim Einschalten kurz
zuckt. Da ist genau das aufgetreten was Bolle erklärt hat. Der Ausgang
an welchem der Triac hing hatte kurz den falschen Zustand und hat den
Triac gezündet.

Ich wollte eigentlich keine große Diskusion losbrechen. Ist mir nur so
aufgefallen...

Gruß,
Michael

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwei Sachen könnte man noch ergänzen:

1. Es wäre sogar möglich, daß der Übergangszustand länger als nur einen
Maschinentakt anhält, nämlich dann, wenn just nach der Abarbeitung der
ersten Zeile und vor Abarbeitung der zweiten irgendein vermaledeiter
Interrupt auftritt.  Um dies zu unterbinden, müßte man die
Angelegenheit strengstensgenommen also sogar als critical section
behandeln, und die beiden Zeilen in "cli - sei" einschließen.

2. Für den Fall, daß der (wie gesagt i. a. unkritische)
Übergangszustand "Input mit aktiviertem Pullup" auf die
angeschlossene Peripherie doch unerwünschte Auswirkungen hat, gibt es
z. B. beim ATMega8 ein spezielles Konfigurationsbit, über das alle
Pullups an allen Ports zwangsdeaktiviert werden können ("PUD"-Bit im
"SFIOR"-I/O-Register).  Näheres dazu siehe Data Sheet zum ATMega8,
Seite 51.

Autor: Uwe Ortmann (schwede)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo...
ich hoffe ich bin hier richtig, da ich ein änliches Problem habe. Ich
verwende das STK500 und für den Anfang habe ich ein kleines Programm
geschrieben in dem ich eine 7-Segm-Anzeige betreibe. Sie soll "0"
anzeigen und solange ich eine Taste drücke soll die entsprechende Zahl
von 1..8 leuchten. Der Kontroller sollte folgendes machen:
wenn ich z.B. am Ausgang PortB 0b00000001 ausgebe, dann sind die
Pins1..7 = 0 also 0V und Pin0 = 1 also 5V. Die Spannung kommt aber nur
auf max. 1,2V (ohne angeschlossene LED), was bedeutet, bei 5V sollten
die LED's ausgehen da ich aber nur ca. 1V habe werden sie nur ein
klein wenig dunkler - bei genauem Hinsehen.

Kann mir jemand einen Tipp geben oder weiss vielleicht sogar, warum der
Kontroller an den Ausgangspins nicht volle 5V erreicht?
Falls es von Interesse sein sollte, ich hab das Programm angehangen.

Gruss Uwe

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.