-         

Ergebnis 1 bis 9 von 9

Thema: Port einlesen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2007
    Beiträge
    7

    Port einlesen

    Anzeige

    Hallo,

    Ich möchte über einen Interrupt alle 10ms den Zustand von PINB einlesen und in die Variable "EingangB" schreiben. Anschließend möchte ich die verschiedenen Bits in "EingangB" (die jeweils 1 Pin wiederspiegeln) verarbeiten.

    Ist das möglich? Bin Anfänger und möchte einiges ausprobieren. Leider komme ich mit dem Tutorial hier nicht weiter.

    unsigned char EingangB;
    ....
    ....
    EingangB = PINB;
    ....
    if EingangB = 0x02
    {
    ....
    ....


    Vielen Dank im Voraus für jeden kleinen Tipp.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.265
    Klar doch ist das möglich. Ist dir bereits klar wie man Interruptsverarbeitet ?
    Ansonsten würde ich dir vorschlagen das ganze erst enmal in einer endlosschleife ausliest.

    Aussehen würde die abfrage dann in etwa so
    Code:
    uint8_t foo = PINB
    
    if ( foo & ( ( 1 << MEINBIT0 ) | ( 1 << MEINBIT2 ) ) )
     {
      
    Mach was
    }
    
    MEINBIT steht halt jeweils für das entsprechende Bit in dem Register
    Dürfte ich noch erfahren welches Tutorial du verwendest ?

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Ich würde es gleich so machen:
    Code:
    if(PINB & (1 << PB0))
    {...}
    if(PINB & (1 << PB1))
    {...}
    if(PINB & (1 << PB2))
    {...}
    ...
    So brauchst du die Variable nicht.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2007
    Beiträge
    7
    Danke für den Tipp, aber so hab ich es auch schon gemacht. Mit der zusätzlichen Variablen möchte ich erreichen das ich den Port nur alle 10ms aktualisiere um z.B. Tastenprellen auszuschließen. Weiterhin ist mein Plan mit der Variablen verschiedene Tasterzustände in Zukunft auszuwerten (kurz gedrückt, lang gedrückt, steigende-, fallende Flanke etc.)

    Mit dem Interrupt habe ich das hin bekommen. Leider bekomme ich es nicht hin das er mir den PINB in die Variable EingangB schreibt bzw. weiß ich nicht wie ich entsprechende Bits auslesen könnte.

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    ganz einfach:
    statt:
    if(PINB & (1 << PB0))
    {...}
    schreibst du:
    if(Variable & (1 << 0))
    {...}
    if(Variable & (1 << 1))
    {...}
    if(Variable & (1 << 2))
    {...}
    ...

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.265
    dass er PINB in deine Variable schreibt machst du eigentlich nicht mehr als:

    uint8_t EingangB; so dass sie von überall im Programm eingesehn werden kann

    und:
    EingangB = PINB in deinem Interrupt

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2007
    Beiträge
    7
    Hallo,

    schaue derzeit durch verschiedene tutorials u.a. bzw. hauptsächlich Roboternetz.de & Microcontroller.net.

    Leider bringt mich das sture Durchlesen nicht viel weiter. Darum bin ich dabei Schritt für Schritt kleine Codes zu programmieren und diese zu erweitern. Dies fing an mit ansteuern von Ausgängen, einlesen von Pins erzeugen von Interruppts,....

    Je nachdem was ich gerade mache versuche ich natürlich die Info aus dem Tutorial zu ziehen. Am besten wären hier immer einge Beispielprogramme.

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Was funktioniert denn jetzt immernoch nicht? Was möchtest du noch wissen?

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    12.11.2009
    Beiträge
    29
    Hi

    Schau dir mal hier http://www.mikrocontroller.net/artic...torial#Vorwort das mit dem Thema Bitfelder an vielleicht hilft es dir.

    by Donald

Berechtigungen

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