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


von Johannes (menschenskind)


Lesenswert?

Hallo

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

Code: #
1
$regfile = "ATtiny2313.dat"
2
$crystal = 8000000                                          'Takt: 8 MHz
3
$baud = 2400
4
5
          'Ddrd = &B000011100
6
7
        Config Portd.2 = Input
8
        Config Portd.5 = Output
9
10
Press1 Alias Portd.2
11
Press2 Alias Portd.3
12
Press3 Alias Portd.4
13
14
Led1 Alias Portd.5
15
Led2 Alias Portd.6
16
17
18
 Do
19
       If Press1 = 1 Then
20
           Led1 = 1
21
       Waitms 100
22
           Led1 = 0
23
       End If
24
25
26
      Loop

Aber nix passiert bei Tasterdruck. die LED funktioniert aber!

was kann der Fehler sein?

von Markus F. (5volt) Benutzerseite


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).

von Dominique G. (dgoersch)


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...

von Johannes (menschenskind)


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.

von Dominique G. (dgoersch)


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? ;)

von Johannes (menschenskind)


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.

von Dominique G. (dgoersch)


Lesenswert?

1
$regfile = "m16def.dat"
2
$crystal = 8000000
3
4
Ddrd = &B00010000            'Ausser Bit 5 alle auf Eingang
5
6
Main:
7
Do
8
   If Pind.2 = 1 Then        'solange Taste gedrückt
9
      Portd.5 = 1            'LED an
10
   Else                      'ansonsten
11
      Portd.5 = 0            'LED aus
12
   End If
13
Loop

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

von Johannes (menschenskind)


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.

von nullahn (Gast)


Lesenswert?

Achte auf das '

von Johannes (menschenskind)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.