PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem mit rn control PORTA



florian1991
30.12.2008, 10:48
Hallo zusammen

hab ein kleines Problem mit dem Porta. meines RN-Controls. Bei diesem Programm zum Beispiel:




$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

config Porta.0 = Input
config Portc.0 = Input

do

If Pina.0 = 1 Then
Pinc.0 = 0
End If

loop



leuchtet die LED dauernd, sowohl wenn ich Spannung an PA0 anlege als auch wenn gar nichts dranhängt. Weiss jemand weiter? Mikrocontroller austauschen?

Gruss flo

for_ro
30.12.2008, 10:59
Hallo,
da du die LED wohl an PORTC.0 angeschlossen hast, musst du diesen auch als Output konfigurieren.
Setzen musst du den Ausgang dann mit

PORTC.0=0


$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

config Porta.0 = Input
config Portc.0 = Output

do

If Pina.0 = 1 Then
PORTC.0 = 0
Else
PORTC.0=1
End If

loop
End


Gruß

Rolf

florian1991
30.12.2008, 19:13
guten abend rolf
ich danke dir für deine schnelle antwort. hab das oben verstanden. hat im endeffekt auch funktioniert, dieses LED problem war eigentlich eine vereinfachung folgenden problems:



$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Config Pina.0 = Input

Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinc.6 = Output
Config Pinc.7 = Output
Config Pind.4 = Output
Config Pind.5 = Output




Do

If Pina.0 = 1 Then

Pinb.0 = 1
Pinb.1 = 0
Pinc.6 = 1
Pinc.7 = 0
Pind.4 = 1
Pind.5 = 1


Else

Pinb.0 = 1
Pinb.1 = 0
Pinc.6 = 1
Pinc.7 = 0
Pind.4 = 0
Pind.5 = 0



End If

Loop




ist ja im grunde genommen dasselbe. Motoren reagieren aber bei einem anlegen einer spannung überhaupt nicht...

gruss flo

Gento
30.12.2008, 19:20
Mega32 kann ein paar mA , keine Amper für Motoren.

Gento

for_ro
30.12.2008, 19:23
Hallo flo,
du hast hier aber wieder
Pinb.0=1 anstelle von
Portb.0=1 geschrieben.

Hast du die Motoren evtl. direkt an den Pins angeschlossen? Die ziehen doch bestimmt mehr Strom, als der Pin abkann (30 mA). Bei LEDs ist das noch ok.

Gruß

Rolf

florian1991
01.01.2009, 21:30
naanaaa, da hängt schon noch ein µC dazwischen. das problem hat sich nun aber ausgeweitet, und zwar hab ich zur fehlererkennung anstatt motoren print-befehle eingefügt. ausschauen tut das dann so:



$regfile = "m32def.dat"

$crystal = 16000000

$baud = 9600


Config Pina.1 = Input


Do


If Pina.1 = 0 Then

Print "spannung liegt an"


Waitms 400




Else


Print "spannung liegt nicht an"


Waitms 400



End If


Loop

End




wenn ich nun ein kabel einstecke (nicht mit einer spannungsquelle und GND verbunden, beginnt das terminal schon teilweise "spannung liegt an" print-befehle auszuspucken, was für mich überhaupt nicht logisch klingt?

gruss flo

for_ro
01.01.2009, 21:34
Sieht aus, als hättest du keinen externen PullUp angeschlossen.
Dann solltest du nach dem Config PinA.1 = Input den internen PullUp einschalten:

PORTA.1=1

Gruß

Rolf

florian1991
01.01.2009, 21:51
hab ich auch schon versucht. rs 232 sagt dann jedoch nur noch "spannung liegt nicht an", ob ich jetzt spannung an PORTA.1 anlege, ein draht alleine, oder gart nichts anschliesse. könnte es sein, dass ich den PORTA kaputt gemacht habe?

gruss flo

for_ro
01.01.2009, 22:11
Den Pin A.1 musst du übrigens mit GND verbinden, damit "Spannung liegt an"
ausgegeben wird, du fragst ja auf PINA.1=0 ab.
Wenn du wie oben beschrieben den PullUp eingeschaltet hast und dann A.1 mit GND verbindest, sollte schon der andere Text kommen. Ansonsten könnte der Pin hinüber sein.
Ganz oben hast du übrigens PINA.0 geschrieben, hast du jetzt gewechselt?

Gruß

Rolf

florian1991
02.01.2009, 10:07
Ich tippe mal darauf, dass der PIN kaputt ist. Code sieht folgendermassen aus:



$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Config Pina.5 = Input


Do

If Porta.5 = 0
Then
Print "spannung liegt an"

Waitms 400



Else


Print "spannung liegt nicht an"


Waitms 400



End If



Loop
End



Angeschlossen hab ich den Minus-Pol einer Batterie (1.5V) an GND, den Plus-Pol der Batterie an PINA.5. Zwischen Pluspol und PINA.5 liegt noch ein Taster. RS 232 gibt jedoch nur "spannung liegt nicht an" heraus. ich tippe auf Mikrocontroller austauschen?

gruss flo

Tido
02.01.2009, 10:30
Hi,

teste das doch bitte nochmal ohne Batterie, indem du entweder +5V oder GND an den Pin legst.

Thomas$
02.01.2009, 10:40
Hi,
ich hatte dasselbe problem auch einmal dann hab ich einfach den pin den ich abfrage auf 255 hoch gesetzt dannach war alles störungs unempfindlich vorher gin das lo als ich die Leiterplatte angefasst hatte.
mfg thomas

florian1991
02.01.2009, 11:09
danke thomas$,
genau dieses problem habe ich auch mit dem anfassen, dachte aber das komme irgendwie zufällig. port auf 255 setzen? hat das was mit den fusebits zu tun? sorry, bin noch nicht so lange auf diesem gebiet tätig =)

gruss flo

for_ro
02.01.2009, 12:49
... dann hab ich einfach den pin den ich abfrage auf 255 hoch gesetzt

Was meinst du damit, den Pin auf 255 setzen?

@florian
Du hast wieder keinen PullUp eingeschaltet. Wenn du das nicht machst, dann führt die jede kleine elektrostatische Aufladung dazu, dass die Spannung hoch genug wird.
Deine 1,5V Batterie wird bei einem 5V versorgten µC nie zu einem High-Pegel führen.

Gruß

Rolf

florian1991
02.01.2009, 14:39
hallo alle zusammen

also, hab den dreh jetzt draussen. bei config schreibe ich porta.1=input, und bei if schreibe ich pina.1=1 then...
stecke ich nun eine litze ein beim pina.1 dann kommt bei berührung von gnd: spannung liegt nicht an, bei berührung mit 5v kommt jedoch spannung liegt an.

ich danke euch für eure hilfe

gruss flo

edit:

wenn ich nur ein draht bei pina.1 einstecke das andere ende aber nirgends einstecke kommt sowohl spannung liegt an, als auch spannung liegt nicht an.

Tido
02.01.2009, 16:55
wenn ich nur ein draht bei pina.1 einstecke das andere ende aber nirgends einstecke kommt sowohl spannung liegt an, als auch spannung liegt nicht an.

Um Störungen dieser Art zu vermeiden verwendet man Pullup- bzw. Pulldown--Widerstände. Damit liegt der Pin immer auf einem def. Potential.

In deinem Fall würde ich einen (ca.) 10K-Ohm vom Pin nach GND legen.

florian1991
02.01.2009, 18:21
@ tido: habs jetzt nochmal so gemacht wie du erklärt hast und zwar mitder erklärung aus dem wiki. config hab ich pina.1=input und if auch pina.1=1. funktioniert so aber ned.

gruss flo und danke für deine bemühungen

florian1991
22.01.2009, 17:50
jetzt gings mal kurzzeitig. nun überhaupt nicht mehr.
ich gebe bei config PINA.0=input ein

und bei if geb ich Porta.=1 then ... ein

kann mir jemand sagen was ich falsch mache? ich scheine dafür einfach zu dumm zu sein.

gruss flo

for_ro
22.01.2009, 20:18
jetzt gings mal kurzzeitig. nun überhaupt nicht mehr.
ich gebe bei config PINA.0=input ein

und bei if geb ich Porta.=1 then ... ein

kann mir jemand sagen was ich falsch mache? ich scheine dafür einfach zu dumm zu sein.

Du bist schon ein schwieriger Fall ;-)
Schreib mal so:


Config PINA.0 = Input 'hiermit konfigurierst du den Pin A.0 als Eingang
PORTA.0 = 1 'dies schaltet den internen PullUp ein

If PINA.0 = 0 Then 'hier fragst du den Eingang A.0 ab
Print "spannung liegt an"
Else
Print "spannung liegt nicht an"
End If

Gruß

Rolf

florian1991
22.01.2009, 21:38
ich danke dir rolf =)

habs jetzt so gemacht :



$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

config PINA.0 = Input
PORTA.0=1

Do
If PINA.0=0 Then
print " spannung liegt an"
else
print " spannung liegt nicht an"
end if
loop
end



dann hab ich eine litze bei PINA.0 in die Klemme gesteckt RS232 angeschlossen und dann mit dem Ende der Litze sowohl an GND als auch +5V gegangen. Beide Male hiess es im Terminal "spannung liegt nicht an". WAS MACHE ICH FALSCH??? Das Ganze treibt mich früher oder später noch zur Weissglut =)

Danke für deine Bemühungen,

Grüsse Flo