I/O Abfrage bei STK500

Gast #364514
Lesenswert?
• ▲
▼
Hallo wer kann mir helfen.

Ich arbeite mich an meinem Entwicklungsboard STK500 von asm auf C um.
Doch leider gibt es schon bei den Grundlagen von C ein paar sehr
mekrwürdige Sachen.

if(bit_is_set(PINA, PA0) && (bit_is_set(PINA, PA1)))
{DDRB=0b00011111;  // Port B, bit 0000 1111 auf augabe setzten
   PORTB=0b00011111;}  // ausgabe von LED 0,1,2,3 bis Löschen

Bei diesem Befehl bekomme in der Simulierung eine saubere UND
Verknüfung. Sobald das Programm auf dem Board ist (ATMEGA16) bekomme
ich eine ODER Verknüfung realisiert. Sprich wenn ich Switch 0 oder 1
betätige gehn die LED´s 0-4 an.

Bei Eingabe als || (ODER) Verknüfung wird das Programm als UND
Verknüfung realisiert?

Wer kann mir weiterhelfen

Wäre euch sehr Dankbar.

ps. den kompletten CODE gibts im Anhang
Angehängte Dateien:
Gast #364516
Lesenswert?
• ▲
▼
Hi Jörg,

das STK ist so fix und fertig montiert, mit Schaltern und LED´s.
Es werden die Verknüfungen ausgeführt nur das halt bei einer &&
Verknüpfung eine ODER und bei || eine UND Verknüfung realisiert wird.

Ich kann mir nicht vorstellen das ein so schwerer Fehler in der
C-Software steckt!!!

hast du noch eine IDEE für mich??

Danke

Ciao Michael
Gast #364518
Lesenswert?
• ▲
▼
'Schalter gegen Masse' bedeutet:

1. Du musst zur vernünftigen Abfrage der Taster die Pull-Ups des Port A
aktivieren (also für die Taster an PA0 und PA1 mindestens PORTA =
0b00000011)!

2. 'Schalter betätigt' heißt, dass der Pin LOW-Pegel hat! Abfrage
also höchstens mit if(bit_is_cleared()...)!

3. 'Schalter nicht betätigt' bedeutet HIGH-Pegel am entsprechenden
Pin.

Hoffe, das trägt zum Verständnis bei...

Gruß

Johnny
Gast #364520
Lesenswert?
• ▲
▼
Stimmt, beim STK500 sind die Pull-Ups drin. Aber für den Fall, dass man
die Anwendung mal außerhalb des STK500 laufen lassen möchte, sollte man
da zumindest dran denken... Nicht, dass man sich später wieder wundert,
warum die Sache im STK500 läuft, aber in der selbstgebauten Schaltung
nicht. Die Beschaltung der Taster und LEDs steht aber auch im Handbuch
des STK500 drin (Seite 3-2, wenn meine Version nicht veraltet ist).

Gruß

Johnny
#364521
Lesenswert?
• ▲
▼
> 3. 'Schalter nicht betätigt' bedeutet HIGH-Pegel am
> entsprechenden Pin.

@SpaceMikel

Nicht zu vergessen:

4. Eine 1 am Ausgabeport bedeutet, dass die LED nicht leuchtet.
   Da sie ja, wie P.D. bereits sagte gegen Vcc geschaltet wird.


Im Grunde hast du ja da eine Negierung drinnen. Der Schalter
ist dann aktiv, wenn er auf 0 liegt (und nicht wie du denkst
auf 1). Durch die Negierung greift aber die De'Morgan Regel:

    (NICHT A) UND (NICHT B)   <==> NICHT( A ODER B )
    (NICHT A) ODER (NICHT B)  <==> NICHT( A UND B )

Und daher kommt es, dass es fuer Dich wie ein ODER aussieht,
obowhl du ein UND geschrieben hast. Denn die Negierung wird
per Hardware gemacht und taucht so nicht im Pgm-Text auf.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.