Forum: Mikrocontroller und Digitale Elektronik Ampelsteurerung auf Wartungsmodus


von Carola K. (caro)


Angehängte Dateien:

Lesenswert?

Hi!
Ich sitz gerade in der Schule und komme mit dem Programmieren der 
Ampelsteuerung auf den Wartungsmodus (dauerhaft gelb Blinkend) nicht 
weiter!
Ich hab auch das fertige Programm mit gepostet!
(für den PIC16F690)
Ich hoffe ihr könnt mir ein paar Tipps geben

: Gesperrt durch User
von pcbfreak (Gast)


Lesenswert?

Benutz doch den Debugger.

Gruß Martin

von Marco Beffa (Gast)


Lesenswert?

Was genau funktioniert denn nicht?

Ich würde mal vorschlagen du formatierst deinen Code anständig und 
kommentierst ihn ein wenig aus... dann wird das ganze doch schon etwas 
übersichtlicher...

von Carola K. (caro)


Lesenswert?

Da ich keine Ahnung habe was ein Debugger ist bitte ich um eine 
erklährung
BITTE!

von Karl H. (kbuchegg)


Lesenswert?

Carola Kneißl wrote:
> Hi!
> Ich sitz gerade in der Schule und komme mit dem Programmieren der
> Ampelsteuerung auf den Wartungsmodus (dauerhaft gelb Blinkend) nicht
> weiter!
> Ich hab auch das fertige Programm mit gepostet!
> (für den PIC16F690)
> Ich hoffe ihr könnt mir ein paar Tipps geben

Du musst das ganze komplett umbauen.
So wie das jetzt ist, kriegst du das nicht rein.

Dass du sowas wie eine Schmalspurstatemaschine gebaut
ist, ist schon ok. Aber deine 'ampel' Variable steuert
2 Informationen.
Zum einen steuert sie die Wartezeit von einer Phase zur
nächsten, zum anderen steuert sie die Phasenabfolge.

Das musst du trennen:
Du brauchst eine Variable, die die Wartezeiten regelt und
eine zweite Variable, die die Phasenabfolge steuert

Ungefähr so
1
    ....
2
3
    Phase = 0;            // die erste Phase ist Phase 0
4
    Wartezeit = 10;       // und die soll 10 Einheiten andauern
5
6
    switch( Phase )
7
    {
8
      case 0:
9
        outpu....
10
        ....
11
        Wartezeit--;
12
        if( Wartezeit == 0 )     // Wartezeit abgelaufen?
13
        {
14
          Phase = 1;             // nächste Phase
15
          Wartezeit = 10;        // Wartezeit für diese Phase
16
        }
17
        break;
18
19
      case 1:
20
        outpu....
21
        ....
22
        Wartezeit--;
23
        if( Wartezeit == 0 )     // Wartezeit für diese Phase abgelaufen
24
        {
25
          Phase = 5;             // nächste Phase ist Phase 5
26
          Wartezeit = 5;         // und die soll 5 Einheiten dauern
27
        }
28
        break;
29
30
      .....

Damit kannst du jetzt deinen speziellen Modus implementieren,
weil du bei jeder Phase steuern kannst, welche Phase als
nächstes kommt, und wie lange sie andauern soll. Ein
Blinklicht ist dann nichts anderes als 2 Phasen, die sich
nach dem Ablaufen ihrer Wartezeit immer wieder gegenseitig
aktivieren
1
    case 20:
2
      ...
3
      Wartezeit--;
4
      if( Wartezeit == 0 )
5
      {
6
        Phase = 21;
7
        Wartezeit = 5;
8
      }
9
      break;
10
11
    case 21:
12
      ...
13
      Wartezeit--;
14
      if( Wartezeit == 0 )
15
      {
16
        Phase = 20;
17
        Wartezeit = 5;
18
      }
19
      break;

Alles was du dann noch brauchst ist einen Taster oder Schalter,
der die Blinkerei aktiviert. Dies geschieht dadurch, dass die
Variable Phase auf (in diesem Beispiel) 20 gesetzt wird und
schon beginnt die Blinkerei.

von Carola K. (caro)


Lesenswert?

Der Wartungsmodus bei gelb blink bleibt nicht gelb blinkend ausser man 
drückt den Taster dauerhaft!

von Micha R. (Gast)


Lesenswert?

Wo ist denn genau dein Problem?

von Winfried (Gast)


Lesenswert?

Problem ist: Kann mir jemand meine Schulaufgaben machen, will selber 
lieber fernsehen...

Wenn ich falsch liege, dann poste genau den Punkt, wo du mit deinen 
Überlegungen nicht weiter kommst.

von pcbfreak (Gast)


Lesenswert?

Der Debugger (entwanzer) ist ein Programm das gewöhnlich beim Compiler
(Programm zur Übersetzung des Quelltextes)dabei ist,um den 
Programmablauf
Schritt für Schritt abzuarbeiten.Damit kann man dann auch den Zustand 
von Variablen,Speicherinhalten und vieles anderes mehr beobachten und 
sehen wo noch logische oder syntaktische Fehler sind.Die Arbeit damit 
hat mir jedenfalls mehr gebracht als nur dem sterilen Vortrag des 
Lehrers zu lauschen und nur alles mitzuschreiben.Leider steht der 
Debugger gewöhnlich nicht auf dem Lehrplan.Ich schlage dir vor erstmal 
ein kleines Programm mit den vier Grundrechenarten zu schreiben und mit 
dem Debugger Schritt für Schritt
auszutesten.Danach kannst du dich steigern mit Kopfgesteuerten oder 
Fußgesteuerten Schleifen.if-Then_else Verzweigungen zu denen auch die 
Switches gehören und was C sonst noch zu bieten hat.Dir die Lösungen 
vorzusagen würde nichts bringen.Besser zu suchts die Fehler empirisch
selber.Dann lernst du das besser.

Gruß Martin

von Joe B. (blackbery007)


Lesenswert?

Ich habe einen pb. Ich will diese Signal
 von der Simulation auf den folgende Link:
   http://www.technik-emden.de/~elmalab/projekte/ws9899/wss_applet.html


zu  simulieren und Mithilfe von einem Poti alles regel-Es soll auf einen 
PiC 16F690  realisiert und ich habe den Pickit 2 den. Program zu lesen. 
Leider bin ich Novize bei Programms


 Ich danke ihnen für ihre Hilfe

von jhgjh (Gast)


Lesenswert?

Gern geschehen.

Gast

von Klaus (Gast)


Lesenswert?

ok, ich helfe doch gerne.

Zuerst fangen wir mit den Grundlagen an:  Du suchst jetzt erstmal hier 
im Forum den "neuen Beitrag"-Knopf. Wenn du den gefunden hast, reden wir 
weiter.

von Tennisarm (Gast)


Lesenswert?

Paketschalter wäre einfacher
http://www.caw-elektro.de/caw5.htm

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.