Zeitgesteuerte Signalausgabe/Verarbeitung einer Rampenfunktion

Gast #3608278
Lesenswert?

hi hallo,

bei der Realisierung einer Rampenfunkion soll diese zeitgesteuert 
ausgegeben und verarbeitet werden. Nach meiner Recherche ist hier nach 
dem Polling zu verfahren. Wie das ganze theoretische funktioniert ist 
mir klar, bloß bei der Umsetzung hapert es und bräuchte hier Hilfe, wie 
ich das ganze realisieren kann.
1
#include <stdio.h>                 //Standard Input/Output
2
#include <drv_dac084s085.h>        //Treiber DAC
3
#include <drv_ioport.h>            //Standart Input/Output
4
#include <devices.h>              //Standard
5

6
dac084s085_t     *ptrDAC;
7

8
uint32_t Spannungsausgang = 0;              
9
uint count,i,j;
10

11
int main ()    
12
{
13
 ptrDAC = dac084s085_open(DAC);   //Öffnen der Schnittstellen zur Ausgabe
14

15
 dac084s085_write(ptrDAC,0,Spannungsausgang,true);
16
 dac084s085_write(ptrDAC,1,Ausgabe,false);                            
17
 dac084s085_write(ptrDAC,2, Ausgabe,false);                               
18
 dac084s085_write(ptrDAC,3, Ausgabe, false);                               
19

20
     for(count=0;count<=255, count++) 
21
              
22
     {
23
     dac084s085_write(ptrDAC,DAC084S085_OUTA,Spannungsausgang,true);
24
     delay(100);       //Delay variable Frequenz (10 Hz)
25
     if(count==255)
26
     count=0;
27
     }
28
}
29

30
void delay(int time)
31
{
32
for (int i=0;i<time;i++);
33
for (int j=time;j>0;j--);
34
}

für Ratschläge, Tipps, Hinweise danke ich schon einmal

gruß steffi
#3608487
Lesenswert?

Wär ja schon wichtig, was für eine HW/SW-Umgebung das ist.

Dein dac084s085_write will 4 Argumente. Eins davon dürfe der DAC-Wert 
sein, den Du hochzählen mußt, sonst wird das nix.

Lokal benutze Variablen sollte man auch lokal definieren, macht u.a. das 
Lesen leichter.

Dein Delay dürfte recht kurz sein, oder arbeitet die CPU nur im kHz 
Takt. Und 2 Loops hintereindander ist recht sinnfrei. Wenn nötig, dann 
ineinander.
#3608493
Lesenswert?

Steffi schrieb:
> bin nochmal das ganze im Geiste durchgegangen. Wahrscheinlich sollte ich
> das ganze mit einem Timer Interrupt realisieren.

Ich würde sagen:
wahrscheinlich solltest du dir erst mal deine ersten Sporen in der 
Programmierung verdienen.

Timer ist zwar an und für sich eine gute Idee. Aber dein jetziges 
Programm zeigt, dass es da zuallererst mal an noch viel grundlegenderen 
Dingen happert.

Sowas
1
void delay(int time)
2
{
3
for (int i=0;i<time;i++);
4
for (int j=time;j>0;j--);
5
}
ist beispielsweise Müll. Jeder Schwachmaten-C-Compiler wirft dir den 
Teil komplett raus. Hast du denn in deiner Entwicklungsumgebung keine 
ordentlichen delay Funktionen zur Verfügung, die du benutzen könntest 
und die auch funktionieren?
Gast #3608768
Lesenswert?

Die for-loops werden vom compiler "herausoptimiert", weil innerhalb der 
Loop nichts zu berechnen ist. Um das zu vermeiden könnte man dort z.B. 
eine statisch deklarierte Variable hochzählen.
Und wie schon von Peter geschrieben: Wenn nötig, dann die for loops
ineinander verschachteln:

int zaehler =0;
void delay(int time)
{
   int i,j;
   for (int i=0;i<time;i++)
   {
      for (int j=time;j>0;j--)
      {
          zaehler ++;
      }
   }
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren