www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik M16C + ADC


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem mit dem ADC des M30624FGAFP.
Ich initialisiere den ADC:
    adcon1=32;
    adcon2=1;
    adcon0=8;
    adcon0=72;
und lese den Wert später in ad0 aus. Allerdings ändert sich der Wert
nicht, sondern bleibt immer gleich, obwohl sich die Spannungen am
Eingang ändern. Ich habe schon mehrere Kanäle ausprobiert, aber es geht
nicht. Der Wert in ad0-ad7 scheint zufällig zu sein, und ändert sich nur
wenn ich die Spannung abschalte.
Die Software ist OK, auf einem M30626FHPFP läuft die Problemlos und
auch der ADC funktioniert.
Laut Datenblatt gibt es keinen Unterschied zwischen den beiden uC im
Bereich des ADCs an Port 10.

Autor: Andreas Huck (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab hier nur mal einen ADC-Ausschnitt von meinem
Bordcomputerprogramm mit dem M16c (M30624FGAFP). Benutze Kanal 4,
weitere Angaben hab ich grad nicht da...
ADC - Pins auf Eingang und sogar alle mit Pull-up sehe ich gerade bei
der Initialisierung - Naja wenns ging :-)

if (adst==0)                   // Wandlung fertig
{
  adcon1 = 0x30;                // AD-Wandler Einstellungen 8-Bit
  adcon0 = 0x04;
  if (Index_adc==0)             // Nur alle 100ms Wert nehmen
  {
     Variable = ad4;
  }
  if (y != y_alt)
  {
     adst = 1;                    // starte AD-Wandlung erneut
     Index_adc = 1;
  }
  y_alt = y;
}

Vielleicht hilft es dir ja.
Viel Spass
Andreas

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,
die Pullups stören nicht weiter, die haben etwa 70k.
Leider geht es auch nicht, er zeigt weiterhin konstant 16 an, obwohl 5V
am Eingang liegen. Auf dem 30626 geht es.
Ich werde mal versuchen den uC zu tauschen, allmählich vermute ich, es
liegt an einem Hardware Problem.

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist das PDxx Register richtig gesetzt? PS- und PSL-Register
musste ich ja nur setzen, weil ich den ANEX0 Pin verwendet habe,
das fällt ja bei dir weg.

Lutz

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ist auf Eingang, Pullups sind aktiviert, aber das ist kein Problem.
Die Software ist definitiv OK, auf dem 30626 geht es ja.

Autor: ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du vref auch wirklich angeschlossen?
probier mal VCUT=0

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am Vref Pin messe ich 4,97V, VCut ist auf 1 gesetzt.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt mal einen zweiten M30624FGAFP ausprobiert, mit dem selben
Ergebnis: Er liefert immer denselben Wert. Der Poti hängt an P10.0. Hier
mal der komplette Code. Dieser müsste eigentlich stimmen (hab das
Datenblatt mindestens 10x gelesen).

    char ADW,Noise=0;

    asm( "\tFCLR    I");    /* Disable interrupt */
    ifsr=192;
    int4ic=6;
    int5ic=21;

    pd1=63;
    pd0=255;
    pd10=0;
    pur0=32;
    pur2=48;
    p1=0;
    p0=0;


    adcon2=0;
    adcon1=32;
    adcon0=0;

    adst=64;

    Delay (1000);

    p1=32;
    Delay (100000);

 while (1)
 {
if (adst==0)                  // Wandlung fertig
{
  adcon1 = 32;                // AD-Wandler Einstellungen 8-Bit
  adcon0 = 0;                 // Kanal 0
  adst = 1;                   // starte AD-Wandlung erneut
}

        ADW=(ad0%256);

        adout [5]=ADW/100+48;       //Text für Display generieren
        adout [6]=(ADW/10)%10+48;
        adout [7]=ADW%10+48;

        ShowTXTMode (56, adout,3);
}

Autor: BeRnD (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Benedikt,

ich kenne dein SFR header file nicht aber es scheint mir unerklärlich
warum du einerseits adst = 64 und in dem erneuten AD Wandlungsstart
adst = 1 gesetzt wird. Ich nehme an dass, du adst als Bit vom ADCON0
Register definiert hast. Daher solltest du auch nur eine 1 zuweisen.

Bis dann
BeRnD

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, ist aber nur ein Schreibfehler, im richtigen Programm steht
adcon0=64;

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nahc einigen Stunden rumbasteln an den StarUp Files habe ich den Fehler
gefunden.
Es lag am PLL, der beim 624 nicht existiert. Eigentlich sollte das
Programm die PLL Initialisierung überspringen, aber das macht es
anscheinend nicht.
Also falls jemand das selbe Problem hat (bzw. einen M16C ohne PLL
verwendet), folgende Zeilen auf der ncrt0.a30 entfernen:

    btst    1,07h
    jne     skip_pll
    mov.b   #08h,06h        ;set clock to no division
    mov.b   #11h,1ch        ;PLL multiply by 2
    bset    0,0ah
    bset    7,1ch           ;PLL On
    mov.w   #0FFFFh,R0
stabilize:
    nop
    sub.w   #1,R0
    jne     stabilize
    bset    0,0ah
    bset    1,07h           ;PLL = main-clock

skip_pll:

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.