-         

Ergebnis 1 bis 5 von 5

Thema: PIN Abfrage am Mikrocontroller ATMega32 mit Jumper

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.02.2013
    Beiträge
    21

    PIN Abfrage am Mikrocontroller ATMega32 mit Jumper

    Anzeige

    Ich möchte folgendes auf dem Display anzeigen:

    Wenn Jumper auf PB.. dann zeige .....

    Wenn Jumper weg von PB.. dann zeige einen anderen Text auf dem Display. Auf dem besagten Port befindet sich ein 2-poliger Jumper, eine Leitung geht auf den Mikroprozzessor und die andere Leitung geht auf GND.

    wie muss denn die Funktion dazu aussehen?

    Mein Ansatz ist eine if else Abfrage, bin ich damit auf dem richtigen Weg?

    Danke für eure Hilfe.

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    - Deinen PB.. als Eingang setzen (das ist normalerweise beim Start des Programms bereits der Fall)
    - Den Pullup Widerstand (im µC integriert) aktivieren:
    // pullup für PB3
    PORTB=(1<<3);
    Durch den Pullup Widerstand liegt der Pin nun etwa auf Betriebsspannung und ist damit logisch 1. Wird der Taster gedrückt (bzw dein Jumper gesetzt), wird der Pin auf GND gezogen und wird damit logisch 0.
    Das kann man abfragen, zB mit:
    Code:
    while(1) // endlosschleife
    {
         // tasterabfrage
         if(PINB&(1<<3)==0)
         {
             // zeige auf display dass jumper da
         }
         else
         {
             // zeige auf display dass jumper weg
         }
    }
    Grüße von der Katze

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    ... Das kann man abfragen, zB mit: ...
    Bei meiner (Programmiersprachen-) Leseschwäche sieht das deutlich aufwändiger aus, aber ich komme damit besser zurecht.

    Hier ein Beispiel für zwei Jumper auf PB6 und PB7. Wichtig im Code ist nur die Zeile nach "// Anwendung im Code". Wie gesagt, mehr Aufwand, ich lese das besser.

    Code:
    // Ports+Pins als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
    //      A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
      DDRB  = 0b00111111;   // siehe aktuell oben
      PORTB = 0b11000000;   //    und Port/Pull Ups (1)  aktivieren
    // ...
      #define IsBitSet(ADDR,BIT)     (((ADDR)  &  (1<<BIT))?1:0)    // Fragt Bit = 1?
      #define IsBitClr(ADDR,BIT)     (!((ADDR)  &  (1<<BIT))?1:0)   // Fragt Bit = 1?
    // ...
    // - - - - - - - - - - - - - - - -
      #define JUMPER_PORT   PINB    //
      #define JMP_6           6     //
      #define JMP_7           7     //
    // ...
    // - - - - - - - - - - - - - - - -
      #define JUMPER6_an    IsBitClr (JUMPER_PORT, JMP_6)   // Jumper 6 gesetzt ??
      #define JUMPER6_aus   IsBitSet (JUMPER_PORT, JMP_6)   // Jumper 6 gelöst ??
    // ...
    // - - - - - - - - - - - - - - - -
    // Anwendung im Code
      if (JUMPER6_an)  tu_das();    // Aktion wenn Jumper gesetzt ist
     
    // ============================================================================== =
    // Ein Beispiel bei einer sinngemäßen Tastenanwendung in einem meiner Codes
      if ( Taste1_an )
      {                             //
        SetBit ( PrtLED, L1r );     // Zünde rote LED, sobald Taste gedrückt
        while  ( Taste1_an ) {}     // warten, bis Taste1 gelöst ist
        ClrBit ( PrtLED, L1r );     //
        wms (  100);                //
        u0st1();                    // RX-Tx-UART0(PD) zum Einstellen               rUn
        wms (   10);                // Wait
        SrvTST_06 ();               // Servo 1 mit Verzögerung testen               r1n
      }             // Ende if ( Taste1_an ) ...
    Ciao sagt der JoeamBerg

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    20.02.2013
    Beiträge
    21
    Danke robocat, leider funktioniert es nicht, weil ich noch irgendwie einen internen Pull-Up aktivieren muss, aber ich weiss nicht genau wie das funktioniert und welchen ich aktivieren muss.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    24558
    Alter
    39
    Beiträge
    1.356
    Hallo,

    Du musst den betreffenden Eingang in Bascom zum Beispiel auf "PortB.1 = 1 " setzen. Da es ein Eingangspin ist, wird hier damit der Pullup aktiviert. Wenn es ein Ausgang ist - was man je vorher festlegen muss wie robocat schon fetsstellte - dann wird der Port die Betriebsspannung führen.

    Im Programm wird dann nur noch geprüft ob der "Jumper" ( genausso wie ein Taster) gegen GND zieht und dementsprechend etwas ausgeführt. Bei Jumpern ist es ja so das man da nicht ständig zieht und steckt...also kann man das vor der Hauptschleife einmalig abfragen, es sei denn es findet ein wechsel statt dann muss (auch) im Hauptprogramm irgendwie bearbeitet werden.

    Ich denke Dein Ansatz bzw auch der von robocat ist schon okay.

    So habe ich letztens meine Alarmanlage modifiziert, dort stellt man jetzt über Pianoschalter ein wie viele Sensoren aktiviert werden sollen bzw wieviel LED in der Anzeige leuchten.
    "Es ist schwierig, jemanden dazu zu bringen, etwas zu verstehen, wenn er sein Gehalt dafür bekommt, dass er es nicht versteht" [Upton Sinclair] gez-boykott

Ähnliche Themen

  1. Pin-Abfrage?
    Von Blackaffe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 25.05.2011, 11:07
  2. pin abfrage mit bascom
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 05.09.2008, 13:59
  3. 32 Pin Socket für ATMega32... ähm.. woher?
    Von CaptainKiwi im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 16.10.2007, 12:46
  4. Spannung am Atmega32 Pin erhöhen
    Von jawo3 im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 12.10.2007, 20:25
  5. Pin 41 und 42 beim Atmega32???
    Von Zeroeightfifteen im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 23.04.2006, 17:23

Berechtigungen

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