Forum: Mikrocontroller und Digitale Elektronik Was mach ich nur falsch :-(


von LIGHT_MASTER (Gast)


Lesenswert?

Hallo Gemeinde....

Ich werd noch mal Irre...

Der code funktioniert soweit nur hab ich das problem das wenn ich die 
rote oder die grüne Led einschalte das der AVR nicht die vollen 5V am 
port ausgibt sondern nur ca. 1,5V...

Beim Lauflicht (Sub Warten) hab ich allerdings die vollen 5V pro port 
wenn ich es einschalte, beim Flashen ebenso. Nur eben bei der 
Einzelansteuerung nicht....

Vielleicht könnt Ihr mir weiter helfen...

Ich währe euch sehr dankbar...

Danke schon mal für eure Hilfe....

Gruß Flo

P.S. Code hängt dran

von LIGHT_MASTER (Gast)


Angehängte Dateien:

Lesenswert?

Mist.... so... aber jetz hängt er dran... :-)

von Gast (Gast)


Lesenswert?

>Code hängt dran

Das glaubst Du ;-)

von LIGHT_MASTER (Gast)


Lesenswert?

also dachte ich zuminderst... :-)

von holger (Gast)


Lesenswert?

> If Pind.0 = 1 Then Gosub Warten Else Gosub Aus
> If Pind.1 = 1 Then Set Portc.1 Else Reset Portc.1

Das liegt an deinen "else".

Wenn Pind.0=0 ist werden alle LEDs ausgeschaltet.
Egal ob Pind.1=1 ist. Dann wird bei Pind.1=1
Portc.1 eingeschaltet und in der Loop dann gleich
wieder aus.

von Ralf (Gast)


Lesenswert?

Das ist BASIC, oder? Da kenne ich mich jetzt nicht so aus, aber folgende 
Frage hätte ich:
1
 If Pind.0 = 1 Then Gosub Warten Else Gosub Aus             'Leute steigen ein (farbwechsel)
2
 If Pind.1 = 1 Then Set Portc.1 Else Reset Portc.1          'Einsteigen beendet (Türen Schließen sich)
3
 If Pind.2 = 1 Then Set Portc.2 Else Reset Portc.2          'Fahrt beginnt (fahrt läuft)
4
 If Pind.3 = 1 Then Gosub Flash Else Gosub Aus              'Turbomodus (Bypass offen)
Du drückst also den Taster an Port D1, und erwartest, dass die LEDs an 
sind, richtig? Die Abfrage auf Port D3 schaltet aber doch alle LEDs 
wieder aus. Du müsstest dein Programm so ändern, dass der Rest der 
Schleife nicht abgearbeitet wird, sondern wieder von vorne beginnt, wenn 
eine Taste gedrückt wurde. In C wäre das eine switch-Anweisung, heisst 
das in BASIC nicht case-Anweisung?

Ralf

von Martin Schneider (Gast)


Lesenswert?

Der Code funktioniert doch bestens?!

In der deiner Hauptschleife:
1
Do
2
3
 If Pind.0 = 1 Then Gosub Warten Else Gosub Aus     ' (1)
4
 If Pind.1 = 1 Then Set Portc.1 Else Reset Portc.1  ' (2)
5
 If Pind.2 = 1 Then Set Portc.2 Else Reset Portc.2  ' (3)
6
 If Pind.3 = 1 Then Gosub Flash Else Gosub Aus      ' (4)
7
8
Loop

passiert folgendes:

(Annahme: Knopf 2 gedrückt --> Pind.1 = 1)

- (1) Pind.0 = 0, also alles ausschalten
- (2) Pind.1 = 1, also PortC.1 auf H, alles andere bleibt
- (3) Pind.2 = 0, also PortC.2 auf L, alles andere bleibt
- (4) Pind.3 = 0, also alles ausschalten
neue Schleife...

PortC.1 ist also nur von Stufe (2) bis Stufe (4) an, vielleicht 35..40%
der Zeit -> also sind etwa 1.5 .. 2.0V zu erwarten, im Mittel.
Mit einem Osziloskop würdest du eine schöne PWM sehen...

Ahoi, Martin

von LIGHT_MASTER (Gast)


Lesenswert?

vielleicht hätte ich noch erwähnen sollen das es alles Schalter sind die 
an den port´s hängen....

Wie gesagt... ich brauche die vollen 5V wenn ich die rote oder die grüne 
LED einschalte...

Gruß Flo

von LIGHT_MASTER (Gast)


Lesenswert?

ach ja... noch was....

Es ändert sich auch nichts selbst wenn ich das setzen und rücksetzen der 
ports in Sub´s schreibe... ich weis echt nicht mehr weiter... ich 
verzweifel noch mal an dem ding...

von holger (Gast)


Lesenswert?

>vielleicht hätte ich noch erwähnen sollen das es alles Schalter sind die
>an den port´s hängen....

Das ist völlig Wurst. Deine "else" sind schuld.
Damit hast du dir einen Rechteckgenerator gebaut
wenn Pind.1 oder Pind.2 an sind und Pind.0 oder Pind.3
aus ;)

von ........ (Gast)


Lesenswert?

LIGHT_MASTER = LIGHT_DESASTER?

von LIGHT_MASTER (Gast)


Lesenswert?

@Holger...

ja scheiße... und wie krieg ich das hin das, das so läuft wie ich es 
will??

Gruß FLo

von LIGHT_MASTER (Gast)


Lesenswert?

Hat keiner mehr ne iddee wie ich das in den griff kriegen könnte??!!

Gruß Flo

von Ralf (Gast)


Lesenswert?

Was ist denn jetzt dein Problem? Willst du es vorgekaut bekommen? Dann 
musst du es sagen, und dir wird geholfen. Es wurde doch gesagt, wo das 
Problem liegt, was fehlt denn noch? Man reagiert hier halt kritisch, 
wenn der Eindruck entsteht, dass die Fragesteller nur zu faul sind, um 
das Handbuch des Compilers/Interpreters etc. zu lesen, oder sich selbst 
Gedanken zu machen, oder einfach mal die Neugier spielen zu lassen und 
zu PROBIEREN.

Konkrete Frage, konkrete Antwort, so lief es doch am Anfang deines 
Beitrags. Und jetzt erwartest du, dass man dir die fertige Lösung 
liefert, oder was?

Wie wärs hiermit:
1
(1) If Pind.0 = 1 AND Pind.3 = 0 Then
2
      Gosub Warten
3
    ElseIf Pind.1 = 0 AND Pind.2 = 0
4
      Gosub Aus
5
    endIf
6
(2) Portc.1 = Pind.1 'Vereinfachung
7
(3) Portc.2 = Pind.2 'Vereinfachung
8
(4) If Pind.3 = 1 AND Pind.0 = 0 Then
9
      Gosub Flash
10
    ElseIf Pind.1 = 0 AND Pind.2 = 0
11
      Gosub Aus
12
    EndIf

Ob die Vereinfachung in 2 und 3 funktioniert, weiss ich nicht, ich komme 
aus der 8051er-Ecke und programmiere ASM und C.
Ob es generell funktioniert, kann ich dir daher nicht sagen, aber damit 
dürftest du weiterkommen.
Du darfst halt nur dann alles ausschalten, wenn kein Schalter aktiviert 
ist => Logisch, oder? :)
Andersrum darfst du "Flash" und "Warten" nur dann aufrufen, wenn die 
jeweils andere Bedingung nicht eingetreten ist, sonst rufst du ja immer 
beides auf, wenn beide Schalter aktiv sind. Das heisst, dass du 
eigentlich noch prüfen musst, ob D0 und D3 gleichzeitig aktiv sind, und 
dafür musst du auch noch n Fall abbilden.
Und zum Schluss ist die Prüfung von C1 und C2 immer noch falsch, weil 
"AUS" unabhängig von diesen beiden Schaltern aufgerufen werden kann, 
d.h. die beiden Schalter musst du eigentlich für den Aufruf von "AUS" 
auch noch berücksichtigen.

So, damit hättest du eigentlich exakt 16 Fälle (=vier Schalter) zu 
berücksichtigen.
Das macht man nicht mehr mit IF-Statements, sondern mit 
Select-Case-Statements. Damits nicht zu einfach wird, darfst du die 
Verwendung hier nachlesen:

http://avrhelp.mcselec.com/bascom-avr.html

Ich hoffe, du bekommst es jetzt allein gebacken, ich klopp mich jetzt 
nämlich in die Heia... :)

Ralf

von LIGHT_MASTER (Gast)


Lesenswert?

Moin Ralf....

Ich danke dir... es funzt.... wenn der fertige Code erwünscht ist dann 
einfach bescheid sagen dann stell ich ihn euch zur verfügung...

Es sind 3 versch. RGB Lauflichter mit einstellbarer Geschwindigkeit.

Sehr gut für anfänger wie mich.... :-) :-) :-)


Gruß Flo

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.