Forum: Mikrocontroller und Digitale Elektronik ADC mit PEC-Transfer - C167CR


von Bademeister (Gast)


Angehängte Dateien:

Lesenswert?

Hey Leute,

ich hoffe, ihr könnt mir helfen. Ich bin ein Neuling in Sachen 
Microcontrollern, habe einen C167CR und möchte eine A/D-Wandlung mit 
PEC-Transfer durchführen. Als Debugger nutze ich µVision4.

Die Ports P5.0 und P5.1 sind meine verwendeten Eingänge.

Nun habe ich folgendes vor: ich möchte das die Analogsignale der 
Eingänge permanent konvertiert werden und die Ergebnisse mithilfe des 
PEC in das Feld „Buffer[]“  geschrieben/geschoben werden. Das Feld soll 
2 „Worte“ groß sein (pro ADC-Ergebnis ein Wort) und immer die aktuellen 
A/D-Wandlungsergebnisse beinhalten.
(Ganz zum Schluss sollen die Werte für´s PWM genutzt werden, aber das 
ist jetzt noch nicht aktuell.)
Und noch eine Frage: Wie kann ich mir beim Simulieren die Werte jedes 
Mal in einer Zeile anzeigen lassen? Also das der Text feststeht und sich 
nur die Werte ändern.
„Das Ergebnis ist = XXXXX“ (nur die X sollen sich ändern).

Ein paar Worte zum Vorgehen wären auch ganz gut, damit ich die Chance 
habe es zu verstehen :o)

Im Anhang findet ihr meine ersten Versuche, die mich zum Verzweifeln 
bringen.

Vielen Dank schonmal.

Gruß, der Bademeister

von TManiac (Gast)


Lesenswert?

Moin Bademeister,

warum willst du unbedingt den PEC nutzen wenn du eh immer nur den 
letzten Wert der ADC nutzt? Bei nur zwei Werten würde ich noch einen 
"klassischen Interrupt" nutzen.

Ein paar Kleinigkeiten sind aber in deinem Programm nicht ganz korrekt:
Init_PEC musst du, genauso wie Init_ADC nur einmal ausführen, raus damit 
aus der While(1).
Aus dem Kopf heraus kann ich beim PEC nicht helfen. Ich weiß jetzt nicht 
direkt ob der Source-Pointer nach dem letzten PEC-Transfer automatisch 
zurück gesetzt wird oder ob man das in der dann angetriggerten ISR tun 
muss. (mir fehlt gerade die Zeit das aus dem Manual herauszusuchen)
Du schreibst das du kontinuierlich Abtasten willst. Warum hast du dann 
in deinem Programm "Single-Conversation"?

Beim Simulator kann ich leider gar nicht helfen, da ich den so gut wie 
nie genutzt habe, und wenn dan Tasking.

Gruß,
TManiac

von Bademeister (Gast)


Lesenswert?

Hallo TManiac,

den PEC würde ich gern nutzen, da das ADRES im ADDAT immer zwischen den 
beiden Eingangsweten wechselt. Später sollen diese Werte für eine 
PW-Modulation verwendet werden (Eingänge für Impulslänge und 
Impulspause). Da ADC und PWM unterschiedlich schnell arbeiten könnten 
(asynchron), könnte es beispielsweise passieren, dass im ADRES gerade 
das Ergebnis für die Impulspause vorliegt, obwohl er die Impulslänge 
benötigt.
Mein ADCON war gerade auf "Auto Single Conversion", weil ich ein 
bisschen rumprobiert habe. Ursprünglich hatte ich es auf "Auto 
Continuous Conversion". Der ADC finktioniert auch super, er zeigt mir im 
ADDAT den Kanal und das Ergebnis an, wie es sein soll. Nur leider kann 
ich es nicht verschieben.
Aber deine Idee mit dem "klassischen Interrupt" werde ich mal probieren.

Vielen Dank schonmal und sag bescheid, wenn du eine Lösung mit dem PEC 
gefunden hast :o)

Gruß,
Bademeister

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.