Forum: Mikrocontroller und Digitale Elektronik ADC Prog Problem Freescale S12X Familie


von Michael M. (aesis)


Lesenswert?

Hi,

ich hab das Problem, dass ich einfach den ADC nicht zum laufen bekomme.

Dieser soll einfach ein Wert einlesen und abspeichern:

void main(void)
{...

openAD0(); /*initiate AD0 */

 ATD1CTL5 = 0xC9; /* start an A/D conversion: 8bit right unsigned on 
AN17 */

  while (!(ATD1STAT0 & SCF)); /* wait for the A/D conversion to complete 
*/

  buf = ATD1DR0; /* save result in register */
...
}

void openAD0(void)
{
ATD1CTL2 = 0xE0; /* enable AD0, fast ATD flag clear, disable AD0 in wait 
mode */
ATD1CTL3 = 0x0A; /* set to perform one conversion; end it before freeze 
*/
ATD1CTL4 = 0x25; /* four cycles sample time, prescaler set to 12 */
}

Vll. kennt wer die Prozessorfamilie und findet den Fehler und kann mir 
helfen. Den Wert im Reg. benutze ich zur Setzung eines PWM Signals (Duty 
Cycle), was allerdinsg nicht zu funktionieren scheint, da ich am PWM 
Ausgang keine Änderung sehen kann :(.

Viele Grüße

aesis

: Verschoben durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mit "PC-Programmierung" hat das irgendwie nichts zu tun.

-> verschoben.

von Markus B. (mbp-bayern)


Angehängte Dateien:

Lesenswert?

Hallo Michael,

Diese Prozessorarchitektur kenne ich.

Mit dem "X" für X-Gate kenn ich mich zwar nicht aus.
Das ist für einfache Aufgaben aber auch nicht nötig
und die Prozessoren sind dann verwendbar wie jene ohne X.

Selbst ohne X ist der Prozessor sehr komplex;
Wie kommst Du zu der "Ehre" ?

Codewarrior mit PE (= PROCESSOR-EXPERT) finde ich eine bessere Lösung,
als alles von Hand einzustellen...

PE: 
http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=PROCESSOR-EXPERT

Ansonsten:

Hast Du schon verschiedene Festwerte aus der Funktion,
die den ADC liest zurückgegeben, ohne den ADC tatsächlich zu lesen,
um zusehen, ob die PWM-Routinen Funktionieren ?

Wenn ja,
Hast Du das richitge ADC-Modul ausgewählt ?
Du Schreibst "/*initiate AD0 */", aber Du bastelst an den Bits vom ADC1

Ich hänge Dir mal von PE generierte Codes für 2 Konfigurationen an;
Daraus kannst Du villeicht was abschauen.

Lasse Dich nicht vom Namen in die Irre führen,
es war beides mal der AD0 - nie ein AD2.
Einmal für einen Prozessor ohne X und einmal für einen mit X.
(Steht in den Kommentaren von PE)

MFG:MBP
Markus.

von Michael M. (aesis)


Lesenswert?

Vielen Dank für deine Antwort. Ich werde es mir gleich einmaal 
anschauen.

Der Prozessor - um genau zu sein der MC9S12XDP512CAG - liegt hier noch 
ein paar mal in unserer Bastelwerkstatt rum mit einem SK-S12XDP512-A 
Eval-Board und bevor ich mir einen besseren Atmel für ~15€ das Stück 
kaufe, dachte ich mir, dass ich diese Prozessoren nehmen könnte :).

Ja mit AD0 meinte ich eigentlich einfach nur meinen 
Analog/Digitaleingang 0. Ich fange beim ADC1 mit dem AN17 Pin an bis zur 
AN23 - macht sich bei meinem gewünschten Layout einfach günstiger.

Mit XGATE muss ich mich wahrscheinlich auch noch auseinandersetzen, da 
ich Software und Hwareware PWM bezüglich der EMV vergleichen werde und 
vll. auf Software-PWM umsteigen "muss", aber das ist eine andere 
Baustelle :).

Als Prog habe ich den CodeWarrior im Einsatz. Diese Special-Edition von 
freescale.

von Michael M. (aesis)


Angehängte Dateien:

Lesenswert?

Ach kann es sein, dass mir da noch ein Modul fehlt? Denn ich habe zZ nur 
eines für den speziellen Prozessor drin.

von Michael M. (aesis)


Angehängte Dateien:

Lesenswert?

Leider brachte auch dieser Versuch keinen Erfolg:

void main(void)
{...

ATD1_vInit; /*initiate ATD1 */

  for(;;) {

    ATD1_vStartSingleConversion; /* start an A/D conversion */

  while (!(ATD1STAT0 & ATD1STAT0_SCF)); /* wait for the A/D conversion 
to complete */

  }
...
}

von Markus B. (mbp-bayern)


Lesenswert?

Michael M. schrieb:
> Leider brachte auch dieser Versuch keinen Erfolg:
>
Hallo Michael,

ich hatte die letzten Tage keine Zeit ins Forum zu sehen,
werde mir aber nun am Wochenende genauer ansehen was da los ist.

MFG:MBP
Markus

von Markus B. (mbp-bayern)


Angehängte Dateien:

Lesenswert?

Hallo Michael,

einen Fehler mit den Headern kann ich mir nicht vorstellen.
In Deinem CPU steht ...MC9S12XDP512... drin - sollte also passen.

Wenn ein weiterer fehlen würde, so kannst Du nicht compilieren.

Nun habe ich mir auch Deine Einstellungen angesehen:

  ATD1CTL2 = 0x42;

Leicht unübersichtlich aber wohl OK: ADPU wird erst später aktiviert;
PE würde hier 0xC2 verwenden und den ATD sofort anheizen.


  ATD1CTL3 = 0x00;

Warum "Number of Conversions" = 16 ?
PE würde für 1 Kanal ohne Sequenz S1C setzten = 0x08.


  ATD1CTL4 = 0xB3; /* four cycles sample time, prescaler /40 */

Arbeitest Du mit PLL ?
Denn für 4 oder 16 MHz auf dem Board wäre der Prescaler etwas hoch,
aber auch bei zu langsamer Conversion sollte noch was aus dem ADC 
kommen.


  ATD1CTL5 = 0xA9; /* 8-bit, right justified, unsigned */

Leicht unübersichtlich aber wohl OK: SCAN wird erst später deaktiviert;
PE würde hier 0x09 verwenden;

ATD1CTL5 würde von PE im übrigen nicht vorinitialisiert;
Erst bei der Kanalwahl beschreibt er das.



Leider kann ich da nicht wirklich eien groben Fehler erkennen;
Du kannst noch prüfen, ob die Interrupts global aktiv sind.

Auch solltest Du die Doku zu deinem Board durchforsten,
was die Referenz angeht.



Nochmal zu PE = Processor-Expert:
Bei mir war dieser mit auf der Freescale-SETUP-CD für den Progrmmammer;
Er integriert sich wunderbar in den Codewarrior.

Du kannst die Einstellungen SEHR einfach vornehmen,
ohne jedes Bit und seine Grenzen im Datenblatt zu suchen.
Siehe PE.PNG und Beanselector.png

Eine Warnung zu PE:
Wenn Du in den generierten Mudulen editierst,
so solltest Du immer Sicherheitskopien vor dem Compilieren machen.
Je nach Einstellungen kann PE auch mal Deine Änderungen durch seine 
ersetzen!


MFG:MBP
Markus

von aesis (Gast)


Lesenswert?

Hallo,

ich hatte es nochmal anders geschrieben und seither funktioniert es 
auch, auch wenn ich nicht weiß, warum der alte Code nicht will. 
Scheinbar führen viele wege zum ADU Ergebnis.

Viele Grüße

aesis

von aesis (Gast)


Lesenswert?

Achja iwie scheint beim alten Code der ATD interrupt nicht ausgelöst 
worden zu sein.

von Markus B. (mbp-bayern)


Angehängte Dateien:

Lesenswert?

aesis schrieb:
> viele wege zum ADU Ergebnis

Hallo Michael,

tia mir ist bekannt, dass viele wege nach Rom führen;
Manche aber auch über Moskau...

Nun hoffe ich also mal,
Dein Weg zum ADU Ergebniss war nicht ganz so lang,
und wünsche Dir noch viel Spaß beim Weiterentwickeln.


Bei mir wird auch bald wieder was mit dem S12 entstehen,
aber ohne den "Bohnen-Eintopf-Generator" mache ich da nix.
Nie mehr ohne PE und seine Beans, seit ich das 1x verwendet habe ;-)

Einstellungen wie PLL, Interrupt-Prioritäten, Timings, Baudraten,
Pin-Mapping für SCI/SPI/CAN usw. sind damit extrem einfach.


MFG:MBP
Markus.

von aesis (Gast)


Lesenswert?

Also wenn ich den Prozessor Expert aufrufe und mir die Einstellungen 
anschaue, stimmen diese nicht mit meinem Code überein, zBsp PLL 
deaktiviert, was garnicht stimmt usw.

von Markus B. (mbp-bayern)


Lesenswert?

Hallo Michael,

irgendwie ist mein Post von vorgestern leider unter die Räder gekommen.
Da hab ich wohl nach der Vorschu übereilig alle Fenster zu gemacht.
Also neuer Versuch:

aesis schrieb:
> stimmen diese nicht mit meinem Code überein

Nun das, was Du beobachtest hast,
das ist dann der Fall, wenn du den PE nachträglich aktivierst.

Der PE kann aber nicht aus deinem Code die Einstellunen lesen.

Bei einem neuen
"Project with P...-E..." sollte er Dir aber
nach Deinen Einstellungen und dem folgenden "make" einige
"generated files" (.c/.h) anlegen,
in denen Du die Einstellungen wie eingestellt findest.

Für jede weitere Bean erstellt PE normal ein Pärchen c+h.
Man kann auch einstellen, ob er die ISR's erzeugen soll etc.

Nach eineigen Tests sollte das alles nicht schwer zum verstehen sein,
und man kann sich schneller dem wesentlichen am Programm widmen.

Natürlich kann man vorhandene Routinen übernehmen;
Auch, wenn diese selbst Module initialisieren,
Nur bekommt der PE davon nichts mit.
Er hält die Resource für frei und würde erlauben,
dafür eine Bean anzulegen.
Die Folgen einer solchen Doppelbelegung kannst Du dir denken.

MFG:MBP
Markus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.