Forum: Mikrocontroller und Digitale Elektronik bascom zeitunabhängig ausgang setzen.


von Matze (Gast)


Lesenswert?

servus,
ch arbeite gerade an einem futterautomat und hänge gerade ein bischen.

folgendes problem hab ich. ich hab die uhr und die zeiteinstellung 
bereits komplett fertig. nun geht es darum wenn die zeit und die 
eingestellte weckzeit gleich sind dass halt was passieren soll.

nun will ich wenn halt beide zeiten gleich sind einen motor starten der 
sich dreht. an der welle ist ne scheibe mit ner narbe drann welche bei 
jeder umdrehung einen taster betätigt.

der motor soll stoppen sobald der taster zweimal betätigt wurde.

so hab ich hier mal so angefangen:


Debounce Pinb.6 , 0 , Anzahl_umdrehung , Sub

If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 Then
      Umdrehungen = 1
      Portc.2 = 1


Anzahl_umdrehung: 
'Unterfunktion zum Aufzählen der Umdrehungen.
Incr Umdrehungen
   If Umdrehungen = 3 Then Umdrehungen = 0
Return



nicht meckern kann nicht alles posten da der code zu riesig ist. sind 
jetzt nur die zwei ausschnitte um die es geht is auch nicht komplett da 
mir gerade die schnittstelle irgendwie fehlt.

unten zähle ich die umdrehungen. oben will ich dass der motor dann halt 
auch eingeschaltet bleibt auch wenn die uhr und die weckzeit nicht mehr 
gleich sind sondern bis er halt die zwei umdrehungen hat.

hardwäretechnisch hätte ich es mit ner selbsthaltung gelöst. da würde 
ich dann aber einen weiteren ausgang verbraten. geht dass auch irgendwie 
softwaretechnisch?

: Verschoben durch User
von Matze (Gast)


Lesenswert?

denke ich hab da was gefunden. befehl set und reset nehm ich mal an.

von Ich da (Gast)


Lesenswert?

arbeite mit Merkern. Z.B. Motor_On.
Wenn Merker gesetzt, soll Motor laufen etc.
Setzen und rücksetzen je nach Bedingung.

Heißt, programmiere ähnlich wie bei einer SPS. (Speicherprogramierbaren 
Steuerung)

von Matze (Gast)


Lesenswert?

hast du da mal ein beispiel? sps bin ich nicht so gut drinn bzw tu mich 
sehr schwer.

von Matze (Gast)


Lesenswert?

falls es jemandem hilft habs nun so gemacht und hoffe dass es 
funktioniert. denke aber dass es wegen der 2 abfrage nicht klappen wird.

Debounce Pinb.6 , 0 , Anzahl_umdrehung , Sub

   If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 Then
      Set Portc.2
      If Umdrehungen = 2 Then Reset Portc.2
   End If



Anzahl_umdrehung: 
'Unterfunktion zum Aufzählen der Umdrehungen.
Incr Umdrehungen
   If Umdrehungen = 2 Then Umdrehungen = 0
Return



ich hab noch einen ausgang frei der rest ist belegt. sollten wirklich 
alle stricke reisen werd ich wohl eine hardwaremäßige selbsthaltung 
realisieren.

von Ich da (Gast)


Lesenswert?

SPS war nur Hinweis auf Vorgehensweise.

Definiere vorher mal Motor_on alias Portc.2

Deine Abfrage sieht dann so aus:

If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 Then
      Set Motor_On
  rauswerfen ----> If Umdrehungen = 2 Then Reset Portc.2
---hat hier nix zu suchen, macht hier keinen Sinn ---
   End If

If Umdrehungen => 3 then
   reset Motor_On
End if

von Matze (Gast)


Lesenswert?

klingt eigentlich logisch. nur wenn ich es so mache wie du schreibst hab 
ich doch keinen überlauf mehr. der zählt doch dann bei drei einfach 
weiter. und die der reset kommt nur einmal nämlich wenn er 3 umdrehungen 
gemacht hat. dann zählt er bei 4 weiter und resetet nie mehr.

von Matze (Gast)


Lesenswert?

ok jetzt hab ichs geblickt. ein zweites mal durchlesen hilft oft doch.

von Matze (Gast)


Lesenswert?

so dann warscheinlich oder?

Anzahl_umdrehung: 
'Unterfunktion zum Aufzählen der Umdrehungen und Rücksetzen des Motors.
Incr Umdrehungen
   If Umdrehungen = 2 Then Umdrehungen = 0
      If Umdrehungen = 2 Then
      Reset Portc.2
   End If
Return


sorry umgeschrieben hab ich dass alles noch nicht setzt ich mich jetzt 
drann.

von Ich da (Gast)


Lesenswert?

Du bist schon nahe dran, aber warum zwei If Abfragen ineinander bei der 
die Grundbedingung die gleiche ist?

Zitat: If Umdrehungen = 2 Then Umdrehungen = 0
      If Umdrehungen = 2 Then
      Reset Portc.2
   End If

Warum nicht so:

If Umdrehungen =2 then
Umdrehungen = 0
reset portc.2
end if

von Matze (Gast)


Lesenswert?

ja ich weiß. ich habs auch schon mit "and" probiert kam dann aber immer 
ein fehler. und so hats dann geklappt. sind halt feinheiten.

mal so nebenbei. kennt jemand ne möglichkeit wie man ne überwachung 
zwecks stromausfall in den code einbauen könnte? sobald stromausfall ist 
wird die uhr ja auf 00:00:00 zurückgesetzt und von da an läuft sie dann 
wieder los.


da kann ich ja nicht einfach ne abfrage einbauen sonst würde ich immer 
um mitternacht ne fehlermeldung bekommen.

einziges was mir da einfallen würde wäre ne art pufferbatterie die dann 
übernimmt wenn mal keine spannung mehr anliegt.

was meint ihr?

von Ich da (Gast)


Lesenswert?

baue doch eine batteriegepufferte RTC ein. Z.B. mit dem DS1307 oder was 
ähnlichem.

von Matze (Gast)


Lesenswert?

ja danke. problem is eigentlich bei mir immer dass ich nicht weiß welche 
bauteile es da auf dem markt gibt. wenn ich dass mal weiß ist das 
konstruieren bzw das aufbauen das kleinste problem.

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.