- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: Matrixtastatur an PIC

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065

    Matrixtastatur an PIC

    Anzeige

    Praxistest und DIY Projekte
    Moin zusammen!
    Ich möchte eine 8x8 Matrixtastatur an einen pic schalten und das ganze per c programmieren. die spaltenleitungen sollen an pin 0-3 von PORTB hängen, die zeilenleitungen an 4-7. Nun muss ich ja die Spalten als ausgänge definieren und auf high setzen, während die Zeilen als eingänge laufen und dann abwechselnd immer eine spalte auf low ziehen.

    nun meine frage: wenn ich TRISB also mit B'00001111' initialisiere und danach per rotationsbefehl PORTB= 1111 1111 (alles high also auch die inputs) die 0 aus dem carryflag da durch schiebe, ändern sich die Pins mit den eingängen auch? will heißen wenn ich einen eingang in PORTB mit 1 beschreibe, ist ihm das egal und er zeigt dennoch den richtigen pegel an, jenachdem ob nun eine taste gedrückt ist oder nicht?oder bekommt er damit den pegel 1 und hält den auch?

    ich hoffe das war verständlich ausgedrückt.
    ich will mir ne routine in c schreiben die diese tastatur abfragt, aber es wird kompliziert wenn ich nur ein halbes byte ändern darf. wenn dem pic das egal ist, wird meine arbeit leichter.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Einerseits ja, andererseits nein:
    Input kommt immer vom PIN, es ist ihm also wurst, was du reinschreibst
    Andererseit klappt dadurch der RRL direkt aber auch nicht.
    Du wirst die Row/Column Bits schon in eigenen Feldern führen müßen, dann mixen und nach Port schreiben u. lesen
    Beispielcode: www.sprut.de
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    ja, daher hab ich ja den grundansatz, aber ich wollte das in c machen und steh da vor nem echten denkproblem weil ich nicht direkt darauf komme wie ich das machen soll.
    mh was ist denn damit
    ich nehme eine for-schleife, die zuerst das das byte mit 1111 1111 beschreibt, dann einmal dreht und dann mit der & funktion die höchsten 4 bytes zurücksetzt. das setze ich dann in PORTB ein.
    macht natürlich alles komplizierter

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    War da nicht die Rede von 8x8 Matrix ? da brauchst du ja eh zwei ganze Ports.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    argh ich bin zu blöd zum schreiben, ich meine 4x4 aber eben mit 8 leitungen

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Gut.
    Also so arg isses auch wieder nicht. Das "Modell" byte machst du besser verkehrt, mit 1-er, is besser zum shiften.
    Code:
    char  bMsk;
    char bCol;
    
    TRISB = 0x0F; 
    
    bMsk = 0x01;
    for (iX = 0; iX < 4 ; iX++)
    {
                 PORTB = 0;
                 PORTB |= ~bMsk;
                 bCol = PORTB & 0xf0;             
               //  auswerten  Taste
                 bMsk <<= 1;              
    }
    Dazu kommt natürlich noch der ganze spaß mit entprellen und umsetzen auf zeichen. *g*
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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

12V Akku bauen