Taster an 300 Ohm wird nicht erkannt

Hallo zusammen,

ich bastel momentan an meinem blanken IC mit nem Taster. Nur um den Taster mitsamt Display auszuprobieren, hab ich einen Tasterzähler programmiert:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int nr = 0;

void setup()
{
  pinMode(8, OUTPUT);
  digitalWrite(8, HIGH);
  
  Serial.begin(9600);

  lcd.begin(16,2);
  
  for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); 
 
  lcd.setCursor(0,0);
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("HI!YourDuino.com");
  delay(3000);  

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Use Serial Mon");
  lcd.setCursor(0,1);
  lcd.print("Type to display");
  delay(3000);
  lcd.clear();
}

void loop()
{
  if (digitalRead(8) == LOW)
  {
    nr++;
    
    lcd.setCursor(0,0);
    lcd.print("Tasterz");
    lcd.write(char(225));
    lcd.print("hler:");
    lcd.setCursor(0,1);
    lcd.print(nr);
    
    delay(400);
  }
}

Der Aufbau ist wiefolgt:

IC → Taster → GND.
Mess ich das, sind das 65 (!!) mA. Der Rest der Schaltung braucht allein 45 mA. Und später kommt es auf jedes mA, deshalb hab ich folgendes probiert:

IC → Taster → 300 Ohm-Widerstand → GND.

Bei letzterer Schaltung fließen 14, zerquetschte mA . Ist mir sehr viel lieber, da diese ja eben in einer Großzahl über sehr lange Leitungen laufen, weshalb so wenig Strom wie möglich fließen soll.

Wieviel Strom muss aber mindestens fließen, damit der Taster als grdrückt erkannt wird, bzw. wie mit diesem Widerstand?

Und noch ein weiterer Zusatz: Die Lösung soll auch später wenn möglich mit der Lib Keypad (http://playground.arduino.cc/Main/KeypadTutorial#.Uz6S5L2ua62) kompartiebel sein (ich geb gleich zu, mit der hab ich mich noch nicht wirklich beschäftigt, also möglich, dass es da schon was gibt und ich grad dazu Unsinn red :S).

Ich hoffe, ihr könnt mir helfen.

LG

Fipsi

Hallo,

Du möchtest den Tastereingang mittels µC internen Pullup Widerstand nutzen?

pinMode(8, OUTPUT);
digitalWrite(8, HIGH);

Dann haste den Ausgang sicherlich gekillt, weil ohne Widerstand auf Masse dürfte der hinüber sein.

Du hättest INPUT schreiben müssen statt OUTPUT.

  // digitalen Eingang mit PullUp aktivieren  
  pinMode(Taster, INPUT);            // setzt Pin als Eingang
  digitalWrite(Taster, HIGH);        // und aktiviert dessen PullUp Widerstand

Hey,

ja, wollte ich.

Und nein, den hab ich nicht gekillt.. funktioniert immer noch einwandfrei. Den Code so hab ich mal vor... 3 oder 4 Wochen in nem anderem Thread bekommen.. mir fällt grad nur nicht mehr ein von wem. Aber ich erinner mich noch, dass jemand anders geschrieben hatte, dass statt OUTPUT dann auch INPUT_PULLUP gehen würde, habs jedoch beim anderem belassen.

LG

Fipsi

Gegrillt nicht, dank dem 300 Ohm Widerstand. Jedoch ist dieser viel zu gering ausgelegt!

Auf OUTPUT kann ich mir nicht vorstellen. Ich denke vorher war er auf INPUT. Jedoch musst du für Pullups noch den Pin mit HIGH beschreiben. Das entfällt bei INPUT_PULLUP.

Hallo,

die 330Ohm hat er erst später dazu genommen, habe ich gelesen.

Dann haste Glück gehabt. Kannst mal messen wieviel mA rein und raus fließen am Eingang, wenn Taster nicht gedrückt und gedrückt ist und vergleichen mit einem anderen Eingang. Vorher Code anpassen!

Dein original Code schaltet nur einen Ausgang auf High. War sicherlich nie für einen Taster und Eingang gedacht.

Okay.. hab eben den Pin auf INPUt umgeschrieben. Jetzt reagiert er auch mit Widerstand. Wie hoch muss der Strom mindestens sein, dass der Eingang den Tasterdruck wahrnimmt, also wie groß muss dann der Widerstand sein?

LG

Fipsi

P.S.:

Doc_Arduino: Dein original Code schaltet nur einen Ausgang auf High. War sicherlich nie für einen Taster und Eingang gedacht.

Doch, von anfang an.

Hallo,

es gibt keinen Mindeststrom der zur Erkennung erforderlich ist. Der Pullup Widerstand begrenzt nur den Kurzschlussstrom, eben damit nichts "durchbrennt". Entscheidend für die "Tastererkennung" ist der Spannungspegel. Alles unter 0,8V ist als LOW definert und alles über 2,0 Volt ist HIGH definiert. Das gilt für die Eingänge.

Ah, okay, super :)

Könnte mir dann bitte noch jemand erklären, warum jetzt (einzige Änderung war von Ein- auf Ausgang) nur noch 0,12 mA fließen? Das gibt für mich irgendwie keinen Sinn.

Danke

LG

Fipsi

Hallo,

um das jetzt ganz genau zu erklären müßte man den internen Aufbau an den µC Pin raussuchen und aufmalen. Um das abzukürzen, ich hoffe das ist ausreichend, ist bekannt das der interne Pullup Widerstand laut µC Datenblatt ca. 50kOhm beträgt. +/- Toleranzen. Wenn man jetzt grob rechnet 5V / 50k Ohm landet man bei 0,1mA. Das entspricht quasi Deinen 0,12mA. Wenn Du den internen Pullup verwendest mittels Code, dann kannste Deine 330 Ohm weglassen. Die mußte auch weglassen um sicher den Massepegel an den µC gelangen zu lassen wenn Du den Taster drückst. Ein externer Pullup/Pulldown Widerstand ist nur erforderlich wenn Du den internen nicht verwendest.

Ah, is ja ne tolle Sache^^. Vielen Dank für die Erklärung und die Hilfe :)

Eine letzte Frage hab ich noch: bei der vorher genannten Keypad-lib, ist da der Pullup bereits vorhanden, oder muss ich die selber nochmal aktivieren?

LG

Fipsi

Hallo,

gute Frage. Laut seiner Entwicklungshistorie gibt es einen Eintrag der lautet: "1.8 2011-11-29 - Tom Putzeys : Enabled internal pull-ups on non-active columns" Demnach werden die genutzt.

Hab mal in die Library geschaut. Laut meiner Meinung werden die internen wirklich genutzt. In der .h Datei ist sogar eine Abfrage drin, falls die internen Pullups nicht aktiv sind, dass die aktiv gesetzt werden.

http://playground.arduino.cc/Code/Keypad

Super, vielen, vielen dank. Erspart mir eine Menge Arbeit :)

Danke für eure Hilfe :)

LG

Fipsi

Hallo,

zur Vollständigkeit die 3 Standardbeschaltungen im Anhang. Die beiden rechten mit externen Widerstand. Wenn keine 10k zur Hand gehen auch 15k. Höher würde ich nicht gehen.

zur Vollständigkeit die 3 Standardbeschaltungen im Anhang.

Sofern man nicht gerade an einem einzelnen Projekt arbeitet sondern sich im “allgemeinen Experimentierbetrieb” befindet würde ich empfehlen grundsätzlich Schutzwiderstände zum uC-Pin hin mit einzubauen - egal welche dieser Anschaltvarianten für Taster / Jumper / Schalter zum Einsatz kommt.

Ich bin mit 270R glücklich, aber der Wert ist ja unkritisch. Hauptsache er begrenzt den Kurzschlußstrom auf <40mA im Fehlerfall. Und dieser Fehlerfall kann leicht eintreten wenn man zwischen verschiedenen Projekten mit verschiedenen Pindefinitionen hin- und herwechselt. Leicht übersieht man daß ein Schalter nun plötzlich an einem Output hängt und wenn man ihn dann betätigt kann’s blöd laufen ohne Schutzwiderstand.
Habe sogar am Potimittelabgriff einen solchen R dran - ein Poti kann ja auch mal am Anschlag stehen.

Und toitoitoi - trotz willenloser Anfängerexperimente :smiley: arbeite ich noch mit dem ersten Arduino…