-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: ATmega8 einfache TasterAuswertung Low/High über ADC7(Pin22)

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2008
    Ort
    Rottweil
    Alter
    43
    Beiträge
    9

    ATmega8 einfache TasterAuswertung Low/High über ADC7(Pin22)

    Anzeige

    Hallo,

    vielleicht kann mir jemand einen Tipp geben?
    Ich habe eine vorgegebene Hardware mit einem
    Low-aktiven Taster am ADC7-Eingang eines ATmega8.

    Wie kann ich nun den Taster auf 0/1 abprüfen, vorerst ohne Entprellung?

    Habe die Forumssuche benutzt und nichts gefunden...
    oder hat mir jemand doch einen Link...?

    Danke schonmal für die Antworten!

    Gruß ZeroCool

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    63
    Beiträge
    622
    Hi,

    hast Du sonst keine I/O-Pins übrig? Wenn Du ADC7 beim ATmega8 einsetzen willst, kommst Du um eine A/D-Wandlung nicht herum; bei einem "normalen" I/O-Pin (im folgenden Beispiel PC0, der natürlich als Eingang konfiguriert sein muss; wenn der Taster gegen Masse schaltet, dann am besten mit internem Pullup-R aktiviert) würde genügen:
    <pre>
    if (PINC&(1<<PC0)) {
    // code für PC0=H (Schalter offen)
    } else {
    // code für PC0=L (Schalter an Masse)
    }
    </pre>
    Wie man eine A/D-Wandlung durchführt, steht im Datenblatt.

    Gruß

    Fred
    Only entropy comes easy. - Anton Checkhov

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2008
    Ort
    Rottweil
    Alter
    43
    Beiträge
    9
    Hallo Frank,

    danke für die schnelle Antwort!

    Wie gesagt die Hardware ist schon vorgegeben, alle anderen Ports sind schon belegt.

    Dann werde ich mal weiter tüffteln.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    63
    Beiträge
    622
    Hi,

    da bleibt Dir nur, eine A/D-Wandlung durchzuführen. Du brauchst also einen externen Pullup-R und musst nach der A/D-Wandlung eine einfache Entscheidung treffen, ob "L" (Taster aktiv) oder "H"-Pegel ansteht. Ich nehme an, AVcc ist beschaltet; überlege mal, was mit Aref geschehen muss. Wenn der A/D-Wandler nicht noch für andere Zwecke benötigt wird, bietet sich AVcc als Referenzsspannung an (intern wählen). Das ist alles gut auf den Seiten zum A/D-Wandler im Datenblatt erklärt.

    Gruß

    Fred
    Only entropy comes easy. - Anton Checkhov

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2008
    Ort
    Rottweil
    Alter
    43
    Beiträge
    9
    Hallo Fred,

    ich vergaß: mega8 in der Bauform TQFP

    Taster ist wie gesagt mit ADC7(Pin22) beschalten und dieser Pin wird bei Betätigung gegen Masse gezogen.

    AREF ist nicht beschaltet.
    AVCC ist VCC.

    Alles klar, ziehe mir nochmal das Datenblatt intensiver rein,
    beim erstem mal hat das noch nicht so gefruchtet.
    Ist das erste mal das ich mich mit dem Thema AD-Wandler
    beim mega8 beschäftige.

    Danke für die schnelle Antwort, tolles Forum hier !

    Gruß Andi

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

    bei einem "normalen" I/O-Pin
    Ein ADC-Pin ist natürlich in erster Linie auch ein normaler I/O-Pin. Zur Tastenabfrage: Pin auf Eingang, internen PullUp einschalten und dann Pin abfragen. Bei gedrücktem Taster (gegen GND) liegt am Eingang low.

    Gruß

    mic

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

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2008
    Ort
    Rottweil
    Alter
    43
    Beiträge
    9
    Hallo mic,

    das wäre ja toll!
    Ich verwende in meinem Programm das hier im Forum schon mehrfach genannte taster.h mit der get_taster Funktion.

    Bei meinen Tasten an Port B und D funktioniert das einwandfrei.
    Nur die letzte Taste an diesem ADC7-Eingang macht Probleme.

    Wenn ich die die Funktion get_taster mit:

    get_taster (5, PINC & (1<<PC7));

    aufrufe, bekomme ich vom Compiler die Fehlermeldung:

    'PC7' undeclared (first use in this funktion)

    bei:
    get_taster (4, PINB & (1<<PB0));
    bekomme ich diese Fehlermeldung nicht.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    32
    Beiträge
    246
    Zitat Zitat von radbruch
    Hallo

    bei einem "normalen" I/O-Pin
    Ein ADC-Pin ist natürlich in erster Linie auch ein normaler I/O-Pin. Zur Tastenabfrage: Pin auf Eingang, internen PullUp einschalten und dann Pin abfragen. Bei gedrücktem Taster (gegen GND) liegt am Eingang low.

    Gruß

    mic
    Nein, dem ist beim Mega8 nicht so.
    Der ADC7 ist ein reiner ADC Pin. ADC6 ist auch nicht gleich PortC6 (das ist nämlich der Reset Pin!).

    Ich habe mich auch gewundert, aber ein Blick ins Datenblatt klärt das auf...

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2008
    Ort
    Rottweil
    Alter
    43
    Beiträge
    9
    also zurück zur AD-Wandlung *Datenblattles'*

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    32
    Beiträge
    246
    Ja leider...

    Im Anhang mal ein simpler ADC-Treiber.
    Dazu muss allerdings Aref = Avcc sein.

    Ansonsten musst du im ADMUX Register noch weitere Bits setzen.

    Aber wie gesagt, ein Blick ins Datenblatt ist auch nicht verkehrt...
    Angehängte Dateien Angehängte Dateien
    • Dateityp: h adc.h (169 Bytes, 12x aufgerufen)
    • Dateityp: c adc_156.c (897 Bytes, 5x aufgerufen)

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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