Forum: Mikrocontroller und Digitale Elektronik Kann mir einer Start Hilfe geben?


von Fred (Gast)


Lesenswert?

Hallo kann mir einer bei dem Programm helfen?

ich hänge schon seit 3 Wochen daran und finde nicht wirklich Hilfe wenn 
ich danach google.

Auch die Tuts gehen nicht wirklich auf meine gewollten Funktionen ein.


Hier ist das Problem, dass die Led an portb.0 immer leuchtet.


                            $regfile = "m16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 1000000

Config Portb.0 = Output

Config Pind.7 = Input
Portd.7 = 1

Config Pinc.1 = Input
Portc.1 = 1

Do

If Pind.7 = 1 Or Pinc.1 = 0 Then Portb.0 = 1

If Pind.7 = 1 Or Pinc.1 = 1 Then Portb.0 = 0

Loop


End



Also passieren tut das hier:

portb.0 leuchtet schon am Anfang schwach ohne dass ich überhaupt was 
getätigt habe, aber WARUM???
und wenn ich pind.7 alleine schalte leuchtet die led stärker.

und wenn ich beide schalte geht die lampe aus. ist ja richtig, wobei das 
ja nicht die Funktion eines "Or" ist, oder ist das normal?


Und hier wollte ich die LED setzen und dann irgendwann Rücksetzen.


                            $regfile = "m16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 1000000

Config Portb.0 = Output

Config Pind.7 = Input
Portd.7 = 1

Config Pinc.1 = Input
Portc.1 = 1

Do

If Pind.7 = 1 Or Pinc.1 = 0 Then Set Portb.0

If Pind.7 = 1 Or Pinc.1 = 1 Then Reset Portb.0

Loop


End




hier passiert das selbe wie oben.

Wie kann man denn ein Ausgang dauerhaft setzen und dann irgendwann 
wieder rücksetzen??

Und warum ist die Funktion von dem "Or" wie das von einem Und.

weil die Lampe geht ja aus, wenn ich Pind.7 und Pinc.1 schalte, aber das 
sollte doch eigentlich bei nen UND passieren, oder?


MfG  Fred

von Thomas (kosmos)


Lesenswert?

du frägst den Taster ab und setzt entsprechend den Ausgang, wenn du 
jetzt nicht wieder eine neue Abfrage startest bleibt der erste Zustand 
bestehen, da deine Schleife nicht die Abfrage wiederholt.

von Hubert G. (hubertg)


Lesenswert?

Wie hast du die Tasten geschalten?
Wenn die Tasten nicht gedrückt sind Pind.7 und Pinc.1 immer 1
Also sind im nicht gedrückten zustand beide Bedingung wahr.

von Fred (Gast)


Lesenswert?

ja aber wieso leuchtet die LED immer.
Außer wenn ich beide Taster betätige.

Und der Zustand ist immer nur so lange wie die Bedingung erfüllt sind

Sprich, die LED ist nur solange aus wie ich beide Taster betätigt halte.

Im übrigen ist die Schaltung so wie im Tutorial dieser Seite aufgebaut.

 Und wenn ich nur dieses hier übertrage leuchtet die Led nicht.
ist ja richtig:

                            $regfile = "m16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 1000000

Config Portb.0 = Output

Config Pind.7 = Input
Portd.7 = 1

Config Pinc.1 = Input
Portc.1 = 1

Do


Loop


End

Ich komm einfach nicht weiter.

Ich will doch blos das die LED leuchtet, wenn ich 1 Taster drücke und 
dann aus geht wenn ich beide zusammen drücke.

Danke erstmal für die Hilfffffe

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> Config Pind.7 = Input
> Portd.7 = 1

Klassiche Konfiguration für einen active-low Taster an Pind.7 mit 
internem Pullup-Widerstand Portd.7. Active-low heisst Drücken des 
Tasters erzeugt einen Kurzschluß von Pind.7 nach GND.

> Config Pinc.1 = Input
> Portc.1 = 1

Dito für Pinc.1

> If Pind.7 = 1 Or Pinc.1 = 0 Then Portb.0 = 1

Fall #1
Wenn Taster Pind.7 NICHT gedrückt ist ODER Taster Pinc.1 gedrückt ist, 
dann schalte Ausgang Portb.0 auf 1

> If Pind.7 = 1 Or Pinc.1 = 1 Then Portb.0 = 0

Fall #2
Wenn Taster Pind.7 NICHT gedrückt ist ODER Taster Pinc.1 NICHT gedrückt 
ist, dann schalte Ausgang Portb.0 auf 0

> portb.0 leuchtet schon am Anfang schwach ohne dass ich überhaupt was
> getätigt habe, aber WARUM???

Ich weiss nicht, wie du die LED angeschlossen hast, gegen GND (active 
high) oder gegen Vcc (active low). Ist aber auch egal.

Durch das ODER Fall #1 schaltet sich die LED auch in jeder Schleife  ab 
oder an (Taster Taster Pind.7 ist NICHT gedrückt).

Durch den Fall #2 macht die LED in der nächsten Anweisung dann das 
umgekehrte.

Im Mittel hast du ein sehr schnelles Flackern AN/AUS. Daher das schwache 
Leuchten

> If Pind.7 = 1 Or Pinc.1 = 0 Then Set Portb.0
> If Pind.7 = 1 Or Pinc.1 = 1 Then Reset Portb.0

SET PORTB.0 ist gleichbedeutend mit Portb.0 = 1
RESET PORTB.0 ist gleichbedeutend mit Portb.0 = 0

> hier passiert das selbe wie oben.

Es wäre schlimm (für BASCOM) wenn nicht.

> Wie kann man denn ein Ausgang dauerhaft setzen und dann irgendwann
> wieder rücksetzen??

Klaro. So wie du es oben machst.

SET PORTB.0 ist gleichbedeutend mit Portb.0 = 1
RESET PORTB.0 ist gleichbedeutend mit Portb.0 = 0

> Und warum ist die Funktion von dem "Or" wie das von einem Und.

Ist es nicht. Dir ist nur nicht klar, was die eingelesenen Werte deiner 
Taster sind, wenn die Taster nicht gedrückt sind. Mach dir eine 
Wahrheitstabelle:

         Taster 1     Taster 2
==============================
nicht        1            1
gedrückt

nur
Taster 1
gedrückt     0            1

Nur
Taster 2     1            0
gedrückt

Beide        0            0
gedrückt

Dann machst du die IF-Abfragen mit Prüfung auf Wert und der UND 
Verknüpfung für jeden der möglichen vier Werte.

Wenn dann immer noch komische Sachen passieren, kümmerst du dich um die 
Entprellung mit dem DEBOUNCE Befehl

> "m16def.dat"
> Pinc.1

Die Sache mit der JTAGEN Fuse im Datenblatt hast du gelesen?

von Fred (Gast)


Lesenswert?

DAAAAAANKE, echt riesen DANK.

Ich hänge hier schon seit 3 Wochenenden dran.
Dabei hatte ich bloß nicht verstanden, dass die Taster genau anders rum 
arbeiten.

Und die LED leuchtet auch  nicht, wenn ich den Ausgang setze, sondern 
rücksetze.

Darauf muss man erstmal kommen.


Ich werd bekloppt.

DANNNKKKKKKEE an alle


>> Und warum ist die Funktion von dem "Or" wie das von einem Und.
>
> Ist es nicht. Dir ist nur nicht klar, was die eingelesenen Werte deiner
> Taster sind, wenn die Taster nicht gedrückt sind. Mach dir eine
> Wahrheitstabelle:
>
>          Taster 1     Taster 2
> ==============================
> nicht        1            1
> gedrückt
>
> nur
> Taster 1
> gedrückt     0            1
>
> Nur
> Taster 2     1            0
> gedrückt
>
> Beide        0            0
> gedrückt
>
> Dann machst du die IF-Abfragen mit Prüfung auf Wert und der UND
> Verknüpfung für jeden der möglichen vier Werte.

von Fred (Gast)


Lesenswert?

Achso, jetzt wo ich schonmal Frage, weis einer wie ich ne positive 
Flanke erzeuge.

Ich möchte das die LED nur beim Wechsel eines Tasters von 0 auf 1, an 
geht.

grazie

von Fred (Gast)


Lesenswert?

Ach neeee anders rum, von 1 auf 0 meinte ich

von Karl H. (kbuchegg)


Lesenswert?

Du willst keine Flanke erzeugen, du willst eine erkennen.
Und das Werkzeug dazu wurde schon genannt: debounce

Mehr Details dazu in der BASCOM Hilfe.

von Hubert G. (hubertg)


Lesenswert?

Wie wäre es damit:
If Pind.7 = 0 Or Pinc.1 = 0 Then Reset Portb.0

Du musst allerdings auch die Bedingung einfügen das Portb.0 wieder 1 
wird wenn keine Taste gedrückt ist.

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.