C programmieren

Gast #4720340
Lesenswert?

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
Gast #4720344
Lesenswert?

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.
Gast #4720345
Lesenswert?

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 ;)
Gast #4720354
Lesenswert?

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
Gast #4720372
Lesenswert?

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
}
Gast #4720377
Lesenswert?

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
Angehängte Dateien:
#4720478
Lesenswert?

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?
Gast #4720499
Lesenswert?

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();
   ...
}
Gast #4720515
Lesenswert?

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.
Gast #4721201
Lesenswert?

> 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.
Gast #4721414
Lesenswert?

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...
Gast #4721432
Lesenswert?

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.
Gast #4721451
Lesenswert?

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.
Gast #4721553
Lesenswert?

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.
Gast #4722407
Lesenswert?

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.
#4722480
Lesenswert?

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.
#4722486
Lesenswert?

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

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