Forum: Mikrocontroller und Digitale Elektronik Regelalgorithmus programmieren mit ADUC7026


von Aa B. (tnightlife)


Lesenswert?

Hallo Forum ;D,

ich habe da folgendes:

Im Rahmen einer Bachelorarbeit setze ich mich mit einem modular 
aufgebauten und galvanisch getrennten DC-DC  Wandler auseinander. Das 
ganze habe ich soweit aufgebaut und in Betrieb genommen.

Status Quo: Eingangsspannung von ca. 45V wird mit auf ca. 15V 
"ungeregelt" runtergesetzt. Das ganze soll aber am Ausgang "immer" ca. 
15V (Batterie laden) haben. Der Eingang kann zwischen 30V und 65V 
variieren.

Also muss ich einen Regelalgorithmus mit dem Mikrocontroller 
programmieren (welches auch die PWM Signale erzeugt).

Ich habe es mit Hilfestellungen im Labor, dem Handbuch des 
Mikrocontrollers und alten Abschlussarbeiten in denen der selbe 
Mikrocontroller verwendet wurde hinbekommen die PWM Signale zu erzeugen 
doch für die Regelung brauche ich eure Hilfe ;D.

C Programmierung kann ich (mehr oder weniger). Mit dem programmieren von 
Mikrocontrollern habe ich sehr wenig Erfahrung.

Wie kann ich das ganze ansetzen? Womit sollte ich beginnen und wie?

Danke

von Guy (Gast)


Lesenswert?

Am besten fängt man bei den Grundlagen an, wenn man etwas nicht 
versteht.

Also nochmal hinsetzen und nachblättern wie das mit der Regelungstechnik 
so war. :)

von Alois (Gast)


Lesenswert?

Ausgangsspannung über Spannungsteiler einlesen (ADC) und mit Referenz 
vergleichen.
Je nachdem ob der Wert gerade höher oder niedriger als die Referenz ist 
muss die PWM erhöhen bzw. verringern.

Wichtig ist dass du hierbei die Dauer der Umwandlung des ADCs nicht 
außer Acht lässt, die kann einige µs betragen und somit die 
Periodendauer der PWM überschreiten!
-> einen "Rippel" wirst du somit nie komplett vermeiden können.

von Tom (Gast)


Lesenswert?

Für den Einstieg hat Atmel ein nettes Beispiel für einen simplen 
PID-Regler (nicht hardwareabhängig):
http://www.atmel.com/Images/doc2558.pdf
http://www.atmel.com/images/AVR221.zip

von Aa B. (tnightlife)


Lesenswert?

Guy schrieb:
> Am besten fängt man bei den Grundlagen an, wenn man etwas nicht
> versteht.
>
> Also nochmal hinsetzen und nachblättern wie das mit der Regelungstechnik
> so war. :)

Mir geht es mehr um die Umsetzung des ganzen mit dem Mikrocontroller 
ADUC7026.
Was muss ich zu Mikrocontrollern (oder speziell zu diesem) wissen, damit 
ich das Vorhaben auch hin bekomme? Gibt es eventuell ein hilfreiches 
Buch dazu oder Tutorials, wo ich halt praktisch lerne, wie man mit so 
einem Mikrocontroller arbeitet. Als Software nutze ich Keil.

Wie ich die passende Regelung aussuche und programmiere würde ich in 
Ruhe nachlesen und im Internet recherchieren.

Im Grunde gesehen lese ich ja die Daten des Spannungsmessers ein, 
vergleiche diese mit dem SOLL und generiere so den neuen Tastgrad des 
PWM Signals (einfach erklärt)

Ich denke man merkt, dass ich einfach ein Orientierungsproblem habe -> 
Wo beginne ich mit dem Mikrocontroller.

Danke

von Aa B. (tnightlife)


Lesenswert?

Alois schrieb:
> Ausgangsspannung über Spannungsteiler einlesen (ADC) und mit Referenz
> vergleichen.
> Je nachdem ob der Wert gerade höher oder niedriger als die Referenz ist
> muss die PWM erhöhen bzw. verringern.
>
> Wichtig ist dass du hierbei die Dauer der Umwandlung des ADCs nicht
> außer Acht lässt, die kann einige µs betragen und somit die
> Periodendauer der PWM überschreiten!
> -> einen "Rippel" wirst du somit nie komplett vermeiden können.

Genauso habe ich mir das ganze auch in der Umsetzung vorgestellt.

Ich habe aber echt null Ahnung, was die Programmierung mit uC angeht.

Habe mir ein Mikrocontroller Tutorial in ET-Tutorials angesehen. Hat mir 
etwas geholfen, aber nicht entscheidend weiter gebracht.

Ich weiß einfach nicht wie ich das mit dem uC machen soll.

Als Beispiel:

- wie lese ich die Ausgangsspannung die an den uC gegeben wird ein (rein 
softwaretechnisch)?
- wie ändere ich die PWM?
Bisher hatte ich die PWM in einer init.c nur initialisiert und eine 
Totzeit vorgegeben.

Danke

von Alois (Gast)


Lesenswert?

Aa Bb schrieb:
> Ich habe aber echt null Ahnung, was die Programmierung mit uC angeht.
>
> Habe mir ein Mikrocontroller Tutorial in ET-Tutorials angesehen. Hat mir
> etwas geholfen, aber nicht entscheidend weiter gebracht.

Ist ziemlich viel zu erklären, wenn du nur wenig Erfahrung vorweisen 
kannst.

Evtl. hilft dir diese Bachelorarbeit weiter, auf die bin ich damals 
gestoßen, als ich mich mit dem Thema befasst habe:

http://edoc.sub.uni-hamburg.de/haw/volltexte/2008/527/pdf/thesis.pdf

von Stm M. (stmfresser)


Lesenswert?

Nimm einen Arduino für die µController-Programmierung.

Fang mit P-Regler mit Rückkopplung NICHT Mitkopplung an. Dann erweitere 
es mit I und D Reglern+Tiefpass(wenn überhaupt nötig ist.)

http://rn-wissen.de/wiki/index.php/Regelungstechnik

Alles Gute!

von Aa B. (tnightlife)


Lesenswert?

Alois schrieb:
> Aa Bb schrieb:
>> Ich habe aber echt null Ahnung, was die Programmierung mit uC angeht.
>>
>> Habe mir ein Mikrocontroller Tutorial in ET-Tutorials angesehen. Hat mir
>> etwas geholfen, aber nicht entscheidend weiter gebracht.
>
> Ist ziemlich viel zu erklären, wenn du nur wenig Erfahrung vorweisen
> kannst.
>
> Evtl. hilft dir diese Bachelorarbeit weiter, auf die bin ich damals
> gestoßen, als ich mich mit dem Thema befasst habe:
>
> http://edoc.sub.uni-hamburg.de/haw/volltexte/2008/527/pdf/thesis.pdf

Danke dir, ich werde mir das mal durchlesen und hoffe so einen 
Durchblick zu bekommen. Bei weiteren Fragen würde ich mich melden.

von Aa B. (tnightlife)


Lesenswert?

Stm Mc schrieb:
> Nimm einen Arduino für die µController-Programmierung.
>
> Fang mit P-Regler mit Rückkopplung NICHT Mitkopplung an. Dann erweitere
> es mit I und D Reglern+Tiefpass(wenn überhaupt nötig ist.)
>
> http://rn-wissen.de/wiki/index.php/Regelungstechnik
>
> Alles Gute!

Ja, über die Arduino Boards bin ich schon gestoßen und es gibt viele 
Hilfestellungen dazu und es ist auch nicht so teuer. Denke, dass ich mir 
eins zulege und mal einiges probiere.

Bei weiteren Fragen würde ich mich melden.


Danke

von Aa B. (tnightlife)


Lesenswert?

Hallo,

also ich nochmal. Ich hatte mir einen Arduino mit Arm Kern (Cortex-M) 
angeschafft. Doch beim ersten Beispielprogramm hatte es schon Probleme 
(erkannte
das Board nicht -> No Device found on COM), sodass ich es zurück 
geschickt habe. Wobei ist 2 Tage damit verbracht habe es zum laufen zu 
bekommen, weil ich dachte,
dass es an mir liegt. Es schein wohl ein technisches Problem an dem 
Board gewesen zu sein.

Um nicht noch mehr Zeit zu verlieren würde ich mich gerne mit eurer 
Hilfe nach und nach an die uC-Programmierung ran wagen.

Ich messe die Spannung der Batterie, indem ich ein Dreiecksignal mit der 
Batteriespannung vergleiche und das so erzeugte PWM Signal an 
P2.0/SPM9/^CONVSTART (Nr.42)
lege.

Dieser Wert ist ja mein Uist, den ich brauche, um die Differenz zum 
Sollwert zu bestimmen, um dann zu entscheiden ob die Batterie geladen 
werden soll oder nicht.

Also erste Frage, wie bekomme ich den Wert bzw. wo kann ich den Wert 
abrufen?
Die Regelung müsste in der while Schleife geschrieben, da der 
Mikrocontroller beim arbeiten die while (Endlosschleife) abarbeitet oder 
liege ich da falsch?

Danke

von Aa B. (tnightlife)


Lesenswert?

Würde mich echt über eine Hilfestellung freuen, komme da einfach nicht 
weiter.

Das was ich Anhand der Beschreibung im Datenbuch des uC verstehe ist, 
dass man dem Port Pin vorgeben kann, wie es sich verhalten soll 
(P2.0/SPM9/PLAO[5]/^CONVstart) bzw. wozu das Signal am Eingang dieses 
Port Pins verwendet werden soll.
Verwendet wird ein ADuC 7026. Das PWM Signal der Batterie geht (laut 
Layout) an 42 P2.0/SPM9/PLAO[5]/^CONVstart.

Ich weiß nicht, wie ich diesen Pin für mein Vorhaben konfigurieren muss 
und wie ich den Wert dann ablesen/abfragen bzw. mit welchem 
Kommando/Funktion/Variable?

Wie ermittelt man dann Anhand der Information aus der "Variable" welchen 
Tastgrad ich habe?

Das wären erstmal meine Fragen. Im nächsten Schritt würde ich mit diesen 
Informationen versuchen das PWM Signal, welches ich an die Mosfets gebe 
in Abhängigkeit des PWM Signals der Batterie zu regeln.

Danke

von Pandur S. (jetztnicht)


Lesenswert?

Versuch erst mal etwas ueberhaupt zu messen und den Wert per UART an den 
PC zu senden.
Denn das UART benoetigst du sowieso

von Aa B. (tnightlife)


Lesenswert?

Ich gehe mal davon aus, dass du mit "messen", dass messen der Daten am 
Eingang (42 P2.0/SPM9/PLAO[5]/^CONVstart) des uC meinst.

Das würde ich ja gerne, nur weiß ich nicht,

a) als was ich den Port Pin Nr. 42 konfigurieren soll
b) wie ich die Daten, die an diesen Port Pin angelegt werden, abgreife 
(mittels einer Funktion?)

Danke

von Pandur S. (jetztnicht)


Lesenswert?

Ein Oszilloskop ist vorhanden ? Dann wuerde ich mal mit einer LED 
blinken lassen beginnen

: Bearbeitet durch User
von Narfie (Gast)


Lesenswert?

Hallo,

ich versuche mal eine grobe Skizze...

1) 
http://www.analog.com/en/products/processors-dsp/analog-microcontrollers/arm7-core-products/aduc7026.html

-> Datenblatt herunterladen

2) Du kannst Code für die Plattform übersetzen und hochladen? Dann sieh 
dir die PWM-Erzeugung an und vergleiche mit dem Datenblatt, welche 
Register dafür wie gesetzt wurden.

Im Datenblatt findest du auch die Adressen der Register, evtl. gibt es 
in deiner Umgebung bereits Definitionen für die Adressen, ggf. musst du 
aber später eigene ergänzen, also auch anschauen wie es dort gelöst ist.

3) Versuche den UART in Betrieb zu nehmen. Wieder im Datenblatt 
nachlesen, welche Register hierfür auf welchen Wert zu setzen sind. Wie 
man die Register setzt solltest du aus Schritt 2) mittlerweile gelernt 
haben.

Achtung, die ARM7 haben verschiedene Takte für die Peripherie, nicht 
selten hat man vergessen diesen VOR der Konfiguration der Peripherie zu 
aktivieren und dann geht es nicht.

Hoffe das hilft dir.

Gruß,
Narfie

von Aa B. (tnightlife)


Lesenswert?

Ja, Oszi ist vorhanden. Das PWM Signal am Ausgang des Komparators bzw. 
des Optokopplers kommt auch an.

Ich bin an Tutorials für ein anderes uC Board dran, doch das braucht 
sehr viel Zeit, die Basics zu durchlaufen.
Zumal ich dann die Grundlagen, die ich auf dem anderen Board lerne, auf 
das ARM Board des ADuC 7026 übertragen muss, was nochmal Zeit 
beansprucht.
Soviel Zeit habe ich leider nicht. Das uC Programm ist nur ein kleiner 
Abschnitt meiner Bachelorarbeit. Am Ende muss es aber laufen :d .

Im Grunde gesehen muss ich nur wissen, wie ich den Port Pin P2.0 
konfiguriere (bezogen auf mein Vorhaben -> Bestimmung des PWM 
Tastgrades) und wie ich an die Daten an dem P2.0 rankomme.

Laut Handbuch kann man den Eingang als GPIO, SOUT, PLAO[5] oder 
~CONVstart konfigurieren. Ich kann mit meinem "flachen" englisch leider 
nicht ableiten, was davon für mein Vorhaben geeignet wäre.

Eine Hilfestellung wie "... ist geeignet, weil..." würde mir wirklich 
sehr helfen.
Und dann wäre ich beim einlesen der Information. Ich weiß nicht, über 
welchen Register die Daten an dem P2.0 eingelesen werden.

Wenn ich diese beiden Informationen habe, dann bin ich ein ganzes Stück 
weiter.

Danke

von Aa B. (tnightlife)


Lesenswert?

Narfie schrieb:
> Hallo,
>
> ich versuche mal eine grobe Skizze...
>
> 1)
> 
http://www.analog.com/en/products/processors-dsp/analog-microcontrollers/arm7-core-products/aduc7026.html
>
> -> Datenblatt herunterladen
>
> 2) Du kannst Code für die Plattform übersetzen und hochladen? Dann sieh
> dir die PWM-Erzeugung an und vergleiche mit dem Datenblatt, welche
> Register dafür wie gesetzt wurden.
>
> Im Datenblatt findest du auch die Adressen der Register, evtl. gibt es
> in deiner Umgebung bereits Definitionen für die Adressen, ggf. musst du
> aber später eigene ergänzen, also auch anschauen wie es dort gelöst ist.
>
> 3) Versuche den UART in Betrieb zu nehmen. Wieder im Datenblatt
> nachlesen, welche Register hierfür auf welchen Wert zu setzen sind. Wie
> man die Register setzt solltest du aus Schritt 2) mittlerweile gelernt
> haben.
>
> Achtung, die ARM7 haben verschiedene Takte für die Peripherie, nicht
> selten hat man vergessen diesen VOR der Konfiguration der Peripherie zu
> aktivieren und dann geht es nicht.
>
> Hoffe das hilft dir.
>
> Gruß,
> Narfie

Also 1) und 2) habe ich bereits. Ich steure meine Mosfets mit den 
erzeugten PWM Signalen.

Dies habe ich in der folgenden Funktion gelöst:

void init_PWM(void){
PWMEN = 0x0;  //Corssoverfunktion disable
PWMCON = 0x1; //PWM enable
PWMDAT0 = 41780000 / (2 * 30e+3); // Schaltfequenz -> 30kHz
PWMDAT1 = (41780000 / 2) * 100e-9; // Totzeit -> 100ns
}

Die Taktgeschwindigkeit habe ich auch initialisiert:

void init_aduc(void){
POWKEY1 = 0x01;
POWCON  = 0x0;
POWKEY2 = 0xF4;
}


Wozu brauche ich das UART? In einigen uC Tutorials wird damit Text 
ausgegeben (Hello World). Was würde ich damit in diesem Fall machen?

Danke

von Pandur S. (jetztnicht)


Lesenswert?

>Wozu brauche ich das UART? In einigen uC Tutorials wird damit Text
ausgegeben (Hello World). Was würde ich damit in diesem Fall machen?

zB um den Regler einzustellen, und zu kontrollieren ? Einen Regler muss 
man immer anschauen und parametrieren koennen. Einfach dem Prozess 
zuschauen reicht nicht.

von Aa B. (tnightlife)


Lesenswert?

Jetzt Nicht schrieb:
>>Wozu brauche ich das UART? In einigen uC Tutorials wird damit Text
> ausgegeben (Hello World). Was würde ich damit in diesem Fall machen?
>
> zB um den Regler einzustellen, und zu kontrollieren ? Einen Regler muss
> man immer anschauen und parametrieren koennen. Einfach dem Prozess
> zuschauen reicht nicht.

Danke, ich lese mich da mal ein, wie das mit dem UART funktioniert.

Zum testen der Regelung hatte ich mir gedacht, dass ich mit einer 
Spannungsquelle verschiedene Spannungen anlege, um die Batteriespannung 
zu simulieren und mir dann die Ausgänge des uC mit einem Oszi ansehe, 
also die PWM zur Steuerung der Mosfets. Damit könnte ich bestimmen, 
wieviel Volt rechnerisch am Ausgang liegen würden (Ladespannung).

von Pandur S. (jetztnicht)


Lesenswert?

Es ist viel einfacher sich alle interessierenden Reglerparameter und 
-Werte ausgeben zu lassen. Eine Windows Software kann das dann 
visualisieren.

von Aa B. (tnightlife)


Lesenswert?

Jetzt Nicht schrieb:
> Es ist viel einfacher sich alle interessierenden Reglerparameter und
> -Werte ausgeben zu lassen. Eine Windows Software kann das dann
> visualisieren.

Meinst du sowas?

https://www.youtube.com/watch?v=BGsMSS5gWgs

von Aa B. (tnightlife)


Lesenswert?

Bin aber noch nicht soweit.

Ich weiß noch nicht, welches Verhalten ich dem Port Pin P2.0 zuweise und 
über welchen Register ich die Daten bekomme.

Wenn wir als Beispiel die ADC Ports nehmen werden die Aktionen, unter 
anderem, über die Register ADCCP, ADCCON und ADCDAT erledigt.

Bei dem Port 2.0 habe ich leider keinen blassen Schimmer.

von Narfie (Gast)


Lesenswert?

Hallo,

zu deinen Fragen:

>- wie ändere ich die PWM?

Du hast die init_PWM(), ergänze einen Parameter für die Totzeit und 
entferne was du nicht brauchst (auch wenn es sinnvoll kein double zu 
verwenden ..., aber um die Details kannst du dich kümmern wenn es geht):
1
void update_PWM(double tot){
2
  PWMDAT1 = (41780000 / 2) * tot; // Totzeit -> 100ns
3
}

Damit solltest du den Duty-Cycle einstellen können, schöner wäre ein 
prozentualer Anteil der Zykluszeit als Parameter (auch für die Regelung 
nachher), aber das ist ja kein Problem.

----

Was soll an Port Pin P2.0, denn nun genau gemessen werden? Ein analoge 
Spannung oder ein Tastverhältnis, aus deinen Texten kann ich das nicht 
klar schließen?


Gruß,
Narfie

von Aa B. (tnightlife)


Lesenswert?

Narfie schrieb:
>
> Was soll an Port Pin P2.0, denn nun genau gemessen werden? Ein analoge
> Spannung oder ein Tastverhältnis, aus deinen Texten kann ich das nicht
> klar schließen?
>
>
> Gruß,
> Narfie

An den P2.0 geht ein PWM Signal (ca. 120Hz). Aus dem Tastgrad 
(Tastverältnis?) dieses PWM Signals lässt sich dann ableiten, wie der 
Ladestatus der Batterie ist.

Also es muss der Tastgrad bestimmt werden. Ich denke mit Tastverhältnis 
meinst du das selbe.

Das PWM Signal wird erzeugt über einen Komparator, der die 
Batteriespannung mit einem erzeugten Dreiecksignal vergleich. Das wird 
dann über einen Optokoppler galvanisch getrennt an den Eingang (Nr. 42 
P2.0/SPM9/PLAO[5]/^CONVstart.) des uC gelegt.

: Bearbeitet durch User
von Narfie (Gast)


Lesenswert?

Das ist ein wenig blöd. Das Tastverhältnis würde man am besten mit einem 
TimerCapture (Datenblatt S.86) erfassen.

Aber ich kann dir nicht sagen, ob man das damit realisieren kann. Evtl. 
mit einem External IRQ als Startzeitpunkt (Endzeitpunkt) konfiguriert 
auf steigende/fallende Flanke bei P0.2.
Anderer Ansatz, ist ein frei laufender Timer und Interrupts auf 
steigende/fallende Flanke des P0.2 und dann die verstrichene Zeit 
ausrechnen und in einer Variable speichern.

Bevor du hier einen Fehler macht, diese Variable musst du als volatile 
deklarieren und beim Zugriff aus dem Nicht-Interrupt-Kontext die 
Interrupts sperren (je nach Variablentyp).

von Aa B. (tnightlife)


Lesenswert?

Narfie schrieb:

> Aber ich kann dir nicht sagen, ob man das damit realisieren kann. Evtl.
> mit einem External IRQ als Startzeitpunkt (Endzeitpunkt) konfiguriert
> auf steigende/fallende Flanke bei P0.2.
> Anderer Ansatz, ist ein frei laufender Timer und Interrupts auf
> steigende/fallende Flanke des P0.2 und dann die verstrichene Zeit
> ausrechnen und in einer Variable speichern.
>
> Bevor du hier einen Fehler macht, diese Variable musst du als volatile
> deklarieren und beim Zugriff aus dem Nicht-Interrupt-Kontext die
> Interrupts sperren (je nach Variablentyp).

Die letzte Methode hört sich am einfachsten an.

Dort müsste ich den Port Pin P2.0 als GPIO konfigurieren oder?

Ich habe irgendwo gelesen, dass Variablen die im Interrupt genutzt 
werden immer als volatile deklariert werden müsse.
Was heißt denn die "Interrupts sperren"? Wenn ich die Variablen 
außerhalb nutzen würde, ohne diese zu sperren, würde dann ein Interrupt 
aufgerufen werden?

von Aa B. (tnightlife)


Lesenswert?

Ich habe gelesen, dass ich über den Register T1CON die Möglichkeit habe 
folgendes einzustellen:

Timer1 mode. Set by user to operate in periodic mode. Cleared by user to 
operate in free-running mode. Default mode.

Heißt das, der Timer zählt in diesem Modus solange, bis er eine Periode 
durchlaufen hat und beginnt von vorne?

Wenn ja, wäre es doch genau das was ich brauche. Ich müsste nur noch 
wissen zu welchem Zeitpunkt es fällt und wann es steigt, was ich mittels 
der Interrupts ermitteln kann.

Danke

: Bearbeitet durch User
von Narfie (Gast)


Lesenswert?

Ja das bedeutet es. Die zweite Methode hat den Nachteil, dass man 
Ungenauigkeiten durch die Verzögerungen bei der Ausführung des 
Interrupts bekommst. Wenn du es so machst, ist der erste Befehl im 
Interrupt den aktuellen Timerwert in einer Variable zu speichern.

Interrupts sperren um keine Inkonsistenzen zu bekommen, weil dein 
Hauptprogramm gerade die Variable liest und währenddessen ein Interrupt 
kommt und die Variable modifiziert -- ob es hier zu Problemen kommt 
hängt vom Variablentyp und generierten Code ab, aber ich würde auf 
Nummer sicher gehen.

von Aa B. (tnightlife)


Lesenswert?

Narfie ich danke dir erstmal. Ich schaue wieweit ich mit den 
Informationen komme. Bei Fragen werde ich sicherlich nochmal schreiben.

von Aa B. (tnightlife)


Lesenswert?

Hi..


also ich bin jetzt vom Wissen und Gewissen her ;D etwas weiter.

Da der PWM Eingang (Batteriespannung) am Port 2.0 liegt, kann ich kein 
externes Interrupt nutzen (die gehen nur an (4) ganz bestimmten Pins)

Ich muss zur Zeiterfassung (Tastgraderfassung der PWM) einen Timer 
nutzen. In diesem Fall nutze ich den Timer1 (GPIO Timer).

Ich habe das ganze initialisiert indem ich folgendes im Register 
eingestellt habe:

(GP_TIMER_BIT = 0x8;)
IRQEN = GP_TIMER_BIT;

In einer Funktion (Interrupt Handler) habe ich festgelegt, wann der in 
den Interrupt geht und eben was darin gemacht werden soll.

void IRQ_Handler (void) __irq
{
  if (IRQSIG & GP_TIMER_BIT)
  {
...
  }

An der ganzen Sache ist mir ein Rätsel, wie es denn vom "normalen 
Programmablauf" in den Interrupt gelangt?!

Also nochmal: Per IRQEN sage ich WAS ein Interrupt auslösen darf 
(Timer1) und per Handler sage ich, in WELCHEM FALL es in den Interrupt 
gelangen soll.

IRQSIG ist ein read only Register, das angibt, ob und welche 
Interruptquelle aktiviert ist (z.B. Timer 1 an der Stelle 0x8).

Doch wie nutze ich das ganze jetzt?

Ich möchte ja eine PWM, das mit 120Hz ankommt abtasten (if abfragen) und 
die Zeiten ermitteln, in der es HIGH und LOW ist, damit ich daraus den 
Tastgrad bestimmen kann.

Danke

von Aa B. (tnightlife)


Lesenswert?

Ich verstehe das einfach nicht, würde mich echt über eine Hilfestellung 
freuen.

Bei einem externen Interrupt würde man ja in die Interruptroutine 
gelangen, wenn ein Ereignis an dem Eingang eintritt.

Ich verstehe nicht, wann meine Interruptroutine aufgerufen wird, wenn 
ich mit einem Timer zum erfassen des Tastgrades eines PWM Signals 
arbeite.

Danke

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.