Forum: Mikrocontroller und Digitale Elektronik PIC Minuten Counter funktioniert nicht.


von Raphael M. (runnerschreck92)


Lesenswert?

Hallo zusammen,

für eine Leiterplatte die ich erstelle benötige ich einen Minuten 
Counter/Timer.
Diesen habe ich mithilfe von Variablen erstellt.
Das Restliche Programm läuft einwandfrei.
Nur zählt der Zäher meiner Meinung nach nicht hoch und bleibt bei 0 
stehen.

Die Magnetventile aus der ersten IF abfrage ziehen einwandfrei an.
Alle anderen nicht, da der Zähler wohl immer auf 0 bleibt.

Hier mal der ausschnitt aus dem Programm:
1
  If count4m=0 then      
2
    High  Magnet1
3
    Low    Magnet2
4
    Low   Magnet3
5
    Low   Magnet4    
6
  endif
7
  If count4m=1 then        
8
    Low    Magnet1
9
    Low    Magnet2
10
    Low   Magnet3
11
    Low   Magnet4  
12
  endif
13
  If count4m=2 then      
14
    Low    Magnet1
15
    High  Magnet2
16
    Low   Magnet3
17
    Low   Magnet4  
18
  endif
19
  If count4m=3 then    
20
    Low    Magnet1
21
    Low    Magnet2
22
    Low   Magnet3
23
    Low   Magnet4  
24
  endif
25
  If count4m=4 then      
26
    Low    Magnet1
27
    Low    Magnet2
28
    High  Magnet3
29
    Low   Magnet4  
30
  endif
31
  If count4m=5 then        
32
    Low    Magnet1
33
    Low    Magnet2
34
    Low   Magnet3
35
    Low   Magnet4
36
  endif
37
  If count4m=6 then      
38
    Low    Magnet1
39
    Low    Magnet2
40
    Low   Magnet3
41
    High   Magnet4
42
  endif
43
  If count4m=7 then    
44
    Low    Magnet1
45
    Low    Magnet2
46
    Low   Magnet3
47
    Low   Magnet4
48
  endif
49
  pause 250
50
  let countms = countms +1
51
  if countms = 239 then
52
    let counts = counts +1
53
    countms=0
54
  endif
55
  if counts = 59 then
56
    let countm = countm +1
57
    counts=0
58
  endif
59
  if countm = 3 then
60
    let count4m = count4m +1
61
    countm=0
62
  endif
63
  if count4m = 8 then
64
    count4m=0
65
  endif
66
67
  Goto      CheckCPR

Alle 4 Minuten soll es in die nächste IF abfrage gehen.
Das Programm wird in MPLAB in Basic geschrieben.
Es wäre Spitze wenn mir hier jemand helfen könnte.


Gruß

von Harald (Gast)


Lesenswert?

Keine Ahnung. Basic habe ich zuletzt als 11jähriger Junge programmiert. 
Mach mal die Pause auf 25. Vielleicht ist es nur so langsam, dass Du 
nichts mitkriegst.

von Raphael M. (runnerschreck92)


Lesenswert?

Die Pause auf 25ms zu reduzieren halte ich für wenig sinnvoll.
Ich kann es später aber mal kurz Testen.

Jemand noch eine andere Lösung?
Bzw sollte ich eventuell ganz anderes vorgehen? Timer des Pics nutzen 
usw.
PIC ist ein 16F877A und läuft mit 4MHz.

von Harald (Gast)


Lesenswert?

Raphael M. schrieb:
> ie Pause auf 25ms zu reduzieren halte ich für wenig sinnvoll

Gut. Deine Sache. Leider sieht man nicht, was nach dem Sprung "  Goto 
CheckCPR" passiert. Also zu wenig infos.

Übringens: Dein Programmierstil ist auch für Basic wirklich 
grottenschlecht.

Viel Glück noch.

von Chris B. (dekatz)


Lesenswert?

Viele offene Fragen.
Was macht den <pause 250> überhaupt??
Und wieso muss <countms> genau 239 sein um 1 Sekunde zu erhalten?
Und wo wurde <countms> definiert sowie wo/wie initialisiert?

von rfischer (Gast)


Lesenswert?

welchen Compiler nutzt du denn? Melabs?
Poste bitte das ganze Programm, so weiß man auch mit wieviel MHz dein 
PIC
läuft. Magnetventile und Releis sind träge, 250 mS sind schon kurz.

von Chris B. (dekatz)


Lesenswert?

Wenn der Wert mit <pause> 250ms beträgt und nach 239 Durchläufen die 
Sekunde hochgezählt wird, dauert das 59,75 Sekunden bis <counts> um 1 
erhöht wird!?!? Dann hängt das Programm bis zur 2. IF-Abfrage ca. 4 
Stunden bei der 1. IF rum....

von Karl H. (kbuchegg)


Lesenswert?

Raphael M. schrieb:

> Nur zählt der Zäher meiner Meinung nach nicht hoch und bleibt bei 0
> stehen.

Welcher Zähler? Du hast massenhaft Zähler in deinem Programm.
Und wie hast du festgestellt, dass er (welcher Zähler auch immer) bei 0 
stehen bleibt? Hast du dir die Zahlenwerte im laufenden Betrieb schon 
mal angesehen - alle Zähler, da ja einer vom anderen abhängt?

von Raphael M. (runnerschreck92)


Lesenswert?

Chris B. schrieb:
> Wenn der Wert mit <pause> 250ms beträgt und nach 239 Durchläufen die
> Sekunde hochgezählt wird, dauert das 59,75 Sekunden bis <counts> um 1
> erhöht wird!?!? Dann hängt das Programm bis zur 2. IF-Abfrage ca. 4
> Stunden bei der 1. IF rum....

"Brett vor dem Kopf"
Darf natürlich nur 4 Durchläufe machen!
Nun läuft es super ;)

Danke

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.