Problem mit AVR NEt IO und Eingänge

OP #2127112
Lesenswert?

Hi,
ich hab mal wieder ein Problem.....

Ich habe das AVR Net IO von Pollin mit Ulrich Radigs Software am laufen. 
So nun habe ich ein Taster als Eingang am Port gelegt. Der Taster 
schaltet direkt auf Gnd. Im Webserver ist die "LED" (Standardwebseite 
von Ulrich Radig) grün, also an, wenn ich den Taster NICHT betätige.
Wenn ich Ihn betätige wird die LED Grau. Das ist die erste Frage. Nach 
meiner Logik müsste das anders herum sein. Schalter unbetätigt -> LED 
Grau- Mit diesem Code:
1
//Einsetzen des Pin Status %PI@xy bis %PI@xy durch "ledon" oder "ledoff"
2
      //x = 0 : PINA / x = 1 : PINB / x = 2 : PINC / x = 3 : PIND
3
      if (strncasecmp_P("PIN",http_entry[index].new_page_pointer,3)==0)
4
      {
5
        unsigned char pin  = (pgm_read_byte(http_entry[index].new_page_pointer+4)-48);  
6
        b = 0;
7
        switch(pgm_read_byte(http_entry[index].new_page_pointer+3))
8
        {
9
          case 'A':
10
            b = (PINA & (1<<pin));
11
            break;
12
          case 'B':
13
            b = (PINB & (1<<pin));
14
            break;
15
          case 'C':
16
            b = (PINC & (1<<pin));
17
            break;
18
          case 'D':
19
            b = (PIND & (1<<pin));
20
            break;    
21
        }
22
        
23
        if(b)
24
        {
25
          strcpy_P(var_conversion_buffer, PSTR("ledon.gif"));
26
        }
27
        else
28
        {
29
          strcpy_P(var_conversion_buffer, PSTR("ledoff.gif"));
30
        }
31
        str_len = strnlen(var_conversion_buffer,CONVERSION_BUFFER_LEN);
32
        memmove(&eth_buffer[TCP_DATA_START+a],var_conversion_buffer,str_len);
33
        a += str_len-1;
34
        http_entry[index].new_page_pointer = http_entry[index].new_page_pointer+5;
35
      }
36
      //wurde das Ende des Packetes erreicht?

Dann habe ich noch in der haupt while diesen code um etwas auf dem 
Terminal anzuzeigen wenn der Eingang kommt.
1
  if (!(PIND & (1<<PIND2)))    
2
  {
3
  usart_write("PIND2 \r\n");
4
  }

Da passiert aber garnichts. Warum ist das denn so ?


Konfiguriert habe ich die Ports so:

  DDRD = 0x00;
  PORTD = 0xff;

Ich hab total den Denkfehler, vielleicht hilft mir Einer ?!?!?
Gast #2127134
Lesenswert?

>Im Webserver ist die "LED" (Standardwebseite
>von Ulrich Radig) grün, also an, wenn ich den Taster NICHT betätige.
>Wenn ich Ihn betätige wird die LED Grau.

Ist doch völlig ok so. Taster nicht gedrückt: Pin ist High, also grün.
Taster gedrückt: Pin ist low, also grau.
OP #2127146
Lesenswert?

Stimmt, da ich den Pull Up aktiviert habe.... Irgendwie bedeppert heute.

Sag mal, schaltest Du auch immer gegen Ground oder machst Du das gegen 
5VCC? Also Pull Up oder down. Wo liegen denn die Vor-Nachteile?
Will über ein Taster halt schalten. Ganz normal...

Dann verstehe ich das noch nicht:
1
  if (!(PIND & (1<<PIND2)))    
2
  {
3
  usart_write("PIND2 \r\n");
4
  }

Warum geht das nicht ?
Also die Serielle Funktioniert, alle anderen Sachen kann ich mir 
ausgeben lassen.
Gast #2127192
Lesenswert?

AVRs haben eingebaute, schaltbare PullUp aber keine PullDown. Will man 
also keine zusätzlichen externen Bauteile, schaltet man den Taster gegen 
Masse.

Es gibt auch noch historische Gründe, die unter anderem mit der internen 
Eingangsschaltung von TTL-ICs zu tun haben. Aus ähnlichen Gründen werden 
LEDs ja auch meist gegen VCC geschaltet und nicht gegen Masse.

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