PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taster an AtMega8.. steh grad auf m Schlauch.. :/



goara
21.10.2008, 19:57
Hallo...
hab folgendes Problem...
will nen ganz normalen Taster an nen Atmega8 anschliessen, aber der will nicht so wie ich.

Der Taster verbindet den Port mit GND und ist mit 100R gepullupt..

der code ist folgendermassen:

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

Config Pinb.2 = Output
Beleucht Alias Portb.2
Config Pind.0 = Input
Taster_plus Alias Portd.0
Portd.0 = 1

Do

If Taster_plus = 1 Then
Beleucht = 1
Else
Beleucht = 0
End If

Loop

Wenn ich den Taster drücke passiert rein gar nichts.. Beleuchtung bleibt immer auf 1 also an.
wo is der Fehler ??

Sauerbruch
21.10.2008, 20:21
...den Eingang musste über PIND.0 abfragen!

(Also Taster_plus Alias PIND.0)

Gruß & Co!

goara
21.10.2008, 21:19
Danke...

den Fehler mach ich irgdnwie immer... wozu gibt es überhaupt die unterscheidung ??

Bluesmash
21.10.2008, 21:48
100R als Pullup? ist das nicht ein bisschen wenig? da fliessen ja 50mA wenn der Taster gedrückt ist....

gruss Bluesmash

Sauerbruch
21.10.2008, 22:19
wozu gibt es überhaupt die unterscheidung ??

Ganz einfach: Weil PORTX.Y den PullUp-Widerstand aktiviert, wenn der Anschluss als Eingang konfiguriert ist. Von daher wäre der (in der Tat etwas rustikal gewählte) externe Widerstand überflüssig, weil Du das mit PORTD.0=1 schon erledigt hast.

MfG,

Daniel

thewulf00
22.10.2008, 07:56
GEnau wie Sauerbruch sagt, gibt es im Falle von Inputs 2 Nutzungen der Register.
Wenn man auf Output stellt, gibt es nur an/aus, aber wenn man auf input stellt gibt es an/aus (von außen), und es gibt pullUp-an/aus, so dass Atmel das Port-Register in diesem Fall doppelt nutzt. Clever, wie ich finde.

Edit: Es heißt natürlich input...

goara
22.10.2008, 14:25
@ wulf .. danke für die erklärung, dann versteh ich das jetzt auch mal, konnt mir das bis jetzt nie merken...

Sauerbruch
22.10.2008, 14:26
...wobei mit dem 2. "output" eigentlich "Input" gemeint sein dürfte. Das nur am Rande, um nicht neue Verwirrung zu stiften =P~

thewulf00
22.10.2008, 14:40
...wobei mit dem 2. "output" eigentlich "Input" gemeint sein dürfte. Das nur am Rande, um nicht neue Verwirrung zu stiften =P~
Danke, ich habs mal korrigiert.

goara
22.10.2008, 15:05
ok, dann noch eine Frage.. wenn ich will dass man den Taster z.b. 5 sekunden Drücken muss um eine Funktion auszulösen, wie kann ich das dann machen?
geht das so:


$regfile = "m8def.dat"
$crystal = 8000000
'-----Timer-----
Config Timer0 = Timer , Prescale = 256
Enable Timer0
On Timer1 blablubb
Enable Interrupts
Timer0 = 0
do
....
if taster = 1 then
timer0 = 0
end if
....
loop

blablubb:
if taster = 1 then
...'funktion ausführen
end if
return

oder wie würdet ihr das lösen.

@ thewulf.. du hast nen Pinguin als avatar und kennst dich mit bascom aus...
Hast du das unter wine laufen ??

Blue72
23.10.2008, 06:17
ok, dann noch eine Frage.. wenn ich will dass man den Taster z.b. 5 sekunden Drücken muss um eine Funktion auszulösen, wie kann ich das dann machen?
geht das so:


$regfile = "m8def.dat"
$crystal = 8000000
'-----Timer-----
Config Timer0 = Timer , Prescale = 256
Enable Timer0
On Timer1 blablubb
Enable Interrupts
Timer0 = 0
do
....
if taster = 1 then
timer0 = 0
end if
....
loop

blablubb:
if taster = 1 then
...'funktion ausführen
end if
return

oder wie würdet ihr das lösen.

@ thewulf.. du hast nen Pinguin als avatar und kennst dich mit bascom aus...
Hast du das unter wine laufen ??


Ich denke das mit dem Timer1 in Deinem Code ist ein Schreibfehler ;)
Bei 8MHz würde ich einen Prescale von 1024 nehmen, hat den Vorteil das Du die Variable nur als Byte DIMen musst.

Ich habe es in meinem Programm so gelöst:




Config Timer0 = Timer , Prescale = 1024
Enable Timer0
Enable Interrupts
On Timer0 Zaehlen


...
...
...

Zaehlen:
If Taster = 0 Then A = A + 1 Else A = 0
If A = 92 Then Goto Eeprom

Return



Der Wert 92 sind so ca.3s, den musst Du nur noch anpassen.

Gruß
Jens

thewulf00
23.10.2008, 08:57
@goara: Ich kenn mich nicht mit BASCOM aus :-)
Aber ich benutze Windows und Linux, um überall mit allen Pogrammen entwickeln zu können.

Die Fragen, die Du gestellt hast, waren nicht BASCOM-spezifisch, das gilt unter C genauso...

Bei Deiner letzten Frage z.B. muss ich schon passen.