www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT89C51CC02 PWM-Interrupt


Autor: AT89-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich möchte mit meinem AT89C51CC02 ein PWM-Signal erzeugen, was 
auch prima klappt. Nun möchte ich über High/Low-Wechsel per Interrupt 
benachrichtigt werden.

Dazu kann man anscheinend das ECCFn-Bit im CCAPMn-Register zu den Bits 
PWMn und ECOMn hinzuschalten. Das sollte nach einem EC = 1 (enable 
counter interrupt) dazu führen, daß ein PCA-Compare zu einem 
PCA-Interrupt führt.  Die Interrupts sind schon global eingestellt (ich 
verwende bereits erfolgreich Timer, ADC und CAN-Receive).

Meine PCA-Interrupt sieht so aus (ohne Inhalt):

void pca_interrupt(void) interrupt 4  using 1
{
   ... z. B. High/Lows mitzählen ...
}

Fehlt hier noch was? Mein PCA-Interrupt wird nie aufgerufen... :(

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> void pca_interrupt(void) interrupt 4  using 1
PCA Interrupt müsst Nr. 6 sein. 4 ist die UART.

> EC = 1;
Das ist ok.

Autor: AT89-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm. Da ich total verzweifelt war, hab ich mal einen 
Highspeed-output-Mode programmiert. Dabei bin ich nun auch auf Interrupt 
6 in einem Beispiel aus dem Web gestoßen, was auch prima läuft:

void pca_interrupt interrupt 6 using 1
{
  CCF0 = 0;
  CCAP0H += 0x30; // Increase compare values by 3000h counts
}

void main()
{
  CMOD = 0x02; // Setup PCA Timer
  CL = 0x00;
  CH = 0x00;
  CCAP0L = 0xFF; // Set Event trigger values
  CCAP0H = 0xFF;
  CCAPM0 = 0x4D; // Set PCA module 0 for HSO mode
  IE = 0xC0;
  CR = 1; // Start PCA timer.
  while(1) {}
}

Kann man diese High/Low-Wechsel-Benachrichtigung über Interrupt 6 auch 
mit der PWM-Einstellung machen? Bei PWM (statt High-speed-Output-Mode) 
klappte es bei mir auch nach Wechsel auf Interrupt 6 nicht...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube im 8-Bit PWM-Mode wird nur der PCA-Timer einen Interrupt beim 
Überlauf auslösen. Die einzelnen Flankenwechsel nicht. Du kannst Dir das 
zeitlich aber im Programm berechnen. Ein Eckpunkt ist der PCA-Interrupt, 
den 2. kennst Du auch, der Dutty-Wert. Eventuell könnte man in einen 
schnellen Timerinerrupt auch den Portpin samplen.

Autor: AT89-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ich im Prinzip nur haben möchte, ist eine limitierte Anzahl von 
Flanken. Ich sende "6 Flanken bitte", der uC sendet sie auch und fällt 
dann wieder auf 0 bis zu einer neuen Anfrage.

Ist eine Lösung über die PCA-based High-speed-Output-Methode ok? Ich 
zähle im Interrupt einfach mit und setze CR = 0 (counter off), wenn die 
gewünschte Anzahl erreicht ist. Gibt es keine Nachteile oder Probleme, 
so daß ich mir die PWM-Methode (mit komplizierten) Timer-Berechnungen 
sparen kann?

Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Müsste so klappen...

Kennst Du die Intel PCA-Beschreibung der Anlage? Hat mir schon oft 
geholfen. Zwar nicht von Atmel, aber weitgehend kompatibel.

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.