- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 4 von 4

Thema: Tasten an PIC softwaretechnisch lösen...

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.04.2004
    Beiträge
    21

    Tasten an PIC softwaretechnisch lösen...

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe an einem PIC16F84 einige Taster angeschlossen und möchte sie nun mit einigen Funktionen belegen.
    Für den Anfang habe ich mir gedacht, an jeder Taste einen Ton auszugeben.
    In etwa so:
    Taste 1 -> ein X Piep
    Taste 2 -> zwei X Piep usw bis Taste 4 entwprechend 4 X Piep.

    Allerdings ist es nicht so einfach.
    Bei einer Taste klappt es, aber sobald eine zweite ansteuern wird, fängt es an wild zu werden.
    Nämlich, Taste 1 -> ein Piep, Taste 2 -> nicht zwei sondern mal 4 mal 6 mal 7 oder endlos.

    Weiter unten findet man das Programm mit dem ich den PIC für diese Funktion betreiben möchte.
    Vielleicht kann mir der eine oder andere einen Tipp geben oder vielleicht gibt es auch eine elegantere Lösung.

    Vielen Dank
    Sech


    // --------------------------------------------------------------------------------------------------------------------------------------------
    #include <c:\cc5\cc5xfree\16f84a.h>
    #pragma config |= 0b.1111.1111.0010
    /*--------------------------------------------------------------------*/
    /* KonfigWort -> Bit 1,0: 11-RC, 10-HS, 01-XT, 00-LP
    Bit 2: 1-Watchdog Ein, 0-Watchdog Aus
    Bit 3: 0-Power up Tmer Ein, 1-Power up Timer Aus
    Bit 4...13: 0-Leseschutz Ein, 1-Leseschutz Aus*/
    /*--------------------------------------------------------------------*/

    int i;


    void pause(void)
    {
    OPTION=2;
    TMR0=131;
    while(TMR0);
    }
    //------------------------------------------------------------------------------------
    void verzoegerugn(void)
    {
    i=250;
    while (i)
    {
    pause();
    pause();
    pause();
    pause();
    i--;
    }
    }
    //--------------------------------------------------------------------------------------
    void piep(void)
    {
    bit beep @ PORTB.0;
    i=100;
    while (i)
    {
    beep=1;
    pause();
    beep=0;
    pause();
    i--;
    }
    }
    //--------------------------------------------------------------------------------------

    void main(void)
    {
    int a=1;
    char Taste;
    TRISB=0b.0000.0000;
    PORTB=0;
    piep();
    while(a!=0)
    {
    //sprung:
    Taste = PORTA & 0b.0000.1111;
    switch(Taste)
    {
    case 0:{PORTB=0; break;}

    case 1:{piep();verzoegerugn();
    break;}
    case 2:{ piep();verzoegerugn();

    i=2;
    while(i)
    { //piep();verzoegerugn();
    i--;
    piep();verzoegerugn();
    }
    break;
    }

    /*case 3:{
    i=3;
    while(i)
    { //piep();verzoegerugn();
    i--;
    piep();verzoegerugn();
    }
    break;
    }

    case 4:{
    i=4;
    while(i)
    { //piep();verzoegerugn();
    i--;
    piep();verzoegerugn();
    }
    break;
    }*/
    }
    }
    //goto sprung;
    }
    // --------------------------------------------------------------------------------------------------------------------------------------------

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.08.2004
    Ort
    Wien
    Alter
    39
    Beiträge
    208
    Hiho,

    hm, ich sehe das du i als globale varialbe setzt, vielleicht scheitert es daran. versuch mal in dem case call einfach sooft piep zu setzen wie oft du es brauchst, also zb Taste 2:


    Code:
    case 2: {
    PIEP;
    Pause;
    Piep;
    Pause;
    break;
    }
    weiterer tip wäre sicher, tasten entprellen zu lassen.
    keine leere Signatur möglich

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    02.04.2004
    Beiträge
    21
    Hallo Lion,
    das habe ich schon versucht einzeln im case die Unterfkt zu laden, allerdings klappts auch nicht so wie man sich das vostellt.
    Kann man eine Tastenentprellung softwaretechnisch lösen?
    Wenn ja wie?

    Danke

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.08.2004
    Ort
    Wien
    Alter
    39
    Beiträge
    208
    Hiho,

    habe zurzeit kein beispiel, werde dir aber eines raus suchen, bis dahin es ist einfach, du arbeitest mit einer IF, while schleife was auch immer, Beispiel Port B Pin1, du wiederholfst die schleife solange Port B Pin1 wieder Low ist, solange befindest du dich in dieser schleife.

    mfg Lion

    [EDIT]
    finde den source jetzt nicht auf die schnelle, sry, aber weitere gute seite ist http://www.fernando-heitor.de, da wird einem oft und schnell geholfen. wenn du ins forum gehst und unter "entprellen" und "entprellung" suchst, fidnest du einige möglichkeiten, auch andere.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress