mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PCA


PCA
Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Hätte da mal ne frage zum PCA. Ich benutze einen 8051F020 von Silabs.
Also zu meiner Frage:

Ich gebe auf zwei pins ein Rechtecksignal die auf mein Modul 1 und mein 
Modul 2 vom PCA geführt sind. Mittels Uart gebe ich diese Messwerte im 
Hyperterminal aus.PCA ist auf Positive Flanke eingestellt.

habe einen Interrupt der durch den PCA ausgelöst wird darin habe ich 
folgenden Code:

if (CCf1) {

A= PCA0PCL1<<8 I PCA0PCH1
}

if (CCF2) {

Z= PCA0PCL2 <<8 I PCA0PCH2
}

in meiner main habe ich dann geschrieben:


if (Z>A){

Ergebniss= Z-A;
}

if (A>Z){
Ergebniss = A-Z;
}

dann noch die Ausgabe mit printf..........


jetzt zu meiner Frage also die intterupt werden ausgelöst und er rechnet 
auch schön aber ich bekomme unterschiedlich werte bei den Einzelnen 
Timerständen. Die Phasenverschiebung zwischen den Signalen ist immer 
konstannt. Woran kann das liegen? nimmt er vielleicht nicht die 
richtigen flanken?

danke im vorraus

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uups habe versehntlich die register Vertaust. zuerst das H und dann das 
L

sorry.

hat den keiner ne Idee woran es liegen könnte?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sven wrote:
> in meiner main habe ich dann geschrieben:
>
>
> if (Z>A){
>
> Ergebniss= Z-A;
> }
>
> if (A>Z){
> Ergebniss = A-Z;
> }

Ne, das ist Mumpitz.
Im Binärsystem sind Differenzen immer richtig rum, wenn nicht mehr als 
ein Überlauf (Rollover) dazwischen liegt.

Versuch mal folgendes:
if (CCf1) {
// mache nichts
}

if (CCF2) {
Ergebnis = (PCA0PCL2 <<8 | PCA0PCH2) - (PCA0PCL1<<8 | PCA0PCH1);
}

Und dann versuch es zu verstehen.


Peter

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sven,

du solltest nach

if(CCF1) bzw. if(CCF2)

deine Interruptflags zurücksetzen.

Sonst wird dein Interrupt, nach einmaligem eintreffen einer Flanke, 
ständig
ausglöst.

also:
  CCF1 = 0;
  CCF2 = 0;

oder?

gruß max




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.