- SF800 Solar Speicher Tutorial         
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
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.713
    ... kann man beim RP6v2 einen Schalter an den ADC0 bzw ADC1 Kanal anbringen ...
    Bei den ATmegas kann man (fast) alle I/O-Pins für als Ein- oder Ausgang konfigurieren, wie von redround geschrieben. Damit sind Schalterabfragen ohne Problem möglich. Wenn nötig oder wünschenswert kann man praktischerweise an einem ADC-Pin auch mehrere Taster gleichzeitig anbringen. Dazu wird eine Widerstandskombination verwendet, sodass abhängig vom aktivierten Taster/Schalter eine jeweis unterschiedliche Spannung am ADC ansteht.

    Zitat Zitat von ATmega32-32L-Datenblatt 2503Q, Seite 4
    ...
    Port A also serves as an 8-bit bi-directional I/O port, if the A/D Converter is not used. Port pins can provide internal pull-up resistors (selected for each bit). ...

    Zitat Zitat von redround Beitrag anzeigen
    ... üblicherweise ... Taster/Schalter so an einen Controller angeschlossen ... Theoretisch ... interne Pull-Up-Widerstände, jedoch verwendet man in der Praxis üblicherweise externe hierfür ...
    Also die von mir bevorzugten AVR-8-Bit-Controller (die im RP6v2 auch eingesetzt werden) haben interne Pull-Ups nicht theoretisch sondern ganz konkret vorhanden und benutzbar! Das Datenblatt (für meinen mega1284, auch für den mega32 und andere) spezifiziert sie zwischen 20 kΩ und 50 kΩ. Deshalb verstehe ich nicht, dass Du von einem üblichen Anschlußbild mit externen Pull-Up-Widerständen schreibst. So einen Aufwand hatte ich noch nie gemacht. Wo ist das üblich?
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    282
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Das Datenblatt (für meinen mega1284, auch für den mega32 und andere) spezifiziert sie zwischen 20 kΩ und 50 kΩ. Deshalb verstehe ich nicht, dass Du von einem üblichen Anschlußbild mit externen Pull-Up-Widerständen schreibst. So einen Aufwand hatte ich noch nie gemacht. Wo ist das üblich?
    Das Problem ist wohl, dass die Störfestigkeit mit steigendem Widerstand abnimmt. So wird die Schaltung z. B. empfindlicher gegen sog. "Kriechstrecken", die zum Beispiel bei Verschmutzungen der Schaltkontakte auftreten können, je größer der Widerstand ist. Auch sog. "parasitäre Leitungskapazitäten" - besonders bei langen Leitungen - sind eher ein Problem je höher der Pullup-Widerstand ist. Deshalb haben sich in der Praxis wohl Werte zwischen 5 und 10 kOhm für die Widerstände als "sichere" Größen erwiesen ... und da liegen die internen Widerstände zum Teil einfach deutlich drüber (abhängig vom Controller-Typ bis zu 100k)

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47
    So hab hier mal den Code den ich zum auslesen der werte geschrieben habe:
    #include "RP6RobotBaseLib.h"

    int main(void)
    {
    initRobotBase();
    startStopwatch1();

    while(true)
    {
    if(getStopwatch1() > 300)
    {
    writeString_P("\nADC Akku: ");
    writeInteger(adcBat, DEC);
    writeString_P("\nADC ADC0 ");
    writeInteger(adc0, DEC);
    writeString_P("\nADC ADC1: ");
    writeInteger(adc1, DEC);
    writeChar('\n');
    setStopwatch1(0);
    }
    task_ADC();
    }
    return 0;
    }

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    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

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

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

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

Ä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
  •  

LiFePO4 Speicher Test