Forum: Gesperrte Threads Man! BITTE, BITTE, brauche Hilfe!


von Gast (Gast)


Lesenswert?

Hallo,

ich kenne mich zwar mit Programmierung aus, aber sowas ist mir echt noch 
nie passiert! Das verhalten vom µC ergibt einfach null sinn!
Ich poste euch mal den Source:
1
if(joystick_rightleft > JOYSTICK_IS_RIGHT)      // Wurde nach rechts geklickt?
2
    {
3
      if(level_zero >= DISPLAY_LEVEL_ZERO_MAX)    // Ist man am rechten Rand?
4
      {
5
        level_zero = 0;                // Setze wieder auf linken Rand zurück
6
      }
7
      else
8
      {
9
        level_zero++;                // Gehe eins nach rechts
10
      }
11
      display_test(joystick_rightleft,JOYSTICK_IS_RIGHT);
12
    }
13
    else if(joystick_rightleft < JOYSTICK_IS_LEFT)    // Wurde nach links geklickt?
14
    {
15
      if(level_zero <= 0)                // Ist man am linken Rand?
16
      {
17
        level_zero = DISPLAY_LEVEL_ZERO_MAX;    // Setze wieder auf rechten Rand zurück
18
      }
19
      else
20
      {
21
        level_zero--;                // Gehe eins nach links
22
      }
23
    }

Zur erklärung:
joystick_rightleft ist ein Wert zwischen 0 und 255 und wird über den ADC 
eingelesen. (von einem Joystick). Standart ist 63, wenn Joystick ganz 
links ist 02 und wenn ganz rechts fe.

JOYSTICK_IS_RIGHT ist über define definiert und ist F0. Wenn 
joystick_irghtleft größer ist, soll eine Variable hochgezählt werden.

Zu Testzwecken gebe ich das ganze aber auf einem Display aus (mit der 
Funktion display_test).

JETZT KOMMT DAS LUSTIGE AN DER SACHE:
Egal wie groß joystick_rightleft ist, es wird immer am Display was 
ausgegeben (und somit auch meine Variable andauernt erhöht!!!). Ich habe 
absolut keine Ahnung, warum! Ich lasse mir beide Variablen ja ausgeben 
auf dem Display und was soll ich sagen? rightleft ist definitiv kleiner 
als IS_RIGHT und er zählt trotzdem rauf! (und zeigt auf dem Display an!)

Ich habe jetzt schon wirklich extrem viel ausprobiert, aber es geht 
einfach trotzdem nicht! Ich sitze an so einem blöden Fehler jetzt schon 
3 Stunden und habe jetzt wirklich KEINE AHNUNG mehr!

Bitte helft mir! (tut mir leid wegen Großschreibung bei Topic, aber ich 
bin wirklich absolut am Ende von meinem Latein!)

von Norgan (Gast)


Lesenswert?

Zeig das ganze Programm. Mit dem Fetzen da oben ist fast nichts 
anzufangen.

von Helmut L. (helmi1)


Lesenswert?

Wie sind den deine Variablen definiert. Vielleicht signed und unsigned 
verwechselt ?

Gruss Helmi

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

Hier das ganze Programm. Es geht um den Code in der Datei joystick.c bei 
Zeile 174 (habe ein paar # gemacht, damit mans besser findet)

Wenn ich statt der Variable z.b. 0x63 reinschreibe, dann funktioniert 
das Programm, wenn ich aber die Variable lasse gehts nicht (obwohl bei 
der ausgabe über UART dort auch 0x63 steht...)

von Teplotaxl X. (t3plot4x1)


Lesenswert?

>Danke, die Meldung wurde registriert.

von Simon K. (simon) Benutzerseite


Lesenswert?

Wo wird denn joystick_selection gesetzt? In einer Interrupt Routine 
etwa? Dann muss ein volatile vor die Definition in joystick.c.

von Simon K. (simon) Benutzerseite


Lesenswert?

Teplotaxl X. wrote:
>>Danke, die Meldung wurde registriert.

Wo ist das Problem?

von Karl H. (kbuchegg)


Lesenswert?

> joystick_rightleft ist ein Wert zwischen 0 und 255 und wird über den ADC
> eingelesen. (von einem Joystick). Standart ist 63, wenn Joystick ganz
> links ist 02 und wenn ganz rechts fe.


Bist du dir da ganz sicher?
In einem Joystick ist normalerweise ein Poti als Spannungsteiler 
geschaltet. D.h. die erwarteten Werte am ADC sind von 0 bis 1024. Die 
Grenzen werden vielleicht nicht ganz erreicht, weil das Poti meistens 
mechanisch nicht bis ganz an den Endausschlag gefahren werden kann, aber 
so in etwa. 0 bis 254 sind jedenfalls seltsame Werte und ich sehe auch 
nicht, wo du die ADC Werte von 10 Bit auf 8 Bit runtergerechnet hättest.

> obwohl bei
> der ausgabe über UART dort auch 0x63 steht...)

Die Ausgabe muss nicht unbedingt richtig sein :-)

von Gast (Gast)


Lesenswert?

Ich könnt meinen Kopf gegen die Wand schlagen.... Die eine Variable ist 
uint16_t und die anderen uint8_t.... natürlich geben meine Funktionen 
(Display und UART) nur 8 bit aus.... Und dann steht dort auf lust 0x0263 
drin und ich denk mir, da steht nur 63...

Naja, wie sagt man so schön? Mache soviele Fehler wie du kannst, aber 
keinen ein zweites mal! So einen Fehler mache ich bestimmt nicht 
mehr.... Danke übrigens ;)

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Verschoben wegen Betreff.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.