Forum: Mikrocontroller und Digitale Elektronik Zeitgesteuerte Signalausgabe/Verarbeitung einer Rampenfunktion


von Steffi (Gast)


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

von думлихер троль (Gast)


Lesenswert?

irgendwie wird der auszugebende Wert nicht erhoeht...

von думлихер троль (Gast)


Lesenswert?

Und irgendwie wird das main() mit seinem 255er loop genau einmal 
durchlaufen.

von думлихер троль (Gast)


Lesenswert?

in einem for-loop geht man ganz sicher nicht an der loop variablen 
rumpfuschen. Wenn man eine endlose schleife will, macht man ein 
while-true-do

von Steffi (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ Steffi (Gast)

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

HEUREKA!

Aber die VErsion mit Delay sollte für den ersten VErsuch auch laufen.

von Peter D. (peda)


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.

von Karl H. (kbuchegg)


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?

von Martin (Gast)


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 ++;
      }
   }
}

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.