Forum: Mikrocontroller und Digitale Elektronik Wie dioden zu Pins von Atmega 8 geschalten?


von Thomas S. (Firma: RF-I) (rasieel)


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
}

von Wegstabenverbuchsler (Gast)


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.

von Thomas S. (Firma: RF-I) (rasieel)


Lesenswert?

hat er leider nichtmehr

von TorstenS (Gast)


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

von Thomas S. (Firma: RF-I) (rasieel)


Lesenswert?

kann ich da ne 1N4007 oder ne 4148 nehmen???

von TorstenS (Gast)


Lesenswert?

Hallo,

die Dioden kannst du verwenden. Sie dienen ja nur der Entkopplung, so 
dass keine großen Anforderungen an Sperrspannung und Strom gestellt 
werden.

Tschüss
Torsten

von Magnus Müller (Gast)


Lesenswert?

Die 1N400x sind hierfür absolut oversized. Ne 1n4148 tuts allemal.

Gruß,
Magnetus

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.