mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ampelsteurerung auf Wartungsmodus


Autor: Carola Kneißl (caro)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
Autor: pcbfreak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benutz doch den Debugger.

Gruß Martin

Autor: Marco Beffa (Gast)
Datum:

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

Autor: Carola Kneißl (caro)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

    Phase = 0;            // die erste Phase ist Phase 0
    Wartezeit = 10;       // und die soll 10 Einheiten andauern

    switch( Phase )
    {
      case 0:
        outpu....
        ....
        Wartezeit--;
        if( Wartezeit == 0 )     // Wartezeit abgelaufen?
        {
          Phase = 1;             // nächste Phase
          Wartezeit = 10;        // Wartezeit für diese Phase
        }
        break;

      case 1:
        outpu....
        ....
        Wartezeit--;
        if( Wartezeit == 0 )     // Wartezeit für diese Phase abgelaufen
        {
          Phase = 5;             // nächste Phase ist Phase 5
          Wartezeit = 5;         // und die soll 5 Einheiten dauern
        }
        break;

      .....

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
    case 20:
      ...
      Wartezeit--;
      if( Wartezeit == 0 )
      {
        Phase = 21;
        Wartezeit = 5;
      }
      break;

    case 21:
      ...
      Wartezeit--;
      if( Wartezeit == 0 )
      {
        Phase = 20;
        Wartezeit = 5;
      }
      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.

Autor: Carola Kneißl (caro)
Datum:

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

Autor: Micha R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist denn genau dein Problem?

Autor: Winfried (Gast)
Datum:

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

Autor: pcbfreak (Gast)
Datum:

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

Autor: Joe B. (blackbery007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe einen pb. Ich will diese Signal
 von der Simulation auf den folgende Link:
   http://www.technik-emden.de/~elmalab/projekte/ws98...


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

Autor: jhgjh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gern geschehen.

Gast

Autor: Klaus (Gast)
Datum:

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

Autor: Tennisarm (Gast)
Datum:

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

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.