mikrocontroller.net

Forum: Offtopic C programmieren


Autor: Marcus (Gast)
Datum:

Bewertung
-5 lesenswert
nicht 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

: Verschoben durch Moderator
Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TestX (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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 ;)

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-T...

Autor: Jack (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Für einen ominösen, fiktiven Mikrocontroller:

Polling:
#include <time.h>
#include <unistd.h>

#define DURATION (1 * 60.0)   // 1 Min.

#define DELAY (1000U)    // 1 ms


//
// Polling - meist schlecht
//
void uc_auslasten() {
   time_t start = time(NULL);
   while(difftime(time(NULL), start) < DURATION) {
        // 
        // Fröhliches Signaleeinlesen
        //
    
        //
        // Polling-Frequenz kontrollieren
        //
        usleep(DELAY);

    };
}

#include <time.h>
#include <unistd.h>

#define DURATION (1 * 60.0)   // 1 Min.

void main() {
    time_t start = time(NULL);
    enable_data_available_irq();
    while(1) {
        //
        // Spass mit den Daten
        //
    }
}


//
// IRQ Handler
//
_IRQ_VECTOR_OF_SOME_KIND_ data_available() {
    if(difftime(time(NULL), start) < DURATION) {
        // 
        // Fröhliches Signaleeinlesen
        //
    } else {
        //
        // Ende des Schauspiels
        //
        disable_data_available_irq();
    }
}

Autor: Marcus (Gast)
Datum:
Angehängte Dateien:

Bewertung
-4 lesenswert
nicht 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

Autor: Nop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus schrieb:
> ich habe eine frage an euch.

Ich sehe in Deinem Beitrag kein einziges Fragezeichen - Du hast keine 
Frage gestellt.

Autor: denker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so wir das nix - ich empfehle mal eine Stufe tiefer anzusetzen, z.B.
https://www.amazon.de/Programming-Language-Prentic...

dein Programm hängt ewig und drei Tage in einer Warteschleife...

Autor: Aufpasser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest dein Windows-Help-Center überprüfen. Da gibt es 
unbearbeitete Hinweise!

Autor: Reinhard M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
denker schrieb:
> dein Programm hängt ewig und drei Tage in einer Warteschleife...

while(1); // ist hart

while(2); // ist härter


Autor: Justus Skorps (jussa)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Code als Screenshot, na klar...da will jemand wohl partout keine 
Hilfe...

Autor: Nix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Kollege von nebenan (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Abteilung 2313 is not amused!

Autor: Svenja (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
frag mal hier im Community Bereich
www.Roboternetz.de
die helfen Dir schnell und problemlos.
Hier habe ich noch nie brauchbare Hilfe erhalten

Autor: Volker SK (vloki)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Nix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
   ...
}

Autor: Nop (Gast)
Datum:

Bewertung
6 lesenswert
nicht 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.

Autor: Nix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann sollte besser while(3) verwendet werden, es könnte ja ein Bit 
kippen.

Autor: Reinhard M. (Gast)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
while(-1) ist noch sicherer.
hier sind ALLE bits gesetzt ;-)

Autor: Henry G. (gtem-zelle)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Wie kann man sich nur so hart trollen lassen?

Autor: Nix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: klausi (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
Ihr seid richtige mega krasse Bitkipper und Schubser.

Hab mal Leitsysteme in C programmiert..
Da ist mir noch nie ein Bit gekippt.

Autor: Paul Baumann (paul_baumann)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
klausi schrieb:
> Hab mal Leitsysteme in C programmiert..

In C? Das muß doch dann ein Leid-System sein.

MfG Paul

Autor: Indeed (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
Ich programmiere Mikrocontroller nur in Javascript. C ist Schnee von 
gestern!

Autor: Bart Simpson (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Warum nicht gleich Lochkarten?

PS: Am besten diesen Thread gleich mit in eines versenken...

Autor: Paul Baumann (paul_baumann)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Bart Simpson schrieb:
> Warum nicht gleich Lochkarten?

Lochkarten lese ich ganz gerne mal wieder, da stehen so schöne 
Kurz-Geschichten drauf.

mfG Paul

Autor: mitgelesen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Jaeger (pnuebergang)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mitgelesen schrieb:
> while(2) wird nur verwendet um die beiden Endlosschleifen unterscheiden
> zu können.

WTF?

Autor: Daniel H. (Firma: keine) (commander)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
while(1)
delay(59400);

Autor: klausi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Nop (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: fürn Hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Cyblord ---- (cyblord)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hannes J. schrieb:
> mitgelesen schrieb:
>> while(2) wird nur verwendet um die beiden Endlosschleifen unterscheiden
>> zu können.
>
> WTF?
while ("my guitar gently weeps") {

}

Autor: Mitleser (Gast)
Datum:

Bewertung
-1 lesenswert
nicht 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.

Autor: Hannes Jaeger (pnuebergang)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Jaeger (pnuebergang)
Datum:

Bewertung
-1 lesenswert
nicht 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-...

Heute:
http://www.heise.de/ct/zcontent/16/16-hocmsmeta/14...

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, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.