Forum: Mikrocontroller und Digitale Elektronik And fuktion Bascom fehler


von Thomas S. (Firma: RF-I) (rasieel)


Lesenswert?

Hallo,

Ich hab n problem in bascom.

Hier der code

Config Porta.1 = Input
Config Portb.1 = Input
Config Portb.2 = Input


Do

If Porta.1 = 1 Then
Toggle Portb.1 and Portb.2
End If

 Loop
End

Leider hat bascom ein problem mit meiner UND verknüpfung

von Thomas B. (yahp) Benutzerseite


Lesenswert?

Ich glaub, nicht bascom hat ein Problem mit deinem UND. Eher du mit den 
Befehlen von bascom. Was solln Toggle A und B auch bedeuten?

von Thomas S. (Firma: RF-I) (rasieel)


Lesenswert?

wie ichs gelernt hab es invertiert den ausgang.

wie den sonst auch.

von Jürgen (Gast)


Lesenswert?

Hallo,
ich glaube die 'and' Funktion ist in dieser Konstellation nicht 
anwendbar.
Ausserdem ist der Toggle Befehl für Ausgangsports gedacht, du hast 
jedoch
portb.1 und portb.2 als Input definiert.

Ich vermute folgendes Programm sollte deine Aufgabe erfüllen:

Config Porta.1 = Input
Config Portb.1 = output
Config Portb.2 = output

Do

If Porta.1 = 1 Then
 Toggle Portb.1
 wait 1           'damit Du auch was erkennen kannst
 Toggle Portb.2
 wait 1
End If

 Loop
End

Gruß Jürgen

von Thomas S. (Firma: RF-I) (rasieel)


Lesenswert?

kann ichs so auch machen??





Config Porta.1 = Input
Config Portb.1 = Input
Config Portb.2 = Input


Do

If Porta.1 = 1 Then
Toggle Portb.1
Toggle Portb.2

End If

 Loop

von Thomas S. (Firma: RF-I) (rasieel)


Lesenswert?

ich will nichts erkennen der soll nur die ports gleichzeitig schalten.

dann solln die ports den zustand beibehalten.

von Thomas B. (yahp) Benutzerseite


Lesenswert?

Thomas St wrote:
> wie ichs gelernt hab es invertiert den ausgang.

Jo, das denkt man sich intuitiv auch, es invertiert den Ausgang - und 
nicht mehrere.


> wie den sonst auch.

Und wie bitte soll das Ergebnis der UND-Verknüpfung von zwei Pins 
invertiert werden? Was soll das für diese beiden Pins bedeuten?

PS: Eingänge invertieren?

von Chris L. (kingkernel)


Lesenswert?

Du hast PORTB.1 und PORTB.2 immernoch als Eingang deklariert. So wird 
das nie was! Du musst schon auf Ausgang schalten, wenn du was schalten 
willst!

das AND ist nur für logische Vergleiche gedacht. Mehrere Befehle 
zusammenfassen kannst du damit nicht.

von Thomas S. (Firma: RF-I) (rasieel)


Lesenswert?

ja klar hab ich schon aber bascom sagt immer noch 3 permanets expectet

von dummy (Gast)


Lesenswert?

Config Portb.1 = Input
Config Portb.2 = Input

Bascom Volltrottel wie willst du auf einem EINGANG INPUT
irgendwas ändern? AUSGANG OUTPUT

von Rolf I. (for_ro)


Lesenswert?

Und du solltest den Eingang mit Pina abfragen, also

If PINA.1 = 1 Then

von Jürgen (Gast)


Lesenswert?

Hallo,

bei meinem Vorschlag von oben werden die Ports bei jedem 
Schleifendurchlauf
umgeschaltet. Wenn dieser Schaltvorgang nur einmal ausgeführt werden 
soll
brauchst du noch eine Hilfsvariable, die anzeigt, ob der Toggle schon 
erfolgt ist.

dim Hilfsvarible as bit
Config Porta.1 = Input
Config Portb.1 = output
Config Portb.2 = output

Hilfsvariable = 0
Do
if Porta.1 = 0 then Hilfsvariable = 0
 If Porta.1 = 1 Then
  if Hilfsvariable = 0 then
  Hilfsvariable = 1
  Toggle Portb.1
  Toggle Portb.2
  End If
 end if
 Loop
End


ich habs jetzt nich ausprobiert, aber vieleicht hilft es Dir.
Gruß Jürgen

von Jürgen (Gast)


Lesenswert?

Siehe Rolf

dim Hilfsvarible as bit
Config Porta.1 = Input
Config Portb.1 = output
Config Portb.2 = output

Hilfsvariable = 0
Do
if Pina.1 = 0 then Hilfsvariable = 0
 If Pina.1 = 1 Then
  if Hilfsvariable = 0 then
  Hilfsvariable = 1
  Toggle Portb.1
  Toggle Portb.2
  End If
 end if
 Loop
End

von Thomas S. (Firma: RF-I) (rasieel)


Lesenswert?

wie ist das mit der hilfsvraiable gemeint das kapier ich nicht

von Jürgen (Gast)


Lesenswert?

In der Hilfsvariablen merkt sich das Programm ob der Toggle Befehl
seit Programmstart schon einmal ausgeführt wurde.
Wird der Toggle Befehl ausgführt wird gleichzeitig die Hilfsvariable
gesetzt.
Mit der Abfrage  'if Hilfsvariable = 0 then' wird überprüft ob der
der Toggle Befehl schon in einem vorherigen Programmdurchlauf ausgeführt
wurde und wenn nicht, dann wird er nun ausgeführt.

Ich nehme an, das Pina.1 mit einem Taster bedient wird. Hierbei muß noch
das Prellen berücksichtigt werden. Am einfachsten ist dies mit einem
kurzen 'Wait' zu unterdrücken.

Soll bei einem erneuten Tasdendruck wieder ein Toggle erfolgen, muß
nach dem Loslassen der Taste die Hilfsvariable wieder zurückgesetzt 
werden.

Das folgende Programm sollte so im Simulator laufen:
$regfile = "m128def.dat"
$crystal = 1000000

dim Hilfsvarible as bit
Config Porta.1 = Input
Config Portb.1 = output
Config Portb.2 = output

Set Hilfsvarible
Do
'Waitms 100 'zum entprellen einfügen
If Pina.1 = 0 Then Reset Hilfsvarible
 If Pina.1 = 1 Then
  If Hilfsvarible = 0 Then
  Set Hilfsvarible
  Toggle Portb.1
  Toggle Portb.2
  End If
 end if
 Loop
End

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.