www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Warum funktioniert das nicht?


Autor: Vitali Tscheroun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
wer kann mir sagen warum dieses Programm in meinem AVR (AT90S4433)
nicht funktioniert?

Gruss.
Vitali.

loop:
      in r16, PIND
            ldi r17,0x1
            cpse r16,r17
      rjmp loop
      cbi PORTB,1         ;LED 1 ein
      rjmp loop

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich!

Gruß, Frank

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, so, so wäre es richtiger und kürzer:

LOOP:
  sbis  PIND, 1  ; Wert hängt davon ab, welchen Pin Du benutzt
  rjmp  LOOP
  cbi  PORTB, 1

Dein Programm verläßt die LOOP-Schleife nie.

Gruß, Frank

Autor: Vitali Tscheroun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein,das Problem ist, das die LED nich angeht.
Es ist ja nicht das ganze Programm,nur ein Ausschnitt.
Der Befehl "cpse" wird nicht ausgeführt,aber warum?
Gruss.
Vitali.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
woher soll hier jemand wissen, was du in r16 einliest? Ausgeführt wird
cpse natürlich, allerdings eben nicht das überspringen. Und das heist,
du liest nicht 0x01 ein.

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi!

ich hab zwar keine Ahnung von Assembler, aber könnte es so
funktionieren? :
;*****************************************************
loop:
      in r16, PIND
            ldi r17,0x1
            cpse r16,r17
                     ;hier rjmp auslassen
      cbi PORTB,1         ;LED 1 ein
      rjmp loop
;******************************************************

MFG Nik

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, meine Aussage war in der Tat nicht vollständig. Also, entweder
liest Du in r16 keine 1 ein und damit wird die Schleife nie verlassen
oder Deine LED wird nicht mit Low-Pegel, sondern mit High-Pegel
eingeschaltet (also CBI durch SBI ersetzen).

Gruß, Frank

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... oder beides trifft zu.

Gruß, Frank

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so, dann wird cpse sowas heissen wie, wenn gleich dann nächste Zeile
überspringen...dann wird mein Vorschlag wohl noch weniger funktionieren
:)

Nik

Autor: Vitali Tscheroun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lese schon das richtige ein,mein Problem ist das die ganze
Geschichte im AVR-Simulator funktioniert,bloss nicht im AVR.
Nik,ich glaube wenn ich rjmp auslasse dann macht er mir die LED sifort
an,die soll aber erst dann angehen wenn r16 gleich r17 ist,also
wenn bit 1 an PIND gesetzt ist.

Vitali.

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CPSE = ComPare and Skip if Equal, oder so ähnlich.

Autor: Vitali Tscheroun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe schon alles ausprobiert,hi und lo Pegel getauscht u.s.w.
Es tut sich einfach nichts,im Simulator funktionierts aber,ich weiss
auch nicht,am AVR kanns nicht liegen,den habe ich auch schon
getauscht.

Vitali.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist doch zum junge Hunde kriegen :-(
Dann setz doch verdammt noch mal den vollständigen Code hier rein, ist
das so schwierig? Da kann man doch wirklich die Lust verlieren.
Immer wieder dasselbe Theater, thread geschlossen für mich.

Autor: Vitali Tscheroun (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Kein Problem,also in der Datei ist der vollständige Code.
Wenn taste 1 gedrückt wird,leuchtet led 1,wenn taste 2 gedrückt wird
erlischt die und das gleiche mit anderen leds bloss mit anderer
tastenkombination.
Vitali.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Mit Word kann ich leider nichts anfangen. Plain-ASCII oder PDF.

Matthias

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wut verflogen...
Setz mal in der Initialisierung PORTD auf 0xff.

Autor: Vitali Tscheroun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin noch auf der Arbeit, mache ich aber sofort wenn ich wieder zu hause
bin.
Danke.Ich hoffe das geht.
Vitali.

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@crazy horse: Gute Idee, ich denke auch, daß die Eingänge nicht auf
definierten Pegeln liegen. Aber die Pull-Ups ziehen alle Eingänge auf
"1" und da wird die Abfrage mit "0x1" auch nicht funktionieren, da
Bit 1-7 auf low liegen müssen.
@Vitali: Bei der Abfrage mit cpse mußt Du alle 8 Pins des PORTD auf
definierte Pegel legen. Wie sieht Deine Hardware aus?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stimmt, Programm muss überarbeitet werden.

Autor: Vitali Tscheroun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was die Hardware betrifft,habe ich das STK 500.
Habe gestern abend und auch heute schon alles probiert,geht aber
nicht.
thkais: was meinst du genau mit definierte Pegel?

Vitali

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du einen Port-Pin des Controllers als Eingang definierst, wird er
hochohmig. Das wiederum bedeutet, daß er alle möglichen Einstreuungen
einfängt. Wenn Du nun mit "0x01" vergleichst, muß Pin 0 des
Eingangsports auf logisch "1" und alle anderen Bits auf logisch "0"
liegen. Hast Du beispielsweise einen der Port-Pins nich beschaltet bzw.
auf definiertem Pegel (GND oder VCC) liegen, wird diese Bedingung nie
erfüllt. Im Simulator kannst Du die Pegel der Portpins einfach mit
einem Häkchen ändern - in der Realität sieht das anders aus.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ergänzung: die aktivierten pullups (PORTx=0xff) bewirken, dass der
ansonsten offenen Eingang H-Pegel bekommt, ein Schalter nach Masse
bewirkt dann einen L-Pegel (beim STK500 ist das so, falls du diese
Schalter nimmst).
Dein Programm müsste dementsprechend so aussehen:
sub1:
in r16, PIND
ldi r17,0b11111110  //!!!!!!!!!!
cpse r16,r17
jmp sub2
cbi PORTB,1         ;LED 1 ein
rjmp loop

Das ist der ganz Knackpunkt.

Autor: Vitali Tscheroun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Leute,das leuchtet mir jetzt ein.
Ich werde es heute Abend ausprobieren.
Gruss.
Vitali.

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo...

jmp sub2 ??
oder
rjmp sub1  ?

Bit- & Bytebruch... - ...HanneS...

Autor: Vitali Tscheroun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo noch mal,
ich danke euch für die Tipps,
habe gestern abend das Programm noch mal überarbeitet und es
funktioniert einwandfrei.

Gruss.
Vitali.

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.