Forum: Mikrocontroller und Digitale Elektronik Problem mit AVR NEt IO und Eingänge


von Markus P. (sebastianwurst)


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 ?!?!?

von holger (Gast)


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.

von Markus P. (sebastianwurst)


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.

von ... (Gast)


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.

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.