M16C + ADC

Gast #115197
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.
Gast
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
Gast
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.
Gast
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
Gast
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);
}
Gast
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
Gast
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.