Hallo, ich habe eine frage an euch. Ich komme nicht weiter bei meinem Programm. Undzwa bekommt mein Eingang mehrere Signale hintereinander. Ich möchte das er die Signale die in einer Minute ankommen zählt und speichert. Die eine Minute soll auch in dem Programm einprogrammiert werden. Alle Signale die nach der Minute ankommen sollen ignoriert werden. Danke im vor raus für die Hilfe
:
Verschoben durch User
Marcus schrieb: > Danke im vor raus für die Hilfe so wird das nichts. Was Hast du denn schon selber programmiert? Und auf welcher Plattform soll das laufen? In welcher Form kommen denn die Signale. Zeige uns ein Programm und erkläre wo du nicht weiterkommt, dann können wir helfen.
Dann zeig doch mal dein programm und erkläre uns für welche plattform es entwickelt wird (avr,pic,arm,pc..). Welch toolchain/ide verwendest du ? Wie sehen die signale aus (zeichnung), welches timing haben die signale, wieviele signale treten maximal auf ? Du siehst, hier fehlen sehr viele infos ;)
ich schätze jetzt mal mit "Signale" Meinst du irgendwelche Pulse. Dann kannst du den Timer so programmiern, dass du die Minute erkennst (Timer-Interrupts anaschaun) und mit einem Counter die Pulse hochzählen (steigende oder fallende Flanke, Levelchange, ...) wie schon beschrieben ohne mehr Infos, ist es schwierig mehr Infos zu geben. Lesestoff: https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR
Für einen ominösen, fiktiven Mikrocontroller: Polling:
1 | #include <time.h> |
2 | #include <unistd.h> |
3 | |
4 | #define DURATION (1 * 60.0) // 1 Min.
|
5 | |
6 | #define DELAY (1000U) // 1 ms
|
7 | |
8 | |
9 | //
|
10 | // Polling - meist schlecht
|
11 | //
|
12 | void uc_auslasten() { |
13 | time_t start = time(NULL); |
14 | while(difftime(time(NULL), start) < DURATION) { |
15 | //
|
16 | // Fröhliches Signaleeinlesen
|
17 | //
|
18 | |
19 | //
|
20 | // Polling-Frequenz kontrollieren
|
21 | //
|
22 | usleep(DELAY); |
23 | |
24 | };
|
25 | }
|
1 | #include <time.h> |
2 | #include <unistd.h> |
3 | |
4 | #define DURATION (1 * 60.0) // 1 Min.
|
5 | |
6 | void main() { |
7 | time_t start = time(NULL); |
8 | enable_data_available_irq(); |
9 | while(1) { |
10 | //
|
11 | // Spass mit den Daten
|
12 | //
|
13 | }
|
14 | }
|
15 | |
16 | |
17 | //
|
18 | // IRQ Handler
|
19 | //
|
20 | _IRQ_VECTOR_OF_SOME_KIND_ data_available() { |
21 | if(difftime(time(NULL), start) < DURATION) { |
22 | //
|
23 | // Fröhliches Signaleeinlesen
|
24 | //
|
25 | } else { |
26 | //
|
27 | // Ende des Schauspiels
|
28 | //
|
29 | disable_data_available_irq(); |
30 | }
|
31 | }
|
Okay tut mir leid dies ist mein erster Beitrag. Also die Signale kommen von einem Relais und das Signal beträgt 5V. Ich programmiere mit PICkit 3 und benutze den Compiler xc8. Das Timing wird von einem Motor bestimmt ich möchte nämlich die Umdrehung pro Minute Zählen dies halt mittels einer Lichtschranke und dem Signalherausgebenden Relais. Bei der Häufigkeit der Signale kommt es darauf an wie schnell der Motor läuft. Nach einer Minute soll er die noch kommenden Signale Ignorieren und die Signale die er in der einen Minute gezählt hat Speichern. Diese Zahl muss ich dann mit 10 Dividieren. Das wäre eigentlich alles den Rest wollte ich selber versuchen. Ich hoffe das sind genug Informationen
Marcus schrieb: > ich habe eine frage an euch. Ich sehe in Deinem Beitrag kein einziges Fragezeichen - Du hast keine Frage gestellt.
so wir das nix - ich empfehle mal eine Stufe tiefer anzusetzen, z.B. https://www.amazon.de/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=sr_1_1?s=books&ie=UTF8&qid=1473931402&sr=1-1&keywords=kernighan+ritchie dein Programm hängt ewig und drei Tage in einer Warteschleife...
Du solltest dein Windows-Help-Center überprüfen. Da gibt es unbearbeitete Hinweise!
denker schrieb: > dein Programm hängt ewig und drei Tage in einer Warteschleife...
1 | while(1); // ist hart |
2 | |
3 | while(2); // ist härter |
Impulse kann man mit einem TC (TimerCounter)zählen. Oder du pollst einen Input und zählst selbst die Pulse, da kannst du auch eine Entprellung einbauen.
frag mal hier im Community Bereich www.Roboternetz.de die helfen Dir schnell und problemlos. Hier habe ich noch nie brauchbare Hilfe erhalten
Marcus schrieb: > Okay tut mir leid dies ist mein erster Beitrag. Also die Signale kommen > von einem Relais und das Signal beträgt 5V... Das Timing wird von einem > Motor bestimmt Ist das Signal entprellt? > ich möchte nämlich die Umdrehung pro Minute Zählen dies halt mittels > einer Lichtschranke und dem Signalherausgebenden Relais. Bei der > Häufigkeit der Signale kommt es darauf an wie schnell der Motor läuft. Ja, wie schnell läuft er denn? > Nach einer Minute soll er die noch kommenden Signale Ignorieren und die > Signale die er in der einen Minute gezählt hat Speichern Am besten du vergisst mal diesen ganzen Mist mit den Delays. Zum Zählen verwendet man Counter (nicht unbedingt ;-) und für die Zeit Timer. Mit welcher Frequenz wird der 18F1220 getaktet?
while(1) ist das gleiche wie while(2). Das ist eine loop(forever), du kommst aus dieser Schleife nicht raus, sowas macht man zB. 1 mal und arbeitet dort zyklisch die Aufgaben ab. sowie beim Arduino: init(); loop() { read_input(); do_something_else(); ... }
Nix schrieb: > while(1) ist das gleiche wie while(2). Nicht ganz: while(2) ist sicherer, denn wenn die binäre Unschärfe bedacht wird, dann kann eine besonders große 0 fast so groß sein wie eine besonders kleine 1. Nimmt man 2 statt 1, ist man auch in diesem Fall auf der sicheren Seite.
Was trollen? Warum glaubst du haben die ARMs alle ein Error Correction Bit im Befehlssatz, falls ein Bit kippt kann so der Befehl trotzdem noch richtig dekodiert werden.
Ihr seid richtige mega krasse Bitkipper und Schubser. Hab mal Leitsysteme in C programmiert.. Da ist mir noch nie ein Bit gekippt.
klausi schrieb: > Hab mal Leitsysteme in C programmiert.. In C? Das muß doch dann ein Leid-System sein. MfG Paul
Warum nicht gleich Lochkarten? PS: Am besten diesen Thread gleich mit in eines versenken...
Bart Simpson schrieb: > Warum nicht gleich Lochkarten? Lochkarten lese ich ganz gerne mal wieder, da stehen so schöne Kurz-Geschichten drauf. mfG Paul
> Nicht ganz: while(2) ist sicherer, denn wenn die binäre Unschärfe > bedacht wird, dann kann eine besonders große 0 fast so groß sein wie > eine besonders kleine 1. für while(1) könntest Du auch while(true) oder while(1==1) schreiben; da kann ich beim besten Willen nichts mit binäre Unschärfe erkennen. while(2) wird nur verwendet um die beiden Endlosschleifen unterscheiden zu können.
mitgelesen schrieb: > while(2) wird nur verwendet um die beiden Endlosschleifen unterscheiden > zu können. WTF?
Also der OP muss ein Troll sein, so einen vermurksten Code schreibt niemand, der auch nur ein bischen Ahnung von C hat. Wenn das "Programm" kein Scherz sein soll, das bleibt genau hier hängen:
1 | while(1) |
2 | delay(59400); |
Paul B. schrieb: > klausi schrieb: > Hab mal Leitsysteme in C programmiert.. > > In C? Das muß doch dann ein Leid-System sein. > > MfG Paul Oja! Da hast Du recht! Diese Systeme dann auchnoch bei ner Firma in Inbetriebnahme zu nehmen, hat mich dutzende Nachtschichten, graue Haare gekostet... War in der Logistikindustrie.. Speichermaler? Doppelpointer? In falschen Bereich reingeschrieben? Corba Prozess tot, Förderstrecke bleibt stehen.. hinten stauen sich schon die Pakete...
klausi schrieb: > ab mal Leitsysteme in C programmiert.. > Da ist mir noch nie ein Bit gekippt. Das ist offenbar Ewigkeiten her, und damals war das noch nicht so schlimm, weil die Strukturgrößen viel gröber waren. Bei den heutigen Systemen sind die Strukturgrößen so klein, daß der Bitfraß nicht erst nach Jahrzehnten merkbare Auswirkungen hat. Da Endlosschleifen aber naturgemäß sehr lange laufen, sollte man hier besonders strikte Maßnahmen gegen den Bitfraß treffen.
Ja das mit dem Bitfraß wird immer schlimmer. Ich hatte mal besonders viele Endlosschleifen einprogrammiert, da konnte man zuschauen wie das RAM und die Prozessor Register immer weniger wurden. Die Software musst dann so optimiert werden das sie mit 100GB Flash, 100 Byte RAM und 1 Register auskam. Besonders die 100GB Flash hatten mir wirklich Probleme bereitet. Das ging nur noch mit sehr Size optimierter Compilierung.
fürn Hugo schrieb: > Ja das mit dem Bitfraß wird immer schlimmer. Ich hatte mal > besonders > viele Endlosschleifen einprogrammiert, Du hast für die Endlosschleifen hoffentlich komplettes Loop-Unrolling gemacht, oder? Weil das macht man jetzt so sagen die Hippster-Programmierer mit Zöpfchen.
Jack schrieb: > Du hast für die Endlosschleifen hoffentlich komplettes Loop-Unrolling > gemacht, oder? Weil das macht man jetzt so sagen die > Hippster-Programmierer mit Zöpfchen. Du hast den Dutt vergessen. Als Hipster muss das heute sein. Zu beobachten beim Chef-Hipster von Heise JKJ.
Hannes J. schrieb: > mitgelesen schrieb: >> while(2) wird nur verwendet um die beiden Endlosschleifen unterscheiden >> zu können. > > WTF?
1 | while ("my guitar gently weeps") { |
2 | |
3 | }
|
Was seid ihr alle nur für überhebliche Fuzzis? Da will einer (offensichtlich ein Anfänger) Hilfe haben und Euch fällt nichts weiter ein als ihn dumm zu machen. Wenn ihr nicht helfen wollt, dann sagt dies doch gleich, damit weiß man (er) wenigstens woran man (er) ist. Das was ihr hier macht ist unterste Schublade - ihr solltet Euch schämen. Ich wünsche jedem von Euch Schlaubergern, daß ihr auch mal so dumm angemacht werdet, damit ihr mal merkt wie das ist.
Mitleser schrieb: Komm gib's zu, du bist der ursprüngliche Fragesteller, oder? > Was seid ihr alle nur für überhebliche Fuzzis? > > Da will einer (offensichtlich ein Anfänger) Hilfe haben und Euch fällt > nichts weiter ein als ihn dumm zu machen. Der Anfänger hat kurz nach den ersten Rückfragen seine Mitarbeit bei der Lösung seiner Probleme eingestellt. > Das was ihr hier macht ist unterste > Schublade - ihr solltet Euch schämen. Nein, müssen wir nicht. Dieses Spielchen von zarten Blümlein die sich alle Informationen wie Würmer aus der Nase ziehen lassen und dabei die Beleidigte Leberwurst spielen, egal was man fragt oder sagt, kennen wir zu genüge. > Ich wünsche jedem von Euch Schlaubergern, daß ihr auch mal so dumm > angemacht werdet, damit ihr mal merkt wie das ist. Ok, und nun geh bitte wieder Minecraft spielen und halte dich von ernsthafter Programmierung fern.
Cyblord -. schrieb: > Du hast den Dutt vergessen. Als Hipster muss das heute sein. Zu > beobachten beim Chef-Hipster von Heise JKJ. Oh ja, der schärfste Provinz-Hipster im Norddeutschen Tiefland, Jan-Keno Janssen. "irgendwas mit Medien" studiert, Volontariat beim Jeverschen Wochenblatt. Einfach ein Mann von Welt der uns heute eben jene große Welt und moderne Technik erklärt. Da kann man auch mal klatschen. Bevor der auf den Hipster-Trip kam lief der übrigens als, ach seht selber: Früher: http://www.innovators-summit.com/uploads/pics/Jan-Keno_Janssen_cropped.jpg Heute: http://www.heise.de/ct/zcontent/16/16-hocmsmeta/1470315586502646/contentimages/image-146891031910798.jpg
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.