PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taster abfragen



EagleStar
08.03.2010, 10:05
Hallo zusammen,

ich versuche drei Taster (STK500) mit einem ATmega8@16MHz abzufragen!

Ich bin grad wirklich am verzweifeln, ich habe das schon öffter gemacht, doch hier kann ich keinen Fehler finden! Trotzdem tut es nicht?!

Kann mir jemand einen Tipp geben, was ich hier noch ändern könnte?

Danke schon mal...

Gruß der EagleStar


$regfile = "m8def.dat"
$crystal = 16000000

Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcdbus = 4
Config Lcd = 16 * 2
Cursor Off Noblink

Taminus Alias Portd.0
Tamenu Alias Portd.1
Taplus Alias Portd.2

Config Taminus = Input
Config Tamenu = Input
Config Taplus = Input

Taminus = 1
Tamenu = 1
Taplus = 1

Dim Modi As Byte

Modi = 0

Cls
Lcd "Starte"
Lowerline
Lcd "DDS V1.0"
Wait 3
Cls

Do

Debounce Taminus , 0 , Klein , Sub
Debounce Tamenu , 0 , Modus , Sub
Debounce Taplus , 0 , Gross , Sub

Loop

Klein:
Cls
Lcd "Taster -"
Lowerline
Lcd "aktiv"
Return

Modus:
Cls
Lcd "Taster M"
Lowerline
Lcd "aktiv"
Return

Gross:
Cls
Lcd "Taster +"
Lowerline
Lcd "aktiv"
Return

End

Jaecko
08.03.2010, 10:15
Du musst beim Config für Inputs Pinx.y verwenden.
So wie's im Code steht, wird Portx.y verwendet.

Also statt "Config Taminus = Input" einfach "Config Taminus = Pind.0" verwenden.

EagleStar
08.03.2010, 10:24
Danke für die schnelle Antwort!

Aber meintest du nicht eher:
Statt config taminus = input
so config portx.y = input?

Ich habe jetzt die ganzen Alias mal entfernt.
Funzt aber immer noch nicht...

EagleStar
08.03.2010, 10:27
OK ich hab´s!
Du hast mir grad einen guten Denkanstoß geliefert!

im Debounce muss ich natürlich PIND und nicht PORTD verwenden!

Danke nochmal jetzt läufts!

Jaecko
08.03.2010, 10:28
Arghl... stimmt... das falsche Ding ersetzt.
Dennoch bei Inputs aber Pinx.y.
I : Input / Pinx.y
O: Output / Portx.y

Sauerbruch
08.03.2010, 11:20
Und um´s noch ein wenig einfacher zu machen: Beim Einschalten eines Mikrocontrollers sind die I/O-Ports ganz von alleine Eingänge (weil in den DDR-Registern beim Power-On-Reset &B00000000 steht). Um einen Anschluss als Eingang zu nutzen, braucht man also gar nix zu konfigurieren :-)

for_ro
08.03.2010, 12:26
Dennoch bei Inputs aber Pinx.y.
I : Input / Pinx.y
O: Output / Portx.y
Hallo Jaecko,
dies schreibst du immer wieder, es ist aber nicht richtig.
Laut BASCOM Hilfe sind nur die Versionen
Config PinX.Y = state (state={Input,Output}) und
Config PortX = state
richtig.
Config PortX.Y = state
funktioniert sowohl für Input und Output ebenfalls.
Config PINX = state
geht garnicht und wird auch vom Compiler verworfen.


Um einen Anschluss als Eingang zu nutzen, braucht man also gar nix zu konfigurieren
Braucht man nicht, ist aber meines Erachtens schlechter Stil. Ich mag keine impliziten Vereinbarungen. besser ist es, seine Absicht deutlich hinzuschreiben, dass man sozusagen drauf gestoßen wird, wenn was falsch läuft.

Jaecko
08.03.2010, 12:35
Dann ist das anscheinend mittlerweile geändert worden; wieder was gelernt *g*

Als ich Bascom noch verwendet hab, wars (leider) noch so. Weiss ich noch recht gut, dass ich mir da mal nen Wolf gesucht hab, warum ein Taster einfach nicht als gedrückt erkannt werden wollte. Problem war da noch genau das, dass PortX.y statt PinX.y beim Eingang verwendet wurde.

Da ist mir die direkte Angabe in C schon lieber, wo ich halt das jeweilige Register anspreche: DDRx oder PORTx oder PINx; da ist dann klar, was gemeint ist. Aber das müsste ja in Bascom auch gehen.

for_ro
08.03.2010, 14:00
Hallo Jaecko,
mein Hinweis bezog sich nur auf den Config Befehl.
Wenn du eine Taste einlesen willst, musst du natürlich das PinX Register abfragen. Da geht kein PortX.