www.mikrocontroller.net

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


Autor: LIGHT_MASTER (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: LIGHT_MASTER (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mist.... so... aber jetz hängt er dran... :-)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Code hängt dran

Das glaubst Du ;-)

Autor: LIGHT_MASTER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also dachte ich zuminderst... :-)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist BASIC, oder? Da kenne ich mich jetzt nicht so aus, aber folgende 
Frage hätte ich:
 If Pind.0 = 1 Then Gosub Warten Else Gosub Aus             'Leute steigen ein (farbwechsel)
 If Pind.1 = 1 Then Set Portc.1 Else Reset Portc.1          'Einsteigen beendet (Türen Schließen sich)
 If Pind.2 = 1 Then Set Portc.2 Else Reset Portc.2          'Fahrt beginnt (fahrt läuft)
 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

Autor: Martin Schneider (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code funktioniert doch bestens?!

In der deiner Hauptschleife:
Do

 If Pind.0 = 1 Then Gosub Warten Else Gosub Aus     ' (1)
 If Pind.1 = 1 Then Set Portc.1 Else Reset Portc.1  ' (2)
 If Pind.2 = 1 Then Set Portc.2 Else Reset Portc.2  ' (3)
 If Pind.3 = 1 Then Gosub Flash Else Gosub Aus      ' (4)

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

Autor: LIGHT_MASTER (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: LIGHT_MASTER (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: ........ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LIGHT_MASTER = LIGHT_DESASTER?

Autor: LIGHT_MASTER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Holger...

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

Gruß FLo

Autor: LIGHT_MASTER (Gast)
Datum:

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

Gruß Flo

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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) If Pind.0 = 1 AND Pind.3 = 0 Then
      Gosub Warten
    ElseIf Pind.1 = 0 AND Pind.2 = 0
      Gosub Aus
    endIf
(2) Portc.1 = Pind.1 'Vereinfachung
(3) Portc.2 = Pind.2 'Vereinfachung
(4) If Pind.3 = 1 AND Pind.0 = 0 Then
      Gosub Flash
    ElseIf Pind.1 = 0 AND Pind.2 = 0
      Gosub Aus
    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

Autor: LIGHT_MASTER (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.