Forum: Mikrocontroller und Digitale Elektronik dual led mit bascom


von Alex (Gast)


Lesenswert?

Hallo.
sitze hier schon seit paar Stunden an meinem Problem.
eigentlich ziehmlich einfach alles, klappt aber komischer weise nicht.
folgendes:
if-then schleife.
wenn am PORTD.0 5Vanliegen, soll die rot leuchten, wenn 0V dann Grün.
die Led hat 2 Anschlüsse. wenn man sie vertauscht, wechseln sich die 
zwei Farben.
mein Quellcode:

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

Config Pind.0 = Input
Config Pinb.1 = Output
Config Pinb.2 = Output

A:
Portb.1 = 1
Portb.2 = 0
B:
Portb.1 = 0
Portb.2 = 1

Do

If Portd.0 = 1 Then
Goto A
Else
Goto B
End If

Waitms 50
Loop

End



klappt nicht. bleibt immer grün.
nächster versuch:


Do

If Portd.0 = 1 Then
Portb.1 = 1
Portb.2 = 0
Else
Portb.1 = 0
Portb.2 = 1
End If

Waitms 50
Loop

geht auch nicht. bleibt wieder grün.

was kann das sein? habe ich was vergessen?
Danke im Voraus

von Markus (Gast)


Lesenswert?

es muss

if pind.0 .... heissen, nicht
if portd.0 !

von möp (Gast)


Lesenswert?

wie steuerst du die Duo-Led an?

Du hast doch 2 Anoden (Grün/Rot) und eine gemeinsame Anode..

Du willst bei 5 V (also "High") dass die LED grün leuchtet und bei 0 V 
(also "low") rot.

Habs mir grad mal aufgezeichnet... du brauchst im vor der roten Anode 
einen NPN transistor.. bei signal HIGH auf basis schaltet der durch und 
sperrt bei LOW...

vor der Anode der grünen LED brauchst du einen PNP, der schaltet bei 
SIGNAL low auf BASIS durch und sperrt bei HIGH..

auf basisstrom aufpassen...

so kommst du mit einem Pin aus (2 transistoren, n paar widerstände) und 
bei HIGH leuchtet rot und bei LOW grün...

du brauchst natürlich intern oder extern einen Pull-Up auf 5 V für 
diesen Ausgangs-Pin.

von Markus (Gast)


Lesenswert?

und beim config oben müssen die output´s portd.x heissen, nicht pind.x

von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Lesenswert?

Hab da auch noch nicht wirklich Ahnung von, aber:

-I can not set a pin high or low

-I can not read the input on a pin

 steht in der Hülfe (dafür isse da!)

oder so:

For example :

DDRB = &B1111_0000 ' upper nibble is output, lower nibble is input

SET PORTB.7 'will set the MS bit to +5V

RESET PORTB.7 'will set MS bit to 0 V





To read a pin :

Print PINB.0 'will read LS bit and send it to the RS-232



You may also read from PORTx but it will return the value that was last 
written to it.





To read or write whole bytes use :

PORTB = 0 'write 0 to register making all pins low

PRINT PINB 'print input on pins





MFG

von Alex (Gast)


Lesenswert?

@Markus
SUPER tipp, danke, jetzt geht es!

@möp
>die Led hat 2 Anschlüsse.
also insgesamt 2

von Markus (Gast)


Lesenswert?

jetzt verwirrt den armen kerl doch nicht,
er schreibt ja oben das die LED nur 2 anschlüsse hat, also farbwechsel 
bei polaritätswechsel.

probier mal das:

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

Config Pind.0 = Input
Config Portb.1 = Output    'Portb.1 statt Pinb.1
Config Portb.2 = Output    'dito

Do

If Pind.0 = 1 Then         ' Pind.0 statt Portd.0
Portb.1 = 1
Portb.2 = 0
Else
Portb.1 = 0
Portb.2 = 1
End If

Waitms 50
Loop

von möp "klugscheisser" (Gast)


Lesenswert?

LACH

da war ich wohl ein bisschen vorlaut..

ich mach das immer so:

1. pin auf low
2. pull up (enable)
3. direction einstellen (input/output)
4. pin auf gewuenschten logik-pegel..

es is immer besser, erst den pin auf low zu setzen, bevor man die 
richtung wechselt..

joa und ansonsten halt noch drüber im klaren sein, ob das signal low 
oder high aktiv wird...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.