Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

SW1 und 2 Kategorie: CC-Pro Unit & Appl.Board (von Bernd - 30.06.2005 9:28)
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
Hallo Ihr Alle! Hallo Peter!

Bin seit wenigen Abenden wieder im Rennen mit neiem Applikationsboard.
Es Funktioniert. (siehe "Hilfe Error")

Habe jetzt aber ein eigenartiges Problem.
Da ich für meine Anwendung 2 Porteingänge �berwachen wollte zum Zählen von Impulsen,
Schrieb ich zu Testzwecken das Programm LED3 folgendermassen um.
SW1 drĂĽcken --> LED1 2 sek. an.
SW2 drĂĽcken --> LED2 2 sek. an.

Folgender Effekt tritt auf:

Nach irgend einem schema leutet nach dem drĂĽcken von SW1 die LED2 auf.
meistens nach dem SW2 mit LED2 benutzt wurde.

Das entsprechende Programm hängt hinten an.

hier nun das Programm:
// LED4: Ausschalt Verzögerung

// Abwandlung von LED3 als Testprogramm fĂĽr Portabfrage

// Verwendung der Taste SW1
// LEDs leuchten nach dem DrĂĽcken des jeweiligen SW fĂĽr 2 sek
// erforderliche Library: IntFunc_Lib.cc


// Deklaration der I/O Variablen
// die PortPins werden von 0 bis 31 angesprochen (4 Ports a 8 Pins)
// Beispiele: 0=PortA.0, 9=PortB.1

#define SW1 26
#define SW2 27
#define LED1 30
#define LED2 31
#define on 0
#define off 1
#define out 1
#define in 0

int delval;                         // globale Variablendeklaration

//------------------------------------------------------------------------------
// Ein- und Ausschalten der LED1
//
void LED1_On(int delay_val)
{
    Port_WriteBit(LED1,on);         // LED2 einschalten
    AbsDelay(delay_val);            // Verzögerung (Einschaltdauer)
    Port_WriteBit(LED1,off);        // LED2 ausschalten
}

//------------------------------------------------------------------------------
// Ein- und Ausschalten der LED2    // der momentanen Einfachheit fĂĽr die 2. LED
//
void LED2_On(int delay_val)
{
    Port_WriteBit(LED2,on);         // LED2 einschalten
    AbsDelay(delay_val);            // Verzögerung (Einschaltdauer)
    Port_WriteBit(LED2,off);        // LED2 ausschalten
}

//------------------------------------------------------------------------------
// Hauptprogramm
//
void main(void)
{
    delval=2000;                    // Verzögerungszeit: 2s
    Port_DataDirBit(LED1,out);      // LED2 PD7 (PortD.7) auf Ausgabe vorbereiten
    Port_DataDirBit(LED2,out);      // LED2 PD7 (PortD.7) auf Ausgabe vorbereiten
    Port_DataDirBit(SW1,in);        // SW1 PD4 (PortD.4) auf Eingabe vorbereiten
    Port_DataDirBit(SW2,in);        // SW2 PD4 (PortD.5) auf Eingabe vorbereiten
    Port_WriteBit(LED1,off);        // LED2 ausschalten
    Port_WriteBit(LED2,off);        // LED2 ausschalten
    while (1)
    {

//        if (Port_ReadBit(SW1) == 0) LED1_On(delval); // fĂĽr Test ohne ausgelagerte Funktion
//        if (Port_ReadBit(SW2) == 0) LED2_On(delval); // fĂĽr Test ohne ausgelagerte Funktion

        Drehgeber1(); // zur ausgelagerten Funktion
    }                               // Verzögerungszeit.
}

//------------------------------------------------------------------------------
// Drehgeber1
//
void Drehgeber1(void)
{
//int Drehgeber11, Drehgeber12;

        if (Port_ReadBit(SW1) == 0); // Taste 1?
        {
            AbsDelay(10);            // Verzögerung
            if (Port_ReadBit(SW1) == 0) LED1_On(delval); // nochmal (entprellen)
        }

        if (Port_ReadBit(SW2) == 0) LED2_On(delval); // Taste 2?
        {
            AbsDelay(10);            // Verzögerung
            if (Port_ReadBit(SW2) == 0) LED2_On(delval); // nochmal (entprellen)
        }
}



    Antwort schreiben


Antworten:

Re: SW1 und 2 (von Peter S - 30.06.2005 11:06)
    Re: SW1 und 2 (von Bernd - 30.06.2005 17:14)