- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Schalter an ADC0/ ADC1

  1. #11
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich antworte mal hier auf Deine PN.

    Nein es ist nicht normal dass sich die zwei ADCs identisch ändern.
    Bist Du ganz sicher, dass die Hardware 100% korrekt aufgebaut wurde?
    Keine Lötbrücken, keine schlechten Lötstellen, keine Wackelkontakte, keine gebrochenen Kabel usw.
    Taster richtig angeschlossen (bei 3 poligen umschaltern durchaus wichtig)?
    Auch wenn man glaubt das alles richtig ist, es ist oft doch nicht so

    Hast Du ein Multimeter?
    Falls ja, miss mal die Spannung an beiden Pins jeweils mit und ohne gedrücktem Taster und bei
    nur an ADC1 / ADC0 angeschlossenem Taster.

    Hast Du die I/O Port Konfiguration geändert?
    Hast Du es mal mit dem internen Pullup probiert?

    Weiterhin wäre es besser die Pins als GPIO zu verwenden und nicht den ADC Wert zu nehmen.


    MfG,
    SlyD

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47
    So also die schaltung habe ich jetzt nochmal geprüft,
    Kabel auf Durchgang und Kurzschluss gegeneinander geprüft da konnte ich nichts festellen. Angeschlossen habe ich es nach dem Schaltplan Pull-Up mit 10 Kiloohm.
    Taster ist auch soweit in ordnung.
    Spannungen habe ich jetz mal gemessen, die messung habe ich jeweils vom Signal Pin (also ADC0 ADC1 Pin) gegen VDD Masse gemessen.
    Folgende Werte habe ich gemessen:
    Taster an ADC0 angeschlossen:
    Taster geöffnet:
    ADC0 Signal: 5 V
    ADC1 Signal: 1,2 V
    Taster geschlossen:
    ADC0 Signal: 0 V
    ADC1 Signal: 1,2 V

    Taster an ADC1 angeschlossen:
    Taster geöffnet:
    ADC0 Signal: 1,5 V
    ADC1 Signal: 5 V
    Taster geschlossen:
    ADC0 Signal: 1,5 V
    ADC1 Signal: 0 V

    Ich denke mal das ist so OK da sich ja nur die Spannung an dem PIN ändert an dem auch der Taster angeschlossen ist.
    Wie kann man die I/O Port Konfiguration ändern und wie macht man einen internen Pullup? Habe an der Software sonst nichts geändert sondern die LIB von den beispielen genommen und das Makefile habe ich ebenfalls von den Beispielen genommen.
    Und was ist ein GPIO?

    Mfg
    Stephan

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

    die gemessenen Werte sind ok.
    Wenn die Spannungen sich so ändern, müßte die Ausgabe mit deinem Mini-Programm auch unterschiedliche Werte zeigen. Eine Lötbrücke zwischen ADC0 und ADC1 kann es nicht geben, weil sich ja unterschiedliche Spannungen an den beiden Eingangspins messen lassen.
    Bei 5V müßte ein Wert von 1023 angezeigt werden, bei 0V ein sehr kleiner Wert (idealerweise 0) und bei 1,5V ca. 307.

    Normalerweise braucht man aber keinen ADC für einen Taster, da reicht ein normaler I/O-Pin. Jeder Pin kann mit dem DDRx Register auf Eingang/Ausgang geschaltet werden. Setzt man ein Bit im DDRx Register auf 1, ist der zugehörige Pin Ausgang, sonst Eingang.
    Um den internen Pullup-Widerstand zu aktivieren, schreibt man eine 1 in die Bitposition vom PORTx Register, nachdem man den Portpin als Eingang eingerichtet hat.
    Gruß
    Dirk

  4. #14
    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)

  5. #15
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    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)

  6. #16
    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

  7. #17
    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

  8. #18
    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

  9. #19
    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.

  10. #20
    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

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ä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