Forum: Mikrocontroller und Digitale Elektronik MikrocontrollerProgramm->problem mit If-Befehlen


von Daniel S. (thenogger)


Angehängte Dateien:

Lesenswert?

Hallo,
Ich habe folgendes Programm zur Steuerung einer Kreuzung ,in 
Basic/Bascom , geschrieben.In der Schaltung sind 2 Taster verbaut, einer 
zum umschalten der Ampeln für Fußgänger in die eine Richtung und in die 
andere Richtung.
Die Ampeln für die Straße sowie die für die Fußgänger haben jeweils 2 
LED´s, einmal grün und einmal rot.

Nun habe ich das Problem ,wenn ich den Mikrocontroller anmache ,dann 
macht er ohne dass ich einen Taster drücke das ganze Programm durch.

Würde mich über Lösungen meines Problems freuen :)

Mfg Dani


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

Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portc.4 = Output
Config Portc.5 = Output
Config Portc.6 = Output
Config Portc.7 = Output
Config Portd.0 = Output
Config Pina.6 = Input
Config Pina.7 = Input
Config Portd.2 = Output

Dim Zeit As Integer
Zeit = 2500

Dim La As Integer
La = 5000

Dim T As Integer
T = 10000

Do

        If Pina.7 = 1 Then
          Waitms La
          Portc.1 = 0
          Portc.2 = 1
          Waitms Zeit
          Portc.3 = 0
          Portc.4 = 1
          Sound Portd.2 , 100 , 100
          Waitms La
          Sound Portd.2 , 100 , 160
          Portc.3 = 1
          Portc.4 = 0
          Waitms Zeit
          Portc.1 = 1
          Portc.2 = 0

        End If

           If Pina.7 = 1 Then
           Waitms La
           Portc.5 = 0
           Portc.6 = 1
           Waitms Zeit
           Portc.7 = 0
           Portd.0 = 1
           Sound Portd.2 , 100 , 100
           Waitms La
           Sound Portd.2 , 100 , 160
           Portc.7 = 1
           Portd.0 = 0
           Waitms Zeit
           Portc.5 = 1
           Portc.6 = 0

         End If




Loop

End

von Karl H. (kbuchegg)


Lesenswert?

Daniel S. schrieb:

> Nun habe ich das Problem ,wenn ich den Mikrocontroller anmache ,dann
> macht er ohne dass ich einen Taster drücke das ganze Programm durch.

Wie sind denn deine Taster hardwaremässig angeschlossen?

Liefern die eine 0 oder eine 1 wenn sie gedrückt werden?

Hinweis: Es ist nirgends in Stein gemeisselt und Moses hat auf seinen 
Gesetzestafeln keinen Passus: Dein Taster soll beim Drücken eine 1 
liefern.

Beides ist möglich.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Daniel S. schrieb:
> If-Befehl
Endlich mal nicht die lästige if-Schleife...

> Nun habe ich das Problem ,wenn ich den Mikrocontroller anmache
Das tut man auch nicht....
> ,dann macht er ohne dass ich einen Taster drücke das ganze Programm durch.
>        If Pina.7 = 1 Then
Welchen Pegel hast du am Pina.7 wenn du die Taste nicht drückst? Wie 
ist der Taster angeschlossen?

von Klaus W. (mfgkw)


Lesenswert?

Wie sind die Taster angeschlossen?

von Timmo H. (masterfx)


Lesenswert?

Ist an Pina.7 ein Pullup/Pulldown? Schaltet dein Taster auf GND oder 
VCC?

Wenn du auf "Pina.7 = 1" prüfst müsste er gegen VCC schalten und einen 
Pulldown haben.

Warum zwei mal "If Pina.7 = 1 Then" das eine soll davon wohl "If Pina.6 
= 1 Then" sein, oder?

von Daniel S. (thenogger)


Lesenswert?

Timmo H. schrieb:
> Warum zwei mal "If Pina.7 = 1 Then" das eine soll davon wohl "If Pina.6
> = 1 Then" sein, oder?

Sry es sollte beim 2.If-Befehl "if Pina.6=1 Then" heißen.
Meine

Karl Heinz Buchegger schrieb:
> Liefern die eine 0 oder eine 1 wenn sie gedrückt werden?

Sie liefern eine 1.

Lothar Miller schrieb:
>> Nun habe ich das Problem ,wenn ich den Mikrocontroller anmache
> Das tut man auch nicht....

"Wenn ich den Mikrocontroller an 5V anschließe"

Timmo H. schrieb:
> Ist an Pina.7 ein Pullup/Pulldown? Schaltet dein Taster auf GND oder
> VCC?

Es ist ein Pulldown-Schalter und er schaltet auf VCC

von Falk B. (falk)


Lesenswert?

@  Daniel S. (thenogger)

>Sry es sollte beim 2.If-Befehl "if Pina.6=1 Then" heißen.

Bitte? Hast den Quelltext kopiert oder abgetippt?

>Sie liefern eine 1.

Mal mit dem Multimeter nachgemessen?

>> Ist an Pina.7 ein Pullup/Pulldown? Schaltet dein Taster auf GND oder
>> VCC?

>Es ist ein Pulldown-Schalter

Sowas gibt es nicht.

> und er schaltet auf VCC

Das widerspricht deinem "Pulldown-Schalter". Egal. Hast du externe 
Pull-Down Widerstände?

MFG
Falk

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Daniel S. schrieb:
> Karl Heinz Buchegger schrieb:
>> Liefern die eine 0 oder eine 1 wenn sie gedrückt werden?
> Sie liefern eine 1.
Dann probier trotzdem mal sowas:
 if Pina.7=0 Then
   ...
 if Pina.6=0 Then
   ...

von Hinweise (Gast)


Lesenswert?

Zeichne Dir doch bitte den Schaltplan der Taster auf, wie sie am µC 
angeschlossen sind. Ich denke dass da in Wirklichkeit etwas ander ist 
als geplant. Vergiss auch nicht die µC-internen Widerstände ;-) Wenn Du 
bei der Fehlersuche nicht weiterkommst, dann den bitte posten.

Funktionieren die Taster so wie vorgesehen - bitte testen. Was liefern 
sie wenn sie NICHT gedrückt werden.

Hast Du eine HW-Entprellung drin, die könnte evtl auch dieses Verhalten 
erzeugen.

Was bewirkt die Variable T - bzw. wozu ist sie da. in deinem Programm 
verwendest Du sie nicht.

Noch ein kleiner Tip am Rande: nenne Variablen so, dass sich der Sinn 
dem Leser erschliesst. Damit tust Du dir auch leichter, falls mal im 
Programm etwas nicht so funktioniert wie es soll.

Bis auf den bekannten Fehler, dass zweimal dieselbe Taste abgefragt 
wird, finde ich auch nichts. Eigentlich müsste es funktionieren, daher 
scheint der Fehler in der Schatung zu liegen.

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.