#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!
int val1, val1old; [..] while(1) { val1old = val1; val1 = readvalue(); printf("Alter Wert: %d; neuer Wert: %d\n", &val1old, val1); } [..]
"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
uh, und ich hab ein & vor val1 im printf vergessen ;-)
Das Programm ergibt einfach keinen Sinn. Was soll denn da bitte "x und g" vom alten Durchlauf bedeuten?
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
@ 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
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.