Wie dioden zu Pins von Atmega 8 geschalten?

OP (Firma: RF-I) #736410
Lesenswert?

Hallo,

Ich baue gerade ein Projekt vom Sciptkiller nach und habe den quelltext 
erhalten nun frage ich mich wie ich die taster mit den Dioden verbinden 
soll. Habe was im Quelltext gefunden. Vielleicht hat jemand von euch ne 
ahnung wie ich das schalten soll.


http://scriptkiller.de/avr_mikrocontroller_netzteil.php
1
/* button-press handling */
2
void uiButtonCode(unsigned char code) {
3

4
  switch(code) {
5
    
6
    /* U++ */
7
  case 0x01: {
8
    ui_last_modified=LAST_U;
9
    ui_mode=UI_MODE_UI;
10
    if(ui_voltage!=0xFF)
11
      uiSetVoltage(++ui_voltage);
12
  }; break;
13

14
  /* U-- */
15
  case 0x02: {
16
    ui_last_modified=LAST_U;
17
    ui_mode=UI_MODE_UI;
18
    if(ui_voltage >= 1)
19
      uiSetVoltage(--ui_voltage);
20
  }; break;
21

22
  /* I++ */
23
  case 0x03: {
24
    ui_last_modified=LAST_I;
25
    ui_mode=UI_MODE_UI;
26
    if(ui_current != 0xFF)
27
      uiSetCurrent(++ui_current);
28
  }; break;
29

30
  /* I-- */
31
  case 0x04: {
32
    ui_last_modified=LAST_I;
33
    ui_mode=UI_MODE_UI;
34
    if(ui_current >= 1)
35
      uiSetCurrent(--ui_current);
36
  }; break;
37

38
  /* UP */
39
  case 0x05: {
40
    #define SOLDER_STEP 10
41
    #define U_FAST_STEP 16
42
    #define I_FAST_STEP 32
43

44
    /* SOLDER+=STEP */
45
    if(ui_mode == UI_MODE_SOLDER) {
46
      if(ui_solder + SOLDER_STEP > 100) {
47
  uiSetSolder(100);
48
      }
49
      else {
50
  uiSetSolder(ui_solder+SOLDER_STEP);
51
      }
52
    }
53
    /* U+=STEP / I+=STEP */
54
    else if(ui_mode == UI_MODE_UI) {
55
      if(ui_last_modified == LAST_U) {
56
  if(ui_voltage + U_FAST_STEP > 0xFF) {
57
    uiSetVoltage(0xFF);
58
  }
59
  else {
60
    uiSetVoltage(ui_voltage+U_FAST_STEP);
61
  }
62
      }
63
      else if(ui_last_modified == LAST_I) {
64
  if(ui_current + I_FAST_STEP > 0xFF) {
65
          uiSetCurrent(0xFF);
66
        }
67
        else {
68
          uiSetCurrent(ui_current+I_FAST_STEP);
69
        }
70
      }
71
    }
72
    
73
  }; break;
74

75
  /* DOWN */
76
  case 0x06: {
77
    /* SOLDER-=STEP */
78
    if(ui_mode == UI_MODE_SOLDER) {
79
      if(ui_solder - SOLDER_STEP < 0) {
80
  uiSetSolder(0);
81
      }
82
      else {
83
  uiSetSolder(ui_solder-SOLDER_STEP);
84
      }
85
    }
86
    /* U-=STEP / I-=STEP */
87
    else if(ui_mode == UI_MODE_UI) {
88

89
      if(ui_last_modified == LAST_U) {
90
        if(ui_voltage - U_FAST_STEP < 0) {
91
          uiSetVoltage(0x00);
92
        }
93
        else {
94
          uiSetVoltage(ui_voltage-U_FAST_STEP);
95
        }
96
      }
97
      else if(ui_last_modified == LAST_I) {
98
        if(ui_current - I_FAST_STEP < 0) {
99
          uiSetCurrent(0x00);
100
        }
101
        else {
102
          uiSetCurrent(ui_current-I_FAST_STEP);
103
        }
104
      }
105

106

107
    }
108

109
  }; break;
110

111
  /* MODE */
112
  case 0x07: {
113
    uiSwitchMode();
114
  }; break;
115
    
116
  /* STANDBY */
117
  case 0x08: {
118
    uiToggleStandby();
119
  }; break;
120

121
  }
122

123
}
Gast #736456
Lesenswert?

> Ich baue gerade ein Projekt vom Sciptkiller nach ...
> Vielleicht hat jemand von euch ne ahnung wie ich das schalten soll.

Was sagt denn der Autor (Scriptkiller) zu der Beschaltung "seiner" 
Tasten?
Das wäre ja mal ein nützlicher Hiweis, wenn du ihn um Ergänzung dieser 
Information auf seiner Webseite bittest.
Gast #736750
Lesenswert?

Hallo,

so wie es auf der Webseite beschrieben ist, vermute ich, dass er je 
Taster die für den gewünschten Eingangscode erforderlichen Pins über 
eine Diode nach Masse zieht:

Code 0: 4 Dioden, Katoden gemeinsam über Taster gegen Masse zu schalten, 
Anode jeweils an ein Eingangs-Pin
Code 1: 3 Dioden (Bit1...3)
Code 2: 3 Dioden (Bit 0, Bit2...3)
Code 3: 2 Dioden (Bit2...3)
...
Code 7: 1 Diode (Bit3)

Zusätzlich zu den Kodier-Dioden soll eine weitere Diode gegen den 
Interrupt-Eingang geschaltet werden (8 Dioden mit Anoden am 
Interrupt-Eingang, Katode wird jeweils vom Taster gegen Masse gezogen.

Tschüss
Torsten

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren