Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832_lcd mbed
Fork of Praktikum_2_4_ADC by
Revision 1:660fec290722, committed 2018-03-07
- Comitter:
- slueke
- Date:
- Wed Mar 07 18:57:32 2018 +0000
- Parent:
- 0:8a8d53cb84e8
- Commit message:
- Praktikum_2_4_AMSL_v2
Changed in this revision
C12832_lcd.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C12832_lcd.lib Wed Mar 07 18:57:32 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/atthackathon/code/C12832_lcd/#3e64ca073642
--- a/main.cpp Wed Mar 07 10:20:07 2018 +0000 +++ b/main.cpp Wed Mar 07 18:57:32 2018 +0000 @@ -1,16 +1,39 @@ // Example to set up an interrupt based on the LPC TIMER0 match register, sford - + #include "C12832_lcd.h" #include "mbed.h" +// Definitionen +#define n 9 // n ist die Ordnung des Filters, + // erfordert n+1 Koeffizienten +int i; +float x,y; // Eingang, Ausgang +int PZ; // zeigt auf Ringpuffer p +int PA; // zeigt auf Koeffizienten a,b +float p[n+1]; // Ringpuffer mit n Speichern (n=0 unbenutzt) +float a[n+1]; // Koeffizienten + DigitalOut myled(LED1); -DigitalOut irqled(LED2); +DigitalOut mypin(p21); +AnalogIn input(p19); + +C12832_LCD lcd; + +void Init_Filter(); +float FIR(float x); + +volatile uint16_t poti, poti_f; void myhandler() { //Interrupt Service Routine, wird durch den Timer0_Vektor gestartet + mypin=1; + // do something! - irqled = !irqled; - + poti= input.read_u16(); + + poti_f=FIR(poti); + mypin=0; + // clear the TIMER0 interrupt - LPC_TIM0->IR = 1; //Reset Timer0 Interrupt Flag + LPC_TIM0->IR = 1; //Reset Timer0 Interrupt Flag } int main() { @@ -25,11 +48,11 @@ LPC_TIM0->PR = 0; // calculate period (1 interrupt every second) - uint32_t period = SystemCoreClock / 20; //Period ist die Periodenlänge /4 ursprünlgich für eine Sekunde + uint32_t period = SystemCoreClock / 4; //Period ist die Periodenlänge /4 ursprünlgich für eine Sekunde //SystemCoreClock ist eine Konstante mit dem Wert // set match register and enable interrupt - LPC_TIM0->MR0 = period; //Vergleichswert des Timers wird gesetzt mit Period + LPC_TIM0->MR0 = period/10000; //Vergleichswert des Timers wird gesetzt mit Period LPC_TIM0->MCR |= 1 << 0; // interrupt on match //Einstellung, dass ein Interrupt ausgelöst wird beim Match LPC_TIM0->MCR |= 1 << 1; // reset on match //Einstellung, dass der Timerwert auf Null zurückgesetzt wird bei Match @@ -39,12 +62,60 @@ // start the timer LPC_TIM0->TCR = 1; //Einstellung, dass der Timer gestartet wird + + Init_Filter(); // hang around! - while(1) { //while Schleife, in der die erste LED getoggelt wird + while(1) { + + lcd.cls(); + lcd.locate(0,0); + lcd.printf("%d",poti_f); //while Schleife, in der die erste LED getoggelt wird + myled = 1; wait(0.2); myled = 0; wait(0.2); } -} \ No newline at end of file +} + +void Init_Filter(){ + // ***** Initialisierung am Anfang der Main-Routine +// füer gleitende Mittelwertbildung: + + a[ 0]= 0.1; + a[ 1]= 0.1; + a[ 2]= 0.1; + a[ 3]= 0.1; + a[ 4]= 0.1; + a[ 5]= 0.1; + a[ 6]= 0.1; + a[ 7]= 0.1; + a[ 8]= 0.1; + a[ 9]= 0.1; + + for (PZ=1 ; PZ<=n ; PZ=PZ+1) p[PZ]=0; //Speicher loeschen + PZ = 1; // erstes Ringpufferelement definieren + + } + +float FIR(float x){ + +//********* Beginn des Digitalfilters, Eingang ist x ******* + + + y = a[0]*x; // Aktuellen Messwert mit Koeff. multipliz. + for (PA=1 ; PA<=n ; PA = PA+1) // PA rotiert rechts herum von 1 bis n + { + y = y + a[PA]*p[PZ]; // Teilprodukte aufsummieren + if (PZ<=1) PZ = n; else PZ = PZ -1; // PZ rotiert links herum + } + if (PZ<n) PZ = PZ +1; else PZ = 1; // PZ weiter fuer naechsten Messwert + p[PZ] = x; // Aktuellen Messwert in Ringpuffer einschieben + + return y; + //mypin = 0; // FIR dauert 12 µs +//********* Ende des Digitalfilters, Ausgang ist y ********* + + + } \ No newline at end of file