-         

Ergebnis 1 bis 9 von 9

Thema: Config ADC - nur einen Eingang benutzen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Beiträge
    39

    Config ADC - nur einen Eingang benutzen

    Anzeige

    Hi,

    ich habe einen ATmega168 (rn mini). An diesem möchte ich nun einen Eingang als Analogeingang benutzen: PC.0 = ADC0.
    Die anderen Pins PC.1 bis PC.5 sind im Moment Ausgänge für LEDs.

    Wenn ich jetzt "Config Adc = Single , Prescaler = Auto" eingebe, werden ja alle Analogeingänge (PC.0 bis PC.5) zu Analogeingängen. Das stört jedoch die späteren Definitionen als digitalen Out (LEDs).

    Wie ist der Code um nur diesen einen Pin (PC.0) als Analogeingang zu definieren? - und damit die anderen PC.x als Ausgänge zu benutzen!!

    Gruß - Klaus

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Ich bin nicht so der Bascom-Profi und mag es eigentlich jetzt nicht testen, aber das scheint mir eher unwahrscheinlich:
    Wenn ich jetzt "Config Adc = Single , Prescaler = Auto" eingebe, werden ja alle Analogeingänge (PC.0 bis PC.5) zu Analogeingängen.
    Hast du das festgestellt oder ist das eine Vermutung? Mit "Config Adc" wird doch nur der Wandelmodus (einmal oder Dauerlauf) und der Prescaler festgelegt. Trotzdem kannst du jeden adcfähigen Pin weiterhin auch als Ausgang nutzen, vermutlich könntest du sogar einen als Ausgang definierten Pin auch per ADC einlesen. Der ADC kann den Port nicht für sich reservieren, wie es z.B. der USART mit TXD kann. Beim Wandeln liest der ADC den Pegel des zum Kanal gehörenden Pin in ein Zwischenregister ein und digitalisiert anschließend den Wert. Ob der Pin ein Eingang ist, seinen PullUp aktiviert hat oder gar ein Ausgang ist entscheidet nur der Programmierer.

    Sicherheitshalber kannst du erst den ADC konfigurieren und danach die PC1 bis PC5 auf Ausgang setzen. Das würde eine eventuelle Definition der Pins als Eingang durch das Config Adc überschreiben.

    Der Code würde dann so aussehen:
    Code:
    Config Adc = Single , Prescaler = Auto
    Config Portc = Output
    Config Pinc.0 = Input
    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Beiträge
    39
    werde es morgen mal testen - danke dir erst mal - hört sich logisch an. später mehr.

    Gruß - Klaus

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Beiträge
    39
    Hi,

    habe es probiert und nach Messung sind genau 3,45 Volt am ADC(0). Das Auslesen ergab aber immer einen Wert von 1023 - also 100%. Das konnte nicht sein.
    Die
    Lösung:
    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    Die Angabe zur Referenzspannung fehlte. Dann geht es.

    Danke.

    Gruß - Klaus

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo Klaus

    Schön, dass es jetzt funktioniert. Das hättest du auch schon eher haben können, wenn du in deiner Eingangsfrage das schon erwähnt hättest:

    "Das Auslesen ergab aber immer einen Wert von 1023 - also 100%."

    Die Frage nach der richtigen Referenz hätte sich dann unweigerlich aufgedrängt ;)

    [Haarspalt]
    btw. ist das nicht ganz sauber in (meiner 1.11.8.7) Bascom-Doku zu Config Adc:
    The following ASM is generated(depending on the chip)

    In _temp1,ADCSR ; get settings of ADC
    Ori _temp1, XXX ; or with settings
    Out ADCSR,_temp1 ; write back to ADC register
    Die Referenz-Bits REFS1:0 sind aber im ADMUX.
    [/Haarspalt]

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Beiträge
    39
    nun, hatte am Anfang das Kabel mit der Spannung noch nicht angelötet, weil ich dachte das es ungünstig wäre an einen Ausgang von außen Spannung zu legen. Habe das erst nach deiner Antwort gemacht.

    Die 3 Zeilen Assembler sagen mir leide nichts - trotdem danke.
    Programmierst du in assembler?

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Nein, ich programmiere nicht in Assembler, ich lerne noch C. Aber ich schau mir gelegentlich den Output des C-Kompilers an und versuche das zu verstehen. Die drei Zeilen interpretiere ich so:

    In _temp1,ADCSR kopiert den Inhalt des ADCSR nach temp1
    Ori _temp1, XXX verodert temp1 mit den Daten aus Config Adc
    Out ADCSR,_temp1 schreibt das Ergebniss in das ADCSR-Register

    Die Referenz im ADMUX wird dabei eigentlich nicht gesetzt. Es wird zwar angemerkt, dass dies vom verwendeten Kontroller abhängig wäre, aber die AVRs sind sich da ziemlich ähnlich bis gleich (einer der Vorzüge der AVRs). Letztlich war ich aber zu faul um im Schaltplan des RN-MiniControl zu suchen und nachschauen, welche Referenz dort verwendet wird. (Allerdings sehe ich gerade, dass der Schaltplan nicht Online verfügbar ist. Schade eigentlich)

    Egal, Hauptsache dein Code funzt :)

    In der Beschreibung von getadc() steht dann noch folgendes:
    The pins of the A/D converter input can be used for digital I/O too.
    But it is important that no I/O switching is done while using the A/D converter.
    "Die Pins des A/D-Wandlers-Eingangs können auch als digitale I/Os verwendet werden. Allerdings ist es wichtig, dass die I/Os nicht geändert werden während der ADC verwendet wird." Damit wäre das dann auch geklärt ;)

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Beiträge
    39
    Danke dir für die Info.

    habe mir gerade mal dein Video (link unter deinem Bild) auf youtube angeschaut- cool.

    Brauchst du noch einen PR6 ? ich habe hier einen rumstehen den ich nicht brauche - programmiere ja mittlerweile mit der Bascom Serie. Ich würde ihn dir günstig lassen.

    Gruß - Klaus

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Die kleine Kamera ist eines meiner Lieblingsprojekte :)

    Hier wird aktuell ein RP6 gesucht:

    http://www.roboternetz.de/phpBB2/zei...ag.php?t=50146

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Berechtigungen

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