PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ports einlesen, aber wie ??



khazad
15.12.2004, 11:54
Hi ich möchte jetzt nach den ersten tests mit meinem Mega8 nun mal Servos für den Antrieb drann schrauben, mein Problem ist jetzt das wenn ich denn an einen Transistor schliesse das der dann sau Lahm ist. Was ich dann noch als Hauptproblem habe ist wie mach ich das, dass wenn ich Portd als Input deklariere und dann an Portd.1 5V anlege das ich das abfragen kann vielleicht irgendwie:



crystal 4000000
dim i as integer

config portd as input
config portb as output

do
portb.1 = 1
if portd.1 == 1
Portb.1 = 0
loop



Kann das so Funktionieren ??
würd mich über nen Codeschnipsel freuen

mfg Maik

RCO
15.12.2004, 12:04
Config portd = input
Config portb = output
muss es heißen.
Außerdem bei einzlenen eingängen Pin und nicht port, und die schleife...:
if pind.1 = 1 then
Portb.1 = 0
end if

und
$crystal= 4000000
du solltest aber noch die Pullups aktivieren:
portd = &HFF

MFG Moritz

khazad
15.12.2004, 13:35
Aber wenn ich da die PullUps aktiviere dann lieg doch sowieso an den pins 1 an oder irre ich mich da ?? dann müsste die if anweisung doch so heissen oder? if pind.1 = 0 then
Portb.1 = 0
end if

und dann reicht es aus wenn ich PD1 auf gnd ziehe ?? also einfach überbrücke ?? sry wegen den anfängerfragen

mfg Maik

RCO
15.12.2004, 15:22
Ja, genau!
Ne, im Ernst du hast recht, wenn du auf ne 1 wartest, musst du die Pulldowns aktivieren, also:
portd = 0
Hab ich wohl übersehen 8-[

MFG Moritz

khazad
16.12.2004, 16:32
Hi leider funzt der Input bei mir immer noch nicht ich weiss langsam echt nicht mehr was ich machen soll


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

Config Portb = Output
Config Portd = Input
Dim I As Integer
Enable Interrupts

Portd = 0


Do
Portb.1 = 1
I = Portd.7
If I = 1 Then
Portb.1 = 0
End If

Loop

aber wenn ich jetzt Portd.7 auf Vcc Lege passiert nüx und wenn ich mich nicht teusche ist Pord.7 auf der linken seite der 2. von unten oder nicht ? ?


Mfg Maik

fzehner
16.12.2004, 17:52
I = Pind.7

zum Einlesen muss Pin verwendet werden, wenn Du Port verwendest bekommst Du als Antwort ob der eingebaute PullUp-Widerstand aktiv oder inaktiv ist bzw. wenn der Port als Ausgang definiert wurde, welchen Wert Du ihm als letztes zugewiesen hast.
Typischer Fehler :-)

khazad
16.12.2004, 23:16
Super danke Jetzt gehts mit diesem Code


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

Config Portb = Output
Config Portd = Input
Dim I As Integer
Enable Interrupts

Portd = 0


Do

I = Pind.7
If I = 1 Then
Portb.1 = 0
Else
Portb.1 = 1
End If

Loop Leider dauert es jetzt bestimmt 1-3 sekunden wenn ich den port nicht mehr auf Vcc ziehe bis Portb.1 wieder auf 1 gesetzt wird gibt es da nen trick damit das schneller geht ??

Aber schon mal vielen danke für eure Hilfe

mfg Maik[/code]

RCO
17.12.2004, 09:52
Hängt da irgendwie nen Kondensator dazwischen/neben? Denn normalerweise sollte es schneller gehen.

Eigentlich müsste auch dieser Code gehen:


do
Portb.1 = not Pind.7
loop

Halt ohne if und Else.

Der Fehler den ich oben genacht habe ist klar, wenn es einmal gessetzt ist, wird es nicht zurückgesetzt, da felhte halt die Else-Anweisung ](*,) .

MFG Moritz

khazad
17.12.2004, 10:59
ich habe nur eines Transistor in der Ganzen schaltung und zwar 100nF zwischen Vcc und Gnd kann das vllt an der LED liegen die ich benutze ??

Mfg Maik

khazad
19.12.2004, 21:08
So hab jezt pind.7 mit einem 100K ohm Pulldown wiederstand versehen jeztt geht die LED sofort wieder an wenn ich die brücke weg nehme leider geht sie auch wieder an wenn die Brücke drann bleibt also irgend was ist da noch nicht richtig habt ihr ne idee ? ?

Mfg Maik

RCO
19.12.2004, 21:14
Transistor in der Ganzen schaltung und zwar 100nF

??? Ich glaube es wäre gut, wenn du deine Schaltung mal skizzieren könntest, das würde einiges erleichtern, im Moment versteh ich nicht so ganz, was du machst.

MFG Moritz

khazad
19.12.2004, 21:59
So ich hoffe ich hab das richtig gemacht. Also ich denke dass das so richtig ist

RCO
19.12.2004, 22:22
Also probiers mal so, mir ist der Einsatz der Diode bei dir nciht ganz verständlich, vielleicht könntest du es kurz erläutern.
Ansonosten so:


Config Pind.7 = Input
Portd.7 = 1 'Pullup aktivieren
Config Pinb.1 = Output
Eingang Alias Pind.7
Ausgang Alias Portb.1

Do
Ausgang = Not Eingang
Loop
End

Zu beachten ist allerdings, dass der AVR, wenn er die Diode wie im Schaltbild schaltet weniger Strom vließen lässt, als wenn man die Diode andersrum einsetzt, also der AVR quasi die erforderliche Masse bildet... ICh hoffe das ist verständlich ;-)
Bei kleinen Dioden (Low Current) sollte es aber so kein Problem sein.

MFG Moritz

khazad
19.12.2004, 22:34
Hi ich habe mir noch mal meine Schaltung angesehen und da fiel es mir wie schuppen von den augen ich hatte den Pulldown nicht an PD7 sondern an PB0 angeschlossen also war PD7 wenn ich den schlater geöffnet habe unbeschaltet kein wunder das das dann nicht funktionieren kann ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,)

jetzt muss ich nur noch das mit den Servos als antrieb hintbekommen und ich kann meinen ersten robby bauen.

achso die Diode zeigt mir natürlich an aber der Port an oder aus ist ;-)

mfg MAIK ](*,) ](*,) ](*,) ](*,) ](*,) ](*,)

RCO
19.12.2004, 23:19
Ja, das kenn ich, es liegt oft an den kleinen Dingen, mal hier ein vergesser Code, mal da eine kalte Lötstelle...

Schön dass es läuft.

MFG Moritz