Forum: Mikrocontroller und Digitale Elektronik Schalter Problem, extrem komisch


von Peter M. (allforone)


Lesenswert?

Hallo Begeisterte Ucfreunde,
mein Problem ist relativ schnell erklärt.
Ich möchte den Wert eines BCD-Schalters abfragen und auswerten.
Es will nicht, sag ich jetzt mal.
Es wird nie eine Veränderung des Schalters registiert.
1
void main(void) {
2
3
  MCU_init(); /* call Device Initialization */
4
5
6
  for(;;) {
7
    /* __RESET_WATCHDOG(); by default, COP is disabled with device init. When enabling, also reset the watchdog. */
8
    
9
    __RESET_WATCHDOG();
10
                                             
11
      Tastenabfrage(); 
12
      if(status_bcd == 1) {
13
      
14
            SPI_CG_SET(27);
15
            PTAD_PTAD0 = 1; // LED an
16
    
17
      status_bcd = 0;        
18
      } 
19
      else{
20
      PTAD_PTAD0 = 0;  //LED aus 
21
22
      //Der BCD-Schalter wurde nicht verändert 
23
      }
24
      
25
      if(status_dil == 1) {
26
      
27
      status_dil = 0; 
28
      } 
29
      else{
30
      //Der DIL-Schalter wurde nicht verändert 
31
      }  
32
   }   
33
}
1
// Funktionen ----------------------------------------------------------------------------------------- 
2
  void Tastenabfrage() {
3
4
        static uint8 ct0, ct1, ct2, ct3;                    // Variablen für Entprellung
5
        uint8 i,j;                                          // Variablen für Entprellung
6
   
7
    
8
    //PEDA Tastenentprellung mechanische Schalter sollen anfällig sein.
9
       i = key_state_bcd ^ ~KEY_PIN_bcd;               // key changed ?
10
       ct0 = ~( ct0 & i );                             // reset or count ct0
11
       ct1 = ct0 ^ (ct1 & i);                          // reset or count ct1
12
       i &= ct0 & ct1;                                 // count until roll over ?
13
       key_state_bcd ^= i;                             // then toggle debounced state
14
       key_press_bcd |= key_state_bcd & i; 
15
    
16
    //Jetzt kann der Status des BCD Schalters abgefragt werden
17
       status_bcd = BCD_Verarbeiten(key_state_bcd);    
18
  }

1
// Funktionen -------------------------------------------------------------------------------              
2
bool BCD_Verarbeiten(int i) {
3
  if(lastresult_bcd == i) {
4
   return false;
5
  } 
6
  else{
7
      lastresult_bcd = i;
8
      return true;
9
  } //Wert von BCD-Schalter weiterverarbeiten => entsprechende Taktrate setzen
10
}


Habt ihr vielleicht eine Idee?


Gruß afo

von Nicolas S. (Gast)


Lesenswert?

volatile

von Nicolas S. (Gast)


Lesenswert?

Mist, das kommt davon, wenn man die Deklarationen nicht hat. Ist 
lastresult_bcd global?

von Dietrich L. (dietrichl)


Lesenswert?

- welcher Prozessor?
- wie ist Schalter angeschlossen (HW)?
- was steht in MCU_init()?

von Peter M. (allforone)


Lesenswert?

MCU_Init wird von der Umgebung quasi erzeugt.
Board MC9S08AW60.
Es ging schon mal mit fast der gleichen Routine...


Nachtrag:
volatile uint8 lastresult_bcd = 0x7F;     //Letzter Wert des 
BCD-Schalters

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.