PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pin's konfigurieren während de programablaufs?



Pinto
12.01.2009, 20:08
Hallo Leute

Ist es möglich während des programablauf pins als output oder input zur konfigurieren?

ungefähr so:

For Idx = 15 To 0 Step -1
Config Porta.6 = Output
Reset Porta.6
'
If Dat.0(idx) Then
Config Porta.5 = Input
Else
Config Porta.5 = Output
Reset Porta.5
End If
Waitms 1
Config Porta.6 = Input
Waitms 1
Next Idx

Config Porta.5 = Input

Grüsse
Pinto

for_ro
12.01.2009, 20:29
Dazu musst du die DDRx Register umschalten.
Also DDRA.6=1 schaltet den Pin auf Output, entsprechend DDRA.6=0 für Input.
Evtl. musst du noch aufpassen, dass du das Port-Register zum richtigen Zeitpunkt umschaltest.
PORTA.6=1 setzt den Ausgangspin auf High bzw. schaltet den PullUp des Eingangspins ein.

Gruß

Rolf

Michael
12.01.2009, 20:29
Hallo Pinto,


Ist es möglich während des programablauf pins als output oder input zur konfigurieren?
ja.

Dat.0(idx) -> daran dürfte sich der Compiler aber stören?

Gruß, Michael

Besserwessi
12.01.2009, 21:26
Wann sonst, wenn nicht zur Laufzeit soll man die Register zur Datenrichtung ändern. Extra Fuses dafür gibt es nicht.

Pinto
12.01.2009, 23:41
Hallo

Was ich meine ist, ob die DDR Register in der Hauptschleife des Programs geändert werden düfen? Also nicht nur in der Initialisierungsphase.
Was ich damit bewirken will, ist das einige pins's in tri-state versetzt werden ohne die pullups einzuschalten. Geht das in Bascom?

Ich schreibe mein program von Picbasic Pro auf Bascom um, darum die Zeile "If Dat.0(idx) Then" die in Bascom natürlich nicht funktioniert.

Gruss
Pinto

Michael
13.01.2009, 17:07
Hallo Pinto,


Was ich meine ist, ob die DDR Register in der Hauptschleife des Programs geändert werden düfen?
Hast du meine letzte Antwort gelesen? Und die von Besserwessi?

Gruß, Michael

TomEdl
13.01.2009, 18:22
Hallo!

Dieses Programm von mir ändert den Zustand der Pins auch zur Laufzeit:


'Name:.............Reaktive LED
'Version:..........1.0a
'Datum:............25.12.2008
'Autor:............Thomas Edlinger
'---------------------------------
'Beschreibung: Bei Lichteinfall auf die LED schaltet sich die LED ein
' PA6=Anode
' PA7=Kathode



$regfile = "m32def.dat"
$crystal = 1000000


'KONFIGURATION PORTS
Config Porta.6 = Output
Config Porta.7 = Output

Dim A As Bit



Do

Porta.6 = 0
Porta.7 = 1
Waitms 1

Config Porta.7 = Input
Porta.7 = 0
Waitms 20

A = Pina.7

Config Porta.7 = Output
Porta.7 = 0

If A = 0 Then
Porta.6 = 1
Wait 1
Porta.6 = 0
End If



Loop

End

Das Programm funktioniert übrigens einwandfrei. ;)

Gruß
Thomas

Pinto
13.01.2009, 20:52
Hallo TomEdl

Danke für die Hilfe.
Was ich wissen wollte ist ob der controller pin nach ein Config Porta.7 = Input in Tri-State geht?

Ist die zweite instruktion nötig?
Config Porta.7 = Input
Porta.7 = 0 'warum?
Waitms 20
A = Pina.7

Gruss
Pinto

TomEdl
13.01.2009, 21:28
Was ich wissen wollte ist ob der controller pin nach ein Config Porta.7 = Input in Tri-State geht?

Tristate direkt nicht aber er ist eben hochohmig. ;)



Ist die zweite instruktion nötig?
Config Porta.7 = Input
Porta.7 = 0 'warum?
Waitms 20
A = Pina.7

Diese Instruktion ist in meinem Programm notwendig, da sich ansonsten die LED - bei welcher ich vorher die Sperrschichtkapazität aufgeladen habe - sofort wieder über den internen Pullup-Widerstand wieder entladen würde und ich somit keine Messung der Helligkeit vornehmen könnte. Als nächstes wird dann 20ms gewartet und der Zustand des Pins (0 oder 1) in die Variable A geschrieben. Bei A=0 wurde die LED mit der Taschenlampe angeleuchtet, bei A=1 nicht. ;)

Ist ein recht geniales Prinzip, nur Batterie, µC, ein Widerstand und eine LED. Wenn ich jetzt mit der Taschenlampe nach draußen auf den Baum leuchte, blinkt es zurück. ;)

Gruß
Thomas