Forum: Compiler & IDEs machen ohne Befehl


von cew (Gast)


Lesenswert?

Hallo zusammen.
1
int main(void) {
2
  lcd_init();
3
  init_io();
4
  init_timer();
5
  sei();
6
  int x1=0;
7
  char puffer[16];
8
  DrawRect(12,10,8,8,BLACK);
9
  DrawRect(28,10,8,8,BLACK);
10
  DrawRect(44,10,8,8,BLACK);
11
  DrawRect(60,10,8,8,BLACK);
12
  DrawRect(76,10,8,8,BLACK);
13
  DrawRect(92,10,8,8,BLACK);
14
  DrawRect(108,10,8,8,BLACK);
15
  FillRect(14,12,4,4,BLACK);
16
17
  while (1) {
18
    if ( get_key_press(1<<P_EINGANG0) ) {
19
      x1=x1+1;
20
      FillRect(30,12,4,4,BLACK);
21
    }
22
    if ( get_key_press(1<<P_EINGANG1) ) {
23
      x1=x1-1;
24
      FillRect(46,12,4,4,BLACK);
25
    }
26
    itoa(x1,puffer,10);
27
    SetFont(FONT_8_norm);
28
    LCDSoftText(puffer,0,30,BLACK);
29
    LCD_refresh();
30
  }    
31
}
in der while schleißfe:
1
while(1){
2
  if(Eingang0){
3
     zeichne rechteck 2
4
  }
5
  if(Eingang1){
6
    zeichne rechteck 3
7
  }
8
}
es zeichnet die beiden rechtecke von ganz allein, ohne dass ich ein 
eingang setze.
was mach ich falsch.?

danke.
mfg

: Bearbeitet durch User
von Timmo H. (masterfx)


Lesenswert?

Pullups an den Tastern (intern oder extern)?

von cew (Gast)


Lesenswert?

keins von beiden.


das eingangssignal kommt von einem anderen µC

von Timmo H. (masterfx)


Lesenswert?

Warum nimmst du dann überhaupt die dannegger'sche Entprell-Routine? 
(nehme ich aufgrund des Funktionsnamens mal an).
Die erwartet glaube ich low-aktive Signale. Dementsprechend müssten die 
Pins des "anderen µCs" auch erstmal auf High sein wenn nichts passieren 
soll.
Ansonsten musst du die "Tasterabfrage" IMOH wieder umdrehen "i = 
key_state ^ ~KEY_PIN;" => "i = key_state ^ KEY_PIN;"

: Bearbeitet durch User
von cew (Gast)


Lesenswert?

angenommen, ich kann den µC(der die ausgänge schlatet) nicht mehr 
umprogrammieren.
gibt es keine andere möglichkeit.?

von cew (Gast)


Lesenswert?

weil:

if ( get_key_press(1<<P_EINGANG0) ) {
  x1=x1+1;
  FillRect(30,12,4,4,WHITE);

}

x1=x1+1;  den befehl führt er ja auch aus

von Timmo H. (masterfx)


Lesenswert?

Klar. Je nachdem ob dein Controller jetzt bei High oder low was machen 
soll:
Tu was wenn High:
1
if ( PINx &= (1<<PINy)) {
2
....
3
}

Tu was wenn low:
1
[c]
2
if ( !(PINx &= (1<<PINy)) ) {
3
....
4
}
Wobei x dein Port ist, also PINA,PINB...
und y dein Pin, also PIN0,PIN1...

: Bearbeitet durch User
von cew (Gast)


Lesenswert?

while (1) {

    if ( get_key_press(1<<P_EINGANG1) ) {
      x1=x1-1;
      FillRect(46,12,4,4,BLACK);  //zeichne
    }
     else{
       FillRect(30,12,4,4,White); //übermale
     }
  }

wenn eingang, dann zeichne
wenn kein eingang, übermale das

ist doch egal ob high oder low.
eins von beiden muss er doch machen

von Timmo H. (masterfx)


Lesenswert?

Muss er das? Hattest du nichts von gesagt. Dein Code sah oben noch 
anders aus...
Vielleicht stellst du nochmal deine Frage und spezifizierst etwas 
genauer was überhaupt passieren soll und wie deine Eingangssigale 
aussehen. Und warum du dich für die Tasterentprell-Routine von Dannegger 
genommen hast wobei du doch gar keine Taster hast.

: Bearbeitet durch User
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.