www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC 18F2550 Programmierung Hilfe


Autor: Herr Vorragend (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche gerade den PIC 18F2550 zu Programmieren. Leider habe ich 
ein Problem beim schreiben des Quelltextes.
Ich habe an RC 0 bis RC 2 drei Schalter (Eingang). An RB 5 hängt ein 
Relais und an RB 0 - RB 4 hängen 5 LED´s (Ausgang).
Ich habe alles schon mittels der Schalter zum Leuchten bzw. Schalten 
gebracht.
Das Problem is folgendes:
Wenn ich den Schalter an RC0 drücke sollte das Relais schalten und 
geschaltet bleiben, beim zweiten drücken sollte es ausschalten.
Meine Lösung (Auszug):
switch (schalter)
  {
    case mSchatler1==0: if (mREALAIS=0) mRELAIS=1; else mRELAIS=0;
Frage 1: Würde das so gehen?

2. Problem:
Beim schalten von RC1 soll ein Lauflicht angehen. Beim zweiten mal 
drücken soll es stoppen und die aktuelle Lampe an bleiben. Beim dritten 
mal drücken sollte das Lauflicht ausgehen.
Mit RC2 soll im Falle das dass Lauflicht gestoppt worden ist mit jedem 
druck auf den Schalter die nächste Lampe angehen.
Leider fehlt mir dafür die Idee wie ich sowas realisieren soll.
Ich Programmiere mit der MPLAB IDE.
Vielen Dank im vorraus!

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Antwort 1:
Grundsätzlich:
switch (schalter)
  {
    case 0:
      if (mREALAIS==0) mRELAIS=1; else mRELAIS=0;
/*                **
*/

Du wirst auch das Loslassen des Schalters (Du meinst wohl Taster, oder?) 
auch detektieren müssen.
Schreibe Dir mal die möglichen Zustände auf und welche Aktion zu einem 
Zustandswechsel führt.

>Ich Programmiere mit der MPLAB IDE.
und mit welchem C-Compiler?

Autor: Herr Vorragend (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Compiler habe ich MPLAB C Compiler for PIC18MCU´s.

Was meinst du mit detektieren?
Das Problem ist das ich die einzelnen Schleifen so sehr ineinander 
verwickeln muss, aber da gibt es bestimmt eine elegante Lösung für das 
Problem.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herr Vorragend wrote:
> Das Problem ist das ich die einzelnen Schleifen so sehr ineinander
> verwickeln muss,

Umgekehrt wird ein Schuh draus.

Du darfst nicht alles miteinander verwursten, sondern mußt die 
einzelenen Aufgaben sinnvoll aufteilen.

Die wichtigste davon ist die Tastenentprellung und Flankenerkennung, 
z.B.:

Beitrag "Universelle Tastenabfrage"

Dann noch nen Timer aufsetzten für die Lauflichtfrequenz (z.B. 200ms).
Der Rest dürfte einfach sein.


Peter

Autor: Herr Vorragend (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit der entprellung hab ich auch schon gelesen. Bei meinen ersten 
versuch hats auch ohne funktioniert (ev. auch zufällig).

Autor: Maik Werner (werner01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich arbeite bei sowas immer mit Merkern. Bei High_Flanke wird 
gesetzt
und bei Low übernommen und so weiter.

Richtig mit dem Tastenflackern, ich mach das immer mit ner kleinen 
Zeitschleife bei Erkennung die dan läuft.


Bie deiner Angelegenheit würde ich da gennerel mit periodischem 
Interrupt arbeiten. da drine fäuft dann die Tastenabfrage mit 
Merkerverwaltung, also setzen und nicht...

PS der Pic ist super 48MHz=12 Mips da geht was!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.