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
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
Nochmal: Hast du dran gedacht, dass die Schalter gegen Masse gehen? Und die LEDs gehen gegen VCC. Peter
'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
> 1. Du musst zur vernünftigen Abfrage der Taster > die Pull-Ups des Port A aktivieren Nein, der STK500 hat selbst Pullups.
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
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.