Forum: Mikrocontroller und Digitale Elektronik PIC 18F2550 Programmierung Hilfe


von Herr Vorragend (Gast)


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):
1
switch (schalter)
2
  {
3
    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!

von Severino R. (severino)


Lesenswert?

Antwort 1:
Grundsätzlich:
1
switch (schalter)
2
  {
3
    case 0:
4
      if (mREALAIS==0) mRELAIS=1; else mRELAIS=0;
5
/*                **
6
*/

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?

von Herr Vorragend (Gast)


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.

von Peter D. (peda)


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

von Herr Vorragend (Gast)


Lesenswert?

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

von Maik W. (werner01)


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!

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.