- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 12

Thema: ADC-Pin Pullup aktivieren

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.698
    Noch ne Frage: welche Plaltine (Schaltung?) benutzt Du und welchen ADC-Pinn genau? Atmega328p als SMD? Der hat ja ADC6 und ADC7 verfügbar die beim PDIP NICHT zur Verfügung stehen.

    .. ich habe jetzt mal einen externen widerstand angeschlossen und jetzt sehe ich auch die 1023 ..
    Wie wärs, wenn Du jetzt als externes Signal für den ADC-Pinn einen Spannunsteiler baust - so etwa 50 % Vcc, danach nochn Test mit rund 30% Vcc und Dir danach den ADC-Wert ausgeben lässt. Das sollte sinnvolle Ergebnisse bringen - wenn "alles" korrekt läuft.

    Anm.: ich hatte schon Controller so krank bekommen, dass die liefen - aber nicht mehr zu flashen waren, dass man sie flashen konnte, aber EINZELNE Pinne tatens nicht bzw. nicht korrekt usw usf. Die Tests könnten so einen Fehler eingrenzen oder aufdecken.

    Weiter mit nem Test von eben.
    Ich benutzte hier als IDE AVR Studio 4.18 Build 700. Aktuell ein Test mit (m)einer Servotester-Software, in C, für nanoclone 328p/20 MHz (!!) mit Poti 10K auf ADC7 zum Variieren der Servoposition. Initialisierung - in C!
    Code:
    // ============================================================================= =
    // ===  Initialisierung fuer ADC/mega328/ADC7   MIT Interrupt free running
    // ===    ADC7/PC7 auf 10 Bit,  fertige Wandlung ###>>> löst Interrupt aus
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      void ADC0_i10free (void)      // Init m328/ADC7, 10 Bit, free runn. Interrupt
     {                            //          Kanal 0 <=> Temperatur RN VNRN-VN2
    // - - - - - - - - - - - - - - -                        Datenblatt 8271C-AVR-08/10
      ADMUX        |=  (1<<MUX2)|(1<<MUX1)|(1<<MUX0);       //                     264
      ADMUX        |=  (1<<REFS0);  // Referenzspannung ist AVcc                 S 263
                                    //
      ADCSRA       |=  (1<<ADEN);   // ADC Enable                                  264
      ADCSRA       |=  (1<<ADSC);   // starte gleich die erste Wandlung            264
      ADCSRA       |=  (1<<ADIE);   // ADC Interrupt Enable                        265
      ADCSRA       |=  (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);    // Prescal clock/128   265
      ADCSRA       |=  (1<<ADATE);  // Auto Triggering Enable                      265
                    // es wird bei clock 20 Mhz mit ca. 80 µs getriggert
                    // genauer: ca 12 Zyklen in 1 ms <=> 1200 Hz
      In_adc        =  0;           // Durchlaufzähler ADC zum Kanalumschalten
     }              // Ende von void ADC_in_10free(void)
    // ============================================================================= =
    Und dabei war es beim Test von eben unerheblich, ob ich den Pinn bei Programmbeginn auf 1/1 (DDRC7 = 1 / PORTC7 = 1 <=> Ausgang mit Pullup) oder 0/0 (DDRC7 = 0/ PORTC7 = 0 <=> Eingang ohne Pullup) oder 0/1 (DDRC7 = 0/ PORTC1 = 0 <=> Eingang mit Pullup) stellle - das LCD zeigt stets die richtigen ADC-Werte an und der Servo läuft unabhängig von der Pininitialisierung immer sinngemäss richtig.

    ......Bild hier  
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Hallo zusammen,

    vielen Dank für euere Rückmeldungen.
    Die Lösungen des Problems war ebenso so banal wie einfach. Ich habe gestern Abend das Datenblatt des µC nochmal durchgelesen und musste, wie oberallgeier auch schon geschrieben hat, feststellen, dass es in der SMD-Version zwei Pins zusätzlich gibt. Nämlich genau ADC6 und ADC7.
    Diese beiden Pins sind wirklich reine ADC-Pins und haben keinen Pullup. Und natürlich hatte ich genau einen dieser beiden Pins in der Mangel. :-D

    Ich habe jetzt mal einen der übrigen ADC-Pins verwendet und siehe da, es funktioniert alles!

    Mit der Hilfe des Pullups sollte es jetzt möglich sein zu bestimmen ob ein Sensor angeschlossen ist oder nicht.

    Vielen Dank nochmal für eure Unterstützung!

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    .. in der SMD-Version zwei Pins zusätzlich .. ADC6 und ADC7 ..
    Datenblatt lesen klingt ja schon mal gut. Bitte beachte u.a.:
    1.1.9 ADC7:6 (TQFP and QFN/MLF Package Only)
    In the TQFP and QFN/MLF package, ADC7:6 serve as analog inputs to the A/D converter.
    These pins are powered from the analog supply and serve as 10-bit ADC channels.
    und
    23.9.5 DIDR0 – Digital Input Disable Register 0
    • Bits 7:6 – Reserved
    These bits are reserved for future use. To ensure compatibility with future devices, these bits
    must be written to zero when DIDR0 is written.
    ..
    Note that ADC pins ADC7 and ADC6 do not have digital input buffers, and therefore do not
    require Digital Input Disable bits.
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo demmy,

    Für mehr als grobe Tests kann man den PullUp aber nicht brauchen.

    Zwischen Minimal- und Maximal-Wert des Widerstands liegt ein Faktor 2x.
    Der Widerstand ist enorm Temperaturabhängig.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    Hi demmy!
    .. Für mehr als grobe Tests kann man den PullUp aber nicht brauchen ..
    Der interne PullUp lässt sich verhältnismässig einfach messen.

    Vorbereitung :
    a) Nimm einen (beispielsweise) 10 kΩ - Widerstand
    b) Wenn Genaugikeit gewünscht: messe den Widerstandswert genau
    c) Programmiere den zu prüfenden Pinn als Eingang mit PullUp
    d) Der zu prüfende Pinn ist ansonsten UNBESCHALTET zu lassen!
    e) Starte den Controller

    Messung :
    f) Messung GND gegen Prüfpinn - Beispiel 5,00 V
    g) Verbinde GND mit Prüfpinn über den Widerstand aus a)
    h) Messung GND gegen Prüfpinn über Widerstand. Beispiel 1,101V

    Auswertung:
    Behauptung: der Spannungsabfall über internen Pullup und über Widerstand "a)" ist 5,00 V, siehe f). Die Spannungsdiffernenz "f)" - "h)" ist der Spannungsabfall des internen Pullups <=> Reihenschaltung der Widerstände.

    U(PullUp) = 5,00V - U(Widerstand 10k) = 5,00V - 1,101V = 3,899V
    I(Widerstand 10k) = U/R(10k) , hier: 1,101V/10kΩ
    R(PullUp) = U(PU) / I (10k) => 3,899V / (1,101V/10k) = 35k4

    Der interne Pullup bei Messbedingungen betrug bei meinem Beispiel 35 kΩ (Messung PU von PINB2 eines mega328/nanoclone-20MHz bei Raumtemperatur).
    Geändert von oberallgeier (23.04.2017 um 10:05 Uhr) Grund: Hinweis auf Reihenschaltung
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo Geier,

    Wie man einen unbekannten Widerstand mit Hilfe einer Spannungsquelle, eines Referenz-Widerstandes und einem Voltmeter bestimmen kann, weiss ich schon seit 50 Jahren

    Allerdings vergisst du dabei, dass so ein PullUp kein Widerstand, sondern ein entsprechend dimensionierter FET ist.
    Der Widerstand ist recht temperaturabhängig. Die Chiptemperatur hängt also auch davon ab, was an den Ports direkt neben dem PullUp so los ist. Muss da ein Ausgang viel Strom liefern, erwärmt sich der Chip lokal.

    Hinzu kommt noch, das der On-Widerstand eines FETs auch noch von der angelegten Spannung abhängt, also nicht konstant ist.
    Versuche deine Messung auch einmal mit unterschiedlichen Widerständen, wie z.B. 1k und 100k und nicht nur mit einem 10k.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    .. Wie man einen unbekannten Widerstand .. bestimmen kann ..
    Ohh, Peter, tut mir leid, Adressats meines Beitrags war der TO demmy. Bitte entschuldige mich, dass ich das so missverständlich geschrieben habe, dass Du als Adressat verstanden werden konntest. Das war keinesfalls so - im Gegenteil - ich bin ja selbst oft Nutzer von Deinem umfangreichen Wissen. Das mit dem FET ist mir (aber erst seit einigen Jahren) bekannt, soweit ich das als (Elektronik)Newbie als bekannt bezeichnen kann *gg*.

    .. Versuche deine Messung auch einmal mit unterschiedlichen Widerständen, wie z.B. 1k und 100k und nicht nur mit einem 10k ..
    Jaa, wieder mal Futter für meinen Testhunger und meinen Wissensdurst. Danke.
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. [ERLEDIGT] Windows XP mit Key aktivieren ?
    Von PICture im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 4
    Letzter Beitrag: 20.02.2016, 19:52
  2. Uhrenquarzan M8 aktivieren
    Von sebastian.heyn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 24.07.2008, 16:01
  3. Subsysteme aktivieren
    Von rkone22 im Forum Robby CCRP5
    Antworten: 2
    Letzter Beitrag: 12.01.2007, 08:22
  4. atmega 8 adc nur teilweise aktivieren?
    Von Mac Gyver im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 14.10.2006, 14:21
  5. pull up wiederstaende aktivieren ?!?!?!
    Von exile im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 27.11.2004, 15:58

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress