mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Evalboard von pollin: led + taster bascom


Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich wollte bloß schnell mal eine Funktion testen und da boten sich die 3 
Taster und die 2 LEDs wunderbar an.

Code: #
$regfile = "ATtiny2313.dat"
$crystal = 8000000                                          'Takt: 8 MHz
$baud = 2400

          'Ddrd = &B000011100

        Config Portd.2 = Input
        Config Portd.5 = Output

Press1 Alias Portd.2
Press2 Alias Portd.3
Press3 Alias Portd.4

Led1 Alias Portd.5
Led2 Alias Portd.6


 Do
       If Press1 = 1 Then
           Led1 = 1
       Waitms 100
           Led1 = 0
       End If


      Loop

Aber nix passiert bei Tasterdruck. die LED funktioniert aber!

was kann der Fehler sein?

Autor: Markus F. (5volt) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaue erstmal, ob auch der Jumper, der den Taster aktiviert aufgesteckt 
ist. Für Taster 1 ist das JP3.

Wenn es dann immer noch nicht geht, nimm den AVR vielleicht mal raus und 
miss am Sockel nach, ob das Signal vom Taster da überhaupt ankommt (ist 
glaube ich Pin 6 am Sockel vom Tiny2313)

Ob ein Fehler im Code ist kann ich leider nicht sagen (Bascom verwende 
ich nicht).

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm DEBOUNCE zum Abfragen der Taster. Weiteres verrät die sehr gute 
Bascom-Hilfe.

Mal ganz davon abgesehen, dass das Ausgangsregister zwar PORTx.y heißt, 
das Eingangsregister aber PINx.y...

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

Ja das mit dem PIND.2 ist wirklich ärgerlich.

Aber auch wenn ich das korrigiert habe funktioniert es nicht.

Und wie bitteschön soll man denn als Anfänger auf die Funktion Debounce 
kommen?
Abgesehen davon scheint mir dieser Befehl keine geeignete Lösung für so 
ein simples Problem zu sein. Zumal in der Hilfe nichts näheres zur 
Verwendung steht.

Weiterhin würde ich noch gern wissen, warum das: Ddrd = &B000011100
nicht funktioniert? So sind doch die Pins 2-4 als Ausgänge definiert und 
der Rest als Eingänge, wenn ich das richtig verstanden habe.

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes Hofmann wrote:
> Und wie bitteschön soll man denn als Anfänger auf die Funktion Debounce
> kommen?

Meines Wissens nach, wird sie sogar im Beispiel des EvalBoards 
verwendet.

> Abgesehen davon scheint mir dieser Befehl keine geeignete Lösung für so
> ein simples Problem zu sein. Zumal in der Hilfe nichts näheres zur
> Verwendung steht.

Nichts Näheres? Da steht ein komplettes Codebeispiel.

> Weiterhin würde ich noch gern wissen, warum das: Ddrd = &B000011100
> nicht funktioniert? So sind doch die Pins 2-4 als Ausgänge definiert und
> der Rest als Eingänge, wenn ich das richtig verstanden habe.

Dein Port D hat 9 Bit? ;)

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja schon steht da ein Beispiel, aber mit dem ist nix anzufangen.
Ich will ja nicht irgendwo hinspringen und auch wie man diesen 
Debouncebefehl mit Low- oder High-Pegel vergleicht ist dort nicht 
beschrieben.

Es muss doch, gerade bei Basic, ne simple abfrage geben wie eben if 
taster=1 then...

ich glaub der compiler hat die überschüssige 0 einfach wegfallen lassen.

Seltsam ist nur, dass die LED mit der Variante Ddrd = &B00011100 nur 
ganz schwach leuchtet, wenn ich aber über config portd usw. gehe, dann 
leuchtet sie, wie sie es soll.

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$regfile = "m16def.dat"
$crystal = 8000000

Ddrd = &B00010000            'Ausser Bit 5 alle auf Eingang

Main:
Do
   If Pind.2 = 1 Then        'solange Taste gedrückt
      Portd.5 = 1            'LED an
   Else                      'ansonsten
      Portd.5 = 0            'LED aus
   End If
Loop

Gerade auf dem EvalBoard + AddOn-Board mit nem mega16 getestet. 
Einfacher und simpler gehts kaum.

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
echt seltsam, weil ich das ja im 1. Thread so geschrieben hatte:
Do
       If Press1 = 1 Then
           Led1 = 1
       Waitms 100
           Led1 = 0
       End If


      Loop

da gings nicht und

jetzt hab ich das nochmal genau so eingetippt, nachdem ich dein Beispiel 
getestet hatte und auf einmal läufts.

Ziemlich rätselhaft.

Seltsam ist auch noch, dass die LED, wie schon erwähnt,  bei ddrb=& ganz 
schwach brennt, wenn ich sie aber mit config portd initialisiere, dann 
leuchtet sie stark.

Autor: nullahn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achte auf das '

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das war nur flink auskommentiert

Aber der eigentliche Knackpunkt war nämlich der, dass ich über Ddrd = 
&B00011100 die 3 Taster auf AUSGANG geschaltet hatte, dämlicherweise und 
dann aber mit config wieder auf EINGANG.

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.