mikrocontroller.net

Forum: Compiler & IDEs I/O Abfrage bei STK500


Autor: Spacemikel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du dran gedacht, dass die Schalter gegen Masse gehen?

Autor: spacemikel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal:

Hast du dran gedacht, dass die Schalter gegen Masse gehen?

Und die LEDs gehen gegen VCC.


Peter

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 1. Du musst zur vernünftigen Abfrage der Taster
> die Pull-Ups des Port A aktivieren

Nein, der STK500 hat selbst Pullups.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spacemikel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Karl-Heinz,

dein Tip war ein Volltreffer.

Danek

Ciao Michael

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.