- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 21

Thema: Schalter an ADC0/ ADC1

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47
    Muss ich das ganze in der RobotBaseLib.h ändern?
    Da steht folgender code:
    [// PORTA

    #define UBAT (1 << PINA7) // ADC7 (Input)
    #define MCURRENT_L (1 << PINA6) // ADC6 (Input)
    #define MCURRENT_R (1 << PINA5) // ADC5 (Input)
    #define E_INT1 (1 << PINA4) // INT1 (input per default... can be output)
    #define LS_L (1 << PINA3) // ADC3 (Input)
    #define LS_R (1 << PINA2) // ADC2 (Input)
    #define ADC1 (1 << PINA1) // ADC1 (Input)
    #define ADC0 (1 << PINA0) // ADC0 (Input)

    // Initial value of port and direction registers.
    #define INIT_DDRA 0b00000000
    #define INIT_PRTA 0b00000000

    // ---------------------------------------------------
    // PORTA A/D Convertor channels

    #define ADC_BAT 7
    #define ADC_MCURRENT_L 6
    #define ADC_MCURRENT_R 5
    #define ADC_LS_L 3
    #define ADC_LS_R 2
    #define ADC_ADC1 1
    #define ADC_ADC0 0
    ]
    Geändert werden müsste jetzt z.B wenn ich ADC0 als ausgang habe möchte:
    #define INIT_DDRA 0b00000001
    #define INIT_PRTA 0b00000000
    Ist das richtig?
    bzw. für einen internen Pullup:
    #define INIT_DDRA 0b00000000
    #define INIT_PRTA 0b00000001
    Ist das richtig?

    Wenn man jetzt aber ADC0 als ausgang setzt kann man doch keinen taster anschließen oder?
    Geändert von Stephan90 (28.07.2013 um 19:44 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Der Kommentar 2 Zeilen darüber könnte hilfreich sein:

    Code:
    /*****************************************************************************/
    // I/O PORT pin definitions
    // These definitions simplify reading and understanding the source code.
    //
    // ATTENTION: Initial value of port and direction registers should not
    // be changed, if you do not exactly know what you are doing!
    //
    // Hints for DDRx and PORTx Registers:
    // DDRxy = 0 and PORTxy = 0 ==> Input without internal Pullup
    // DDRxy = 0 and PORTxy = 1 ==> Input with internal Pullup
    // DDRxy = 1 and PORTxy = 0 ==> Output low
    // DDRxy = 1 and PORTxy = 1 ==> Output high
    // "=1" indicates that the appropriate bit is set.
    //
    // Example:
    // #define INIT_DDRA 0b00010000
    // #define INIT_PRTA 0b00000000
    //
    // This means that ALL ports on PortA are inputs without internal pullups
    // except for PortA4, which is an output (E_INT1 signal in this case) and
    // initial value is low.
    //
    // Binary value explanation:
    // 0b00010000     = 16 in decimal system
    //   ^      ^
    // MSB      LSB      (MSB = Most Significant Bit, LSB = Least Significant Bit)
    //
    // The program should always call the macro "portInit();" FIRST! You can find
    // it a bit below. Correct port initialisation is the most important step
    // after a hardware reset!

    Übrigens solltest Du in der Library nichts ändern.
    Das kannst Du alles in Deinem eigenen Code machen.
    DDRA |= ADC0; // Pin als Ausgang
    PORTA |= ADC0; // Ausgang auf 1
    PORTA &= ~ADC0; // Ausgang auf 0


    DDRA &= ~ADC0; // Eingang
    PORTA |= ADC0; // Pullup an
    PORTA &= ~ADC0; // Pullup aus


    Auswerten mit if(PINA & ADC0) ...

    MfG,
    SlyD

    PS:
    GPIO = General Purpose I/O - das steht sicher auch irgendwo in der Doku

    PPS:
    Achtung: Nicht den GPIO als Ausgang konfigurieren und dann mit dem Taster gegen Masse kurzschließen!
    (bei den normalen Bumpern ist für sowas ein Serienwiderstand von 470 Ohm mit drin - s. Schaltplan des RP6
    bei den LEDs. Übrigens kann man Taster an die LED Pins schalten genau wie bei den Bumpern, dann bleiben die wertvolleren ADCs frei - auswerten geht dann wie im RP6 Library code getBumper - natürlich etwas angepasst... )
    Geändert von SlyD (28.07.2013 um 20:01 Uhr)

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47
    Okay
    das funktioniert schonmal .
    Aber ich habe weiterhin das Problem das bei ADC0 beide das gleiche anzeigen. ich verstehe nicht was da falsch ist .
    PINA bedeutet in dem falle der signal PIN von ADC0 oder?
    Wenn ich den ADC0 auf ausgang habe kann man aber keinen taster mehr anschließen oder? Gibt doch dann nen Kurzschluss.
    Sorry für die vielen fragen ich hät nicht gedacht das es so Kompliziert wird

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi Stephan,
    ich habe weiterhin das Problem das bei ADC0 beide das gleiche anzeigen
    Was soll das heißen? Es geht ja nur um den Unterschied zwischen ADC0 und ADC1. Was genau wird da bei ADC0 und ADC1 bei welcher Tastenbetätigung angezeigt?
    Gruß
    Dirk

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47
    So ich glaube ich habe meinen Fehler gefunden.
    Man muss also an ADC0 und an ADC1 einen Pullup widerstand einbauen unabhänig davon ob man ihn verwendet oder nicht, kann das sein?
    Wenn ich nur für ADC0 einen Internen Pullup programmiere zeigt ADC1 das selbe an wie ADC0 (bei geschlossenem Taster), wenn ich jetzt aber für ADC1 auch den Pullup Programmiere funktioniert es und es werden die verschieden Signale angezeigt.
    Und genauso funktioniert es dann auch mit externen Widerständen.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Ja, jeder Eingang bzw. jeder Taster an einem Eingang braucht einen eigenen Pullup.
    Gruß
    Dirk

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47
    Ok das wusste ich noch nicht. Also mit 2 Widerständen Funktioniert es einwandfrei.
    Ich bin davon ausgegangen das es völlig getrennte Kanäle sind und nur der einen Pullup benötigt der auch verwendet wird.
    Habe gerade nochmal den Bericht in RN Wissen gelesen wie man die IO PINs der LEDs für schalter verwendet, das werde ich auch nochmal Versuchen.

    Vielen danken für eure Gute Hilfe!
    Geändert von Stephan90 (28.07.2013 um 21:25 Uhr)

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi Stephan,

    grundsätzlich würde ich an den Libs nichts ändern.
    Grund: Man kann sich dann hier im Forum kaum noch gegenseitig unterstützen, wenn jeder eine andere Lib als Grundlage hat.

    Stattdessen kann man im eigenen Programm die Port-Definitionen ändern:
    DDRA &= ~ADC0;
    ... setzt ADC0 als Eingang.
    DDRA |= ADC0;
    ... setzt ADC0 auf Ausgang.

    PORTA |= ADC0;
    ... schaltet den Pullup ein (wenn der Pin Eingang ist) ODER den Portpin auf High (wenn der Pin Ausgang ist).
    Gruß
    Dirk

Ähnliche Themen

  1. adc0, adc1, scl
    Von Morpheus1997 im Forum Robby RP6
    Antworten: 3
    Letzter Beitrag: 22.07.2011, 10:31
  2. Poti an ADC0/ADC1
    Von neo3000 im Forum Robby RP6
    Antworten: 4
    Letzter Beitrag: 24.10.2010, 01:09
  3. A/D Wandler freerun ADC0 und ADC1 ohne Interrupt
    Von guenter1604 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 14.12.2009, 12:01
  4. ADC0 funktioniert, ADC1 bis ADC5 nicht (Atmega8)
    Von DEAF BOY im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 06.03.2007, 15:26
  5. Strommessung (Differenz) über ADC0 und ADC1
    Von RHS im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 19.02.2007, 18:55

Berechtigungen

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

12V Akku bauen