- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Abfragen eines Tasters

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.07.2007
    Ort
    82272 Moorenweis
    Alter
    59
    Beiträge
    435

    Abfragen eines Tasters

    Anzeige

    E-Bike
    Als erstes... Falls die Frage zu doof erscheint... Ich kenne mich in Elektronik und dergleichen nicht aus. Daher bitte ich um Nachsicht.
    Ich "bediente" bisher immer fix und fertig aufgebaute Computer, möchte aber meinen begrenzten Horizont erweitern.

    Ich möchte mit einem RN-Modul (RN-Mega128Funk) mehrere Taster (Bumbers) wie im Wiki dargestellt ( https://www.roboternetz.de/wissen/in...rarten#Bumpers ) abfragen.

    Dort heißt es
    Die Auswertung erfolgt am besten digital an einem Pin mit Pull-up Widerstand
    So wie ich es (mit laienhaften Verständnis) erahne, muss man einen Wiederstand, mir unbekannter Größe, vorschalten.

    Welchen Wiederstandswert und an welche Pins eines RN-Moduls schliesst man das dann an?

    Und welche Bascom-Befehle (Oder auch in C, dass ist mir egal) muß man anwenden um den Taster zu "pollen" bzw.. hat jemand einen Link oder ein Beispiel in dem das näher erklärt wird?

    Das "warum genau hier" usw. ist im Moment Nebensache. Da werde ich mit der Zeit schon dahinter kommen.

    Wäre echt nett von euch.
    Danke.

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    15.09.2004
    Ort
    Detmold
    Alter
    42
    Beiträge
    14
    Hi also mit RN-Boards kenne ich mich nicht aus, weil ich an Elektronik alles selber zusammenlöte

    Aber nun zu deinem Problem:

    Pull-Up bedeutet, dass der Port-Pin intern schon einen Widerstand gegen VCC besitzt, den due per Software an, oder ausschalten kannst. Sieh dir hierzu mal ein Datenblatt von nem uC an: ATMEGA-Derivate...

    Wenn du einen Port-Pin benutzt, der intern keinen Pull-Up besitzt schließt du diesen extern am Port-Pin direkt an VCC an (Widerstandswert für Pull-Up 4k7 ist nur ein Richtwert kann zwischen 1k und 10k liegen)

    Für die Programmierung musst du nachdem du den PORT initialisierst,
    ---
    heißt Port als Eingang schalten über Data-Direction-Register-PortX (meißt eine 1 reinschreiben) DDRX genannt, wobei das X für den jeweiligen Port steht
    ---
    eine Endlosschleife in der main-Funktion fahren:

    void main (void)
    {
    while(1)
    {
    //und hier fragst (pollst) du dann deine Eingänge
    unsigned char test = 0;
    test = PORTX;
    if(test >0)
    {
    //Auswirkung, welcher Sensor hat geschaltet über Masken prüfen
    }
    }
    }


    Ich hoffe ich konnte dir ein wenig weiterhelfen...

    Gruß

    Thomas
    There are 10 kinds ouf people, those who understand binary and those who not!!!

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    Hi,
    also Pull-up Widerstände sind in den AVR Controllern schon integriert du musst sie nur über DDRX = 0x00; Ports als Eingänge definieren. Und mit PORTX = 0xFF; Pull up Widerstände aktivieren.
    Und am besten liest dir das mal durch http://www.mikrocontroller.net/artic...R-GCC-Tutorial.
    mfg franz

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Diese Frage wird ziemlich am Anfang eines jeden Tutorials behandelt. Hier eines für C : http://www.mikrocontroller.net/artic...R-GCC-Tutorial und noch eines: www.roboternetz.de/wissen/index.php/C-Tutorial
    Wenn du schon so ein RN-Modul hast kannst du darauf fast alles ausprobieren.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.07.2007
    Ort
    82272 Moorenweis
    Alter
    59
    Beiträge
    435
    Wow. Das ging echt fix.
    Komme mir zwar vor, wie ein Quantenphysiker, der nach der Antwort auf eine Frage 10 neue bekommt, aber es hat mir sehr geholfen.

    Was mir noch etwas Sorgen macht...

    Ich muss also die VCC über den Schalter direkt an einen der Pins des Controllers anschliessen.

    Der Controller muss mit DDRX = 0x00 zum "Eingang" deklariert werden und mit PORTX = 0xFF der Pullup Wiederstand aktiviert werden.

    Ich denke jetzt daran, dass es ein Roboterbein ist, an dem der Taster angeschlossen ist. Und das Bein kann im Moment des Systemstarts bereits auf 1 stehen, also der Taster geschlossen.

    Die Programmroutine muss aber zuerst alles einstellen. Also liegen bereits... sagen wir mal 12 Volt direkt am Port an.

    Hält der AVR das aus?

    Durch fehlerhafte Kabel in Verbindung mit parallelen Schnittstellen und anderen Kleinigkeiten, habe ich schon öfter mal Rauch aufgehen lassen. Zuletzt als ich einen Transistor im Experimentierkasten meines Sohnes verbrutzelt hatte. Versuch mach Kluch, aber ...

    Ich bin mit den Jahren vorsichtig geworden und frage lieber zuerst mal nach und überlege mir etwas 3 mal bevor ich Bauteile der Müllkippe zuführe

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    Hi,
    also an den AVR darfst du nicht mehr als 5V anlegen sonst ist er hinüber. Die Pull ups werden beim initialisieren des Programms also vor dem Beginn des eigentlichen Programms geschalten und haben somit auf das Programm an sich keinen Einfluss mehr.
    mfg franz

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    12V hält der Kontroller sicher nicht aus, VCC ist im allgemeinen 5V, also die Beitriebsspannung des Kontroller. Der Taster liegt auch an GND und nicht an VCC. In Ruhe, Taster offen, liegt über den PullUp-Widerstand VCC am Eingang, wenn der Taster gedrückt wird, dann liegt GND am Eingang. Bei einem fehlerhaften Kabel kann daher auch kaum etwas passieren.

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ohne PullUp/PullDown-Widerstand würde der Eingang bei geöffnetem Schalter "in der Luft" hängen, ein gültiger Wert könnte dann nicht eingelesen werden. Deshalb verbindet man den Eingang mit einem hochohmigen Widerstand mit Vcc(PullUp) oder 0V(PullDown). In der Praxis ist ein PullUp günstiger, weil dann der Schalter den Pin gegen 0V verbinden muss und Störimpulse sich nicht auswirken, weil der Pegel des Pins bei nicht betätigtem Schalter sowieso schon auf Vcc liegt. Bei Systemen mit mehreren Versorgungsspannungen kann man dann auch nicht versehentlich eine zu hohe Spannung an den Pin bringen. Deshalb haben die ATMegas auch serienmässig einen PullUp eingebaut, den man bei Bedarf aktivieren kann.

    Der Nachteil ist die inverse Logik bei PullUps. Eine "1" bedeutet Schalter geöffnet, am Pin liegen Vcc über PullUp. Eine "0" bedeutet, der Pin ist über den geschlossenen Schalter direkt mit 0V verbunden.

    Übrigends fliesst bei geschlossenem Schalter ein kleiner Verluststrom über den PullUp und den Schalter von Vcc nach 0V. Deshalb sollte der Wert des Widerstands nur so klein sein, wie zum Einstellen eines stabilen Pegels am Pin benötigt wird. Bei der Verwendung der internen PullUps liegt man aber meist richtig.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.07.2007
    Ort
    82272 Moorenweis
    Alter
    59
    Beiträge
    435
    Oh. Danke.
    Wieder Geld gespart, wie es aussieht.

    Also niemals VCC irgendwo in die Nähe eines Pins bringen.

    Kurze Nebenfrage: Auf den Boards wird ein Spannungswandler verwendet, der anscheinend eine (nahezu) beliebige Spannung auf die benötigten 5 Volt bringt.

    Wird dadurch Energie verbraucht?

    Beim Durchlesen diverser Threads erkenne ich das Problem der Stromversorgung. Es werden mind. 18 Servos, die sollten etwas größer sein und sind stetig in Bewegung. Das verballert viel Energie.

    Dadurch ist jede Sparsamkeit angebracht, damit das Projekt nicht Kabelgebunden laufen soll.

    Die Frage ist nicht ganz umsonst, denn die Servos brauchen nicht 12 Volt sondern eben auch 4-5 * 1,2 Volt (Zellengröße aus meiner Modellbauzeit) und ich will nicht verschiedene Batteriepacks (LiPoli) verwenden, sondern nur einen.

    Die 12 Volt (oder was auch immer) müssen für die Servos runtergebracht werden. Das ist bestimmt nicht schwer, aber für jemand der es nicht kann und keine Ahnung hat, eine fast unüberwindbare Barriere.

    Danke für weitere Hilfe

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.07.2007
    Ort
    82272 Moorenweis
    Alter
    59
    Beiträge
    435
    Jetzt habe ich auch den Begriff PullUp / PullDown verstanden. (Oder glaube es zumindest)

    Das Problem der inversen Logik ist für mich kein Problem. Das gibts in meiner Welt auch andauern.

    Manchmal ist die 1 mit einem True verbunden, manchmal die -1 usw. Ist nur lästig, wenn man zwischen solchen Welten dauernd hin und her"denken" muss.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests