Forum: Compiler & IDEs I/O Abfrage bei STK500


von Spacemikel (Gast)


Angehängte Dateien:

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von spacemikel (Gast)


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

von Peter D. (peda)


Lesenswert?

Nochmal:

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

Und die LEDs gehen gegen VCC.


Peter

von johnny.m (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

Nein, der STK500 hat selbst Pullups.

von johnny.m (Gast)


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

von Karl H. (kbuchegg)


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.

von spacemikel (Gast)


Lesenswert?

Hi Karl-Heinz,

dein Tip war ein Volltreffer.

Danek

Ciao Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.