- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Probleme mit der PollSwitch-Funktion

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    30.07.2006
    Beiträge
    7

    Probleme mit der PollSwitch-Funktion

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi,

    ich kann die PollSwitch-Funktion aus irgendeinem Grund bei selbstgeschriebenen Programmen nicht nutzen. Egal wie ich das Programm schreibe, jedes mal liefert das Drücken eines Tasters keine Reaktion.
    Beim Test funktionieren die Taster einwandfrei und auch das Demoprogramm mit der Tasterauswahl funktioniert ohne Probleme.

    Als Beispiel habe ich mal einer der versuchten Programme hier gepostet, vielleicht erkennt ja jemand einen Fehler und kann mir helfen.

    Code:
    #include "asuro.h"
    int main(void) {
    	unsigned char sw;
    	Init();
    	for (;;) {
    		sw = PollSwitch();
    		if (sw == 0x01) StatusLED(RED);
    		if (sw == 0x02) StatusLED(YELLOW);
    		if (sw == 0x04) BackLED(ON,OFF);
    		if (sw == 0x08) BackLED(OFF,ON);
    		if (sw == 0x10) FrontLED(ON);
    		if (sw == 0x20) BackLED(ON,ON);
    	}
    }
    MfG

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    18.09.2006
    Beiträge
    17
    Versuch mal statt dem == ein &

    also nicht
    Code:
    if (sw == 0x01)
    sondern
    Code:
    if (sw & 0x01)
    MfG
    backbone

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.10.2006
    Beiträge
    11
    Hat es einen besonderen grund warum du die Hexadezimale Schreibweise benutzt?

    Schreib doch einfach:
    Code:
    sw = PollSwitch();
    switch(sw) {
                       case 1: ....
                       case 2: ....
                       case 4: ....
                       case 8: ....
                       case 16: ....
                       case 32: ....
    }
    PS: Als Endlosschleife, sieht while(1){} schöner aus in C. :>

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    30.07.2006
    Beiträge
    7
    Okay interessanterweise, zumindest für mich, macht es einen Unterschied hexadezimale Schreibweise zu benutzen oder nicht. Wenn ich die normalen Bitwerte eintrage funktioniert es auch, was mich irritiert, weil es anfangs damit nicht funktioniert hatte (war eigentlich mein erster versuch). Nun habe ich die Vermutung, dass beim Flashen etwas nicht funktioniert hatte und ich mir mit einem erneuten Versuch hätte viel Ärger ersparen können.
    Mit dem '&' anstelle des '==' funktioniert das Programm ebenfalls. Nun bin ich noch nicht sehr bewandert in C Programmieren und der Operator '&' ist mir neu, daher hab ich direkt noch eine Frage, was bezweckt dieser Operator?
    Auf jeden Fall danke, für die schnelle Hilfe.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    18.09.2006
    Beiträge
    17
    Der & Operator ist für die Bitweise UND verknüpfung

    & wird verwendet , wenn Du bspw. prüfen möchtest , ob ein bestimmtes Bit gesetzt ist.
    Du willst zb. prüfen , ob das 3.Bit von x unabhängig von den anderen gesetzt ist : x & 4 (=00000100 in binär-schreibweise)
    ergibt 4 ,wenn es gesetzt ist , sonst 0.

    Also:
    00000100 & 00000100 = 00000100 (Binär) = 4 (Dezimal)
    01010000 & 00000100 = 00000000 (Binär) = 0 (Dezimal)

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    01.10.2006
    Beiträge
    11
    Komisch, bei mir funktioniert es auch mit dem Vergleichsoperator '=='.
    '&' Ist ein Bitoperator und man kann damit kontrollieren ob bestimmte Bits gesetzt sind, oder eben nicht, es läuft also auf dem Binärsystem.
    Weitere Infos:
    8.5 Bit-Operatoren

    €: Ich glaub ich weiß einen Grund warum es bei dir nicht Funktioniert. Du Vergleichst unsigned char mit einem einfachem Zahlenwert. Kann sein das er es dann nach signed char umwandelt, und er somit eine andere Zahl erählt. Darf man fragen welchen Compiler du benutzt?

    €²: Wirst du wohl aufhören immer kurz vor mir zu posten, backbone? [-(

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    30.07.2006
    Beiträge
    7
    als compiler benutze ich die mitgelieferten programme.
    Hatte als Variablentyp deswegen unsigned char genommen, weil dieser auch in den Demoprogrammen benutzt wird.
    Wenn ich signed char benutze, funktioniert es nicht. Könnte man es sonst nicht auch mit int versuchen?

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    18.09.2006
    Beiträge
    17
    unsigned char hat den vorteil, dass es intern mit 8 Bit abgespeichert wird
    int mit 2 oder 4 Byte = 16 Bit oder 32 Bit

    @ _goto Sorry

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    01.10.2006
    Beiträge
    11
    Das du den Rückabewert in einer unsigned char Variable speicherst, ist schon richtig.
    Jedoch wird sie im Vergleich wahrscheinlich in signed umgewandelt.
    Versuch es mal auf folgende Arte:
    Code:
    if (sw == (unsigned char)0x01) StatusLED(RED);
    /* ... */

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    30.07.2006
    Beiträge
    7
    Mit dem if (sw == (unsigned char)0x01)... funktioniert es. Also stimmte die Vermutung von _goto.
    Ist das Problem denn sonst noch bei niemanden so aufgetreten? Wundert mich ein wenig.

    Nochmals danke an alle.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests