mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Bascom Befehl Case div. Pins abfragen


Autor: Joe S. (steini65)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich besuche Euer Forum schon länger, nun habe ich mich angemeldet. Ich 
habe hier eine Frage zu Bascom und dem Befehl case/select .

In Google habe ich nicht so die Lösung gefunden, da die  Listings für 
einen Anfänger sehr umfangreich und manchmal undurchsichtig sind.

Bitte nicht andere Lösungen wie if, then else usw. präsentieren.

Nur antworten zu case/select!

Danke

-------------------

Hier mein Programm.
Ich möchte jeweils einen Taster an PortC 0, 1, 2 anschliessen. Dieser 
schaltet gegen GND.

Ist Schalter 0 gedrückt leuchtet die LED z.B. 1 Sekunde.
Ist Schalter 1 gedrückt leuchtet die LED z.B. 3 Sekunde.
Ist Schalter 2 gedrückt leuchtet die LED z.B. 6 Sekunde.
.....
Ist Schalter 0 und 1 gedrückt leuchtet die LED z.B. x Sekunden.
usw.


Die LED leuchtet  aber nicht.


Entweder habe ich ein Problem beim maskieren oder Do sitzt an der 
falschen Stelle. Als Anfänger bin ich da ein bisschen verloren.
Kann mir bitte jemand behilflich sei?

-------------------


$regfile = "m8def.dat"                         'ATmega8-Deklarationen
$crystal = 3686400                             'Quarz: 3,6864 MHz

Ddrc = &B00100000                              'Pin PC5 Ausgang,
                                               'Rest Eingang

Do
Portc = &B00001111                             'PullUp für Pin 
PC01/2/3/4
                                               'aktivieren



  Dim Eingabe As Byte


  Eingabe = &B00001111                         'gesamten Port abfragen
                                               'und maskieren

   Select Case Eingabe

      Case &B00000001:
         Portc.5 = 1                           'LED an (Pin PC5)
         wait 1

      Case &B00000011:
         Portc.5 = 1                           'LED an (Pin PC5)
         wait 3

      Case &B00000111:
         Portc.5 = 1                           'LED an (Pin PC5)
         wait 6

   End Select

Loop
End

Autor: Klaus De lisson (kolisson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eingabe = Pinc                        'gesamten Port abfragen
                                               'und maskieren
Eingabe = Eingabe and &B00001111

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würd' mal sagen:
If Eingabe <> PortC Then
  Geht Nicht
Else
  Nix kapiert
End If

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du nur select-case haben willst, brauchst du für alle möglichen 
Fälle ein case.

      Case &B00000001: ' Nur Schalter 0
      Case &B00000011: ' Schalter 0 und Schalter 1
      Case &B00000111: ' Schalter 0, 1 und 2

plus...

      Case &B00000010: ' Nur Schalter 1
      Case &B00000100: ' Nur Schalter 2
      Case &B00000101: ' Schalter 0 und Schalter 2
      Case &B00000110: ' Schalter 1 und Schalter 2

ADD:
Eingabe = PINC and &B00000111

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADD2: Ich sehe gerade, dass du Pullups an PORTC benutzt, d.h. die 
Schalter sind active low geschaltet. Dann müssen die case invertiert 
sein, denn 0 bedeutet beträtigter Schalter und 1 nicht betätigter 
Schalter.

Bei
Eingabe = PINC and &B00000111

Also
      Case &B00000110: ' Nur Schalter 0
      Case &B00000100: ' Schalter 0 und Schalter 1
usw.

Autor: Joe S. (steini65)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es besser oder einfacher die Taster gegen + zu schalten?
wie
http://halvar.at/elektronik/kleiner_bascom_avr_kur...

Dann würde halt je Taster ein externer R benötigt was ja kein Problem 
wäre.

Das andere probiere ich noch aus.
Danke.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe Joe schrieb:

> Ist es besser oder einfacher die Taster gegen + zu schalten?

Nö. Das passt schon wie es ist: Du brauchst keine externen Widerstände 
und im Code ist es nur eine andere Schreibweise. Der active high Fall 
(s. AVR-GCC-Tutorial im IO-Kapitel) ist mehr Aufwand.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.