Forum: Mikrocontroller und Digitale Elektronik Probleme beim Code


von Tobias N. (silberkristall)


Lesenswert?

Hi leute,

ich weiss gerade nicht weiter. Ich habe mir eine Schlatung zusammen 
gebaut wofür ich nun den Code erstellen muss. Eine Art "test" Code 
klappt auch so teilweise aber ich weis nicht wie ich z.b. delay_ms 
umgehen kann da, wenn der delay ja ausgeführt wird der chip erstmal 
nichts weiter macht.

Derzeit löse ich das so:

http://nopaste.info/524f0c214e.html

Das ganze klappt auch so aber wie schon erwähnt, wenn z.b. beide 
gleichzeitig schalten sollen dann schaltet erst der eine dann der andere 
wegen dem delay_ms, wie kann ich das umgehen/verändern?

Dann will ich noch Zählungen vornehmen aber das ganze klappt garnicht:

http://nopaste.info/b505bb7f84.html

Das ganze klappt garnicht. Das eingangssignal beträgt 5V also jedesmal 
wenn 5V anliegen und halt wieder weg gehen soll er zählen aber da 
passiert garnichts.

Ich hoffe mir kann jemand helfen.

von Karl H. (kbuchegg)


Lesenswert?

Mit externen Links sind wir hier gar nicht glücklich.
Wenn du Code zum herzeigen hast, dann poste ihn entweder direkt oder
häng ihn als Attachment an. So geht er nicht verloren, selbst wenn du in
3 Jahren deinen externen Webhoster wechselst.
1
//////////////////////
2
    // Türtasterfunktion//
3
    //////////////////////
4
    
5
    // Links
6
    
7
    if (tuerlinkstasterstrom == 1) {} else {
8
    
9
    if (!(PIND & 1<< PD0))
10
        {
11
            tuerlinkstaster = 1;
12
        } else  {
13
            tuerlinkstaster = 2;
14
        }
15
    }
16
    
17
    if (tuerlinkstaster == 1)
18
    {
19
        if (tuerlinkstasterstatus == 1) {}
20
        else
21
        {
22
            if (tuerlinkstasterset == 1) {}
23
            else
24
            { tuerlinkstastertime = 0; tuerlinkstasterset = 1; }
25
            tuerlinkstastertimer = 3;
26
            tuerlinkstasterstrom = 1;
27
            PORTC |= (1<<PC5);
28
            _delay_ms(300);
29
            PORTC &= ~ (1<<PC5);
30
            tuerlinkstasterstrom = 0;
31
            tuerlinkstasterstatus = 1;
32
        }
33
    
34
    }
35
    
36
    if (tuerlinkstaster == 2)
37
    {
38
        if (tuerlinkstasterstatus == 2) {}
39
        else
40
        {
41
            if (tuerlinkstasterset == 2) {}
42
            else
43
            { tuerlinkstastertime = 0; tuerlinkstasterset = 2; }
44
            tuerlinkstastertimer = 2;
45
            tuerlinkstasterstrom = 1;
46
            PORTC |= (1<<PC4);
47
            _delay_ms(600);
48
            PORTC &= ~ (1<<PC4);
49
            tuerlinkstasterstatus = 2;
50
            tuerlinkstasterstrom = 0;
51
        }
52
    
53
    }
54
    
55
    // Rechts
56
    
57
    if (tuerrechtstasterstrom == 1) {} else {
58
    
59
    if (!(PIND & 1<< PD1))
60
        {
61
            tuerrechtstaster = 1;
62
        } else  {
63
            tuerrechtstaster = 2;
64
        }
65
    }
66
    
67
    if (tuerrechtstaster == 1)
68
    {
69
        if (tuerrechtstasterstatus == 1) {}
70
        else
71
        {
72
            if (tuerrechtstasterset == 1) {}
73
            else
74
            { tuerrechtstastertime = 0; tuerrechtstasterset = 1; }
75
            tuerrechtstastertimer = 3;
76
            tuerrechtstasterstrom = 1;
77
            PORTC |= (1<<PC3);
78
            _delay_ms(300);
79
            PORTC &= ~ (1<<PC3);
80
            tuerrechtstasterstrom = 0;
81
            tuerrechtstasterstatus = 1;
82
        }
83
        
84
    
85
    }
86
    
87
    if (tuerrechtstaster == 2)
88
    {
89
        if (tuerrechtstasterstatus == 2) {}
90
        else
91
        {
92
            if (tuerrechtstasterset == 2) {}
93
            else
94
            { tuerrechtstastertime = 0; tuerrechtstasterset = 2; }
95
            tuerrechtstastertimer = 2;
96
            tuerrechtstasterstrom = 1;
97
            PORTC |= (1<<PC2);
98
            _delay_ms(600);
99
            PORTC &= ~ (1<<PC2);
100
            tuerrechtstasterstatus = 2;
101
            tuerrechtstasterstrom = 0;
102
        }
103
    
104
    }
105
    
106
    //////////////////////////
107
    //Türtasterfunktion ende//
108
    //////////////////////////

2. Teil
1
if ((PIND & 1<< PD3))
2
            {
3
                blinking = blinking + 1;
4
                // Setze Timer zurück
5
                Timer1_Reset();
6
            }
7
        
8
            if (blinkingtime == 2)
9
                {
10
                // Wenn Zählungen der ZV vorhanden
11
                if (blinking > 0)
12
                    {
13
            
14
                    // Prüfe ZV Blinker zählungen
15
                    if (blinking == 1)
16
                        {
17
                            alarm = 1;    // Schalte Alarmvar. ein
18
                            //kfzschliessen = 1;    // Schalte KFZ Schliessenfunktion ein
19
                            blinking = 0;    // Setze blinking auf 0
20
                        }
21
                
22
                    if (blinking == 2)
23
                        {
24
                            alarm = 0;    // Schalte Alarmvar. aus
25
                            blinking = 0;    // Setze blinking auf 0
26
                        }
27
                        
28
                    if (blinking == 3)    // Fenster öffnen / schliessen
29
                        {
30
                            //zvfenster = 1;    // Schalte zvfenstervar. auf 1
31
                            blinking = 0;    // Setze blinking auf 0
32
                        }
33
                
34
                    if (blinking == 4)    // Kofferraum öffnen
35
                        {
36
                            //kofferraummotor = 1; // Setze Kofferraummotorvar. auf 1
37
                            blinking = 0;    // Setze blinking auf 0
38
                        }
39
                    }
40
                    blinkingtime = 0;
41
                    }
42
                
43
                if (blinking > 4) { blinking = 0; }

von Frank (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang wird nur �������������������������� angezeigt.

von Karl H. (kbuchegg)


Lesenswert?

Danke Frank.
Keine Ahnung, was da schief läuft.

von Karl H. (kbuchegg)


Lesenswert?

Konkret zum Code:

Was soll das eigentlich machen? Das kommt mir heftig viel Code vor, 
dessen Funktion nicht wirklich klar ist. Und ich bin mir fast sicher, 
dass man das auch einfacher lösen kann.


Deine _delay_ms scheinen beispielsweise nur die eine Aufgabe zu haben, 
eine LED nach einer bestimmten Zeit wieder abzuschalten.
Das macht man mit einem Timer. LED einschalten, Timer starten und wenn 
der Timer abgelaufen ist, schaltet der die LED wieder ab.

von Tobias N. (silberkristall)


Lesenswert?

Also der Taster code soll folgendes machen (geschaltet wird auf masse)

Wenn der Taster gedrückt wird soll er 600 ms schalten und wenn er wieder 
losgelassen wird soll er 300 ms schalten.

Rechts sowie links, also das sind die Taster die an den Türen vom Auto 
sind. Wird die Tür zu gemacht soll das fenster 600 ms hoch fahren, wird 
die tür auf gemacht dann 300ms runter. das klappt ja auch soweit nur 
halt wenn man beide türen gleichzeitig öffnet geht erst die eine, dann 
die andere seite runter.

Der Zähler Code soll folgendes machen.

Wenn man per Funk ZV (Zentralverriegelung) Blinken die Blinker halt 1mal 
oder 2 mal oder 3 mal etc. und anhand des "blinkens" soll der Zählen wie 
oft es war, danach 2 sek. warten (vom ersten bis zum zweiten blinken 
dauert es jeweils 1 sek.) dann soll der jenachdem wie oft das blinken 
war etwas schalten, ein relai o.ä.

Das Signal kommt direkt von den Blinkern und wird mittels 7805er auf 5V 
und dann mittels 1k widerstand an den Chip gegeben.

Einen Timer habe ich auch, dieser lässt alle 3 sek eine LED in der Tür 
blinken.

Ich hatte mit C noch nicht viel zu tun deswegen wird der Code vll. etwas 
umständlich sein aber vorerst geht es mir darum das es geht.

von Tobias (Gast)


Lesenswert?

Kann mir denn keiner weiter helfen?

von Karl H. (kbuchegg)


Lesenswert?

Dein Tasten/Schaltzeiten Problem ist eine Variation hiervon

Beitrag "Re: Arduino Keypad und Multitasking"

von Klaus W. (mfgkw)


Lesenswert?

Wenn dein Programm mehrere Sachen (quasi) gleichzeitig machen soll, 
lohnt es sich das gcc-Tutorial durchzuarbeiten.

Das hat auch den Vorteil, daß man nicht jedem alles wieder von vorne 
erklären muß, obwohl es schon tausendmal durchgekaut wurde und genau 
deshalb ins Tutorial kam.

Wenn du das mit Verstand durch hast, sollte dein Problem auch gelöst 
sein.
Wenn nicht, lohnt es sich konkret zu fragen wo es hakt.

von Karl H. (kbuchegg)


Lesenswert?

Klaus Wachtler schrieb:

> Wenn nicht, lohnt es sich konkret zu fragen wo es hakt.


Wo's hakt?
Wie immer:   "Ich muss auf etwas warten"   ---->  _delay_ms

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
Noch kein Account? Hier anmelden.