www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie kann ich einen Wert erneut einlesen Teil2


Autor: MicDen555 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <stdio.h>
#include <reg535.h>

uint HByte,LByte;
long int yr,y;
char x_string[32];       //Default is XRAM
uchar Fenster[4]={64,132,200,12};
uchar k;
float w=6100,e,x,g,z,a,b,h,Kr=1,Kpr=5,T=1.5,dt=0.7,di,
wert,D[4],Sum,Umax=10000,Zmax=1024;
uchar flag,k=(0),n;
float analog(uchar kanal);


void main (void)

{



z=(Umax/Zmax)*analog(1)*1.96;
e=w-z;
x=x+e*dt/T;
di=e*Kr-g;
g=g+di*Kpr;
 }
so sieht mein programm aus ich brauche die  Werte x und g vom alten
Zyklus, weil sonst mein regler schwingt und x und g bei einem reneuten
durchlauf null sind. Wer kann da helfen? Oder habe ich was falsch
gemacht? Ich habe auch schon versucht mit return zu arbeiten leider
klappt dieses auch nicht. Mit einem Programmbeispiel wäre super!

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int val1, val1old;

[..]
while(1)
{
  val1old = val1;
  val1 = readvalue();
  printf("Alter Wert: %d; neuer Wert: %d\n", &val1old, val1);
}
[..]

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Oder habe ich was falsch gemacht?"

Ja, ne Menge:

1. Du hast 3 Threads für das gleiche Thema eröffnet (böses Foul).

2. keine Kommentare

3. keine Mainloop



Peter

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uh, und ich hab ein & vor val1 im printf vergessen ;-)

Autor: Thomas Burkhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm ergibt einfach keinen Sinn. Was soll denn da bitte "x und
g" vom alten Durchlauf bedeuten?

Autor: MicDen555 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
x und g vom alten durchlauf bedeutet: wenn der alte wert im neuen
durchgang eingelesen wird ist die regeldifferenz natürlich kleiner.
da x und g bei mir aber immer null ist ist die regeldifferenz bzw
Stellgröße immer min oder max.

@ peter sorryx für die vielen fehler bin leider noch nicht so lange
dabei

Autor: MicDen555 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ oldBug wo bitte gebe ich das denn genau in mein programm ein und wie
komme ich dann auf x und g?? und nicht auf val1 und val1old?
verstehe das leider nicht so ganz

Autor: Thomas Burkhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in diesem Programm gibt es aber gar keine Durchläufe...

Versuch doch am besten erstmal "dein" Programm zu verstehen. Wenn dir
nicht klar wird, was dir OldBug damit sagen will, dann solltest du
überhaupt erstmal mit nem guten Buch die Programmierung ganz am Anfang
beginnen.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also gut, ich versuchs dann mal...

--8<--

#include <stdio.h>
#include <reg535.h>

uint HByte, LByte;
long int yr, y;
char x_string[32];       //Default is XRAM
uchar Fenster[4] = { 64, 132, 200, 12 };
uchar k;
float w = 6100.0, e, x, g, z, a, b, h,
      Kr = 1, Kpr = 5, T = 1.5, dt = 0.7,
      di, wert, D[4], Sum, Umax = 10000,
      Zmax = 1024;
uchar flag, k = 0, n;

float analog(uchar kanal);

int
main (void)
{
  /* sicher irgendwelcher init-code... */

  /* Haupt-Schleife (main-loop): */
  while(1)
  {
    z  = (Umax / Zmax) * analog(1) * 1.96;
    e  = w - z;
    x  = x + e * dt / T;
    di = e * Kr - g;
    g  = g + di * Kpr;
  }
}

--8<--

Ich denke, das wolltest Du bezwecken...
Ich habe in meinem ersten Post vermutet, daß Du einen Teil des Codes
rausgeschnitten hast...

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.