Bascom hilfe beim code verbessern

Hallo Sebastian,

irgendwie habe ich das Gefühl das ich manchmal einfach zu kompliziert denke.

Du hast vollkommen recht. Wenn man mal was sieht macht es auch wieder mehr Spaß.
Das Netzteil ist gestern gekommen. Ein Bausatz, wurde aber mit keiner Silbe erwähnt. Naja was Solls dann schmeiß ich mich eben mal hinter den Lötkolben. Nur unnötiger weise bin ich seit gestern und noch bis Samstagnachmittag noch auf Dienstreise
Ich denke dann wird’s wohl erst nächste Woche was zu berichten geben. Aber ich bin mal gespannt ob mit dem neuen Code alles genau so funktioniert wie bisher.

Ich melde mich dann wieder. Vielleicht auch schon mit neuen fragen.
Insofern danke und schönes Wochenende
 
Hallo Sebastian
Zum Glück kann man ja den Laptop mit auf die Dienstreise nehmen.
Gestern Abend und heute im Lauf des Tages habe ich mir ein bisschen Gedanken um die Index Berechnung für meine 4 Minuten punkte gemacht

Ich habe mich jetzt entschieden die punkte so zu nutzen wie du auch, also mit -2min, -1min und +1min und +2min.
Ich hatte vor das mit Case zu machen. und hänge jetzt an der Berechnung für den Index
In der Excel Tabelle im Anhang sieht man was ich alles schon durchgerechnet habe.
Als erstes rechne ich 2 min zu den _min dazu. Dann habe ich am Ende ja aber werte die größer als 60 sind. Ich denke ich muss dann mit einer if Bedingung bei zahlen größer 59 wieder auf 0 setzen.
Anschließend teile ich den neuen Minuten Index durch 5 um nur alle 5 min eine Änderung zu bekommen.
Theoretisch kommen ja aber werte raus die eine Komma stelle haben.
Wenn ich alles richtig verstanden habe ist das aber so dass ein Byte keine kommastellen anzeigen kann und sie einfach abschneidet und nicht rundet.
Soviel zu dem was ich mir sicher bin.

Jetzt zu dem was ich mir nicht sicher bin.
Angenommen ich teile den neuen minutenindex durch 5 und schreibe das Ergebnis in ein Single, dann speichert es mir dich nachkomma stellen. Wenn ich jetzt eine Möglichkeit hätte nur die nachkommastellen zu betrachten, könnte ich diese /0,2 rechnen und bekomme dann jede Minute eine Änderung die von 0-4 zählt. Also genau das was ich brauche.

Die Tabelle verdeutlicht ein bisschen was ich sagen will.
Ist es denn grundsätzlich möglich nur die Nachkommastelle in dem Single zu betrachten. Könnte ich es z.B. so weit nach links shiften das alles vor dem Komma wegfällt und ich dann eben eine Zahl habe mit jeder Menge 0000 hinten dran. Wäre ja nicht schlimm, dann teil man eben durch 1000 oder was man halt braucht um auf den passenden wert zu kommen.

Ich hoffe meine Gedanken sind zu verstehen. Vielleicht mach Ichs auch schon wieder zu kompliziert.

danke
 

Anhänge

  • berechnung min_index.pdf
    116,6 KB · Aufrufe: 13
Vielleicht mach Ichs auch schon wieder zu kompliziert.
Ich glaube schon.
Du hast dies bei dir schon stehen:
Min_index2 = _min + 2
Jetzt teilst du nicht durch 5 sondern nimmst den Mod Operator. Der gibt dir den Rest der Division zurück. Also
Min_index = Min_index2 Mod 5

Code:
_min    Min_index2    Min_index    Dein_Case
   0         2            2             2
   1         3            3             3
   2         4            4             4
   3         5            0             0
   4         6            1             1
   5         7            2             2
....
  58        60            0             0
  59        61            1             1

Wie du siehst steht in der Spalte Min_index2 das gleiche wie in deiner Case Spalte. Also ist das schon der Wert.

Grüße

Sebastian
 
Hallo zusammen.
Mit der Hilfe von Sebastian ist jetzt also ein komplett neuer Code entstanden.
Den hänge ich jetzt mal an.
Ich denke es gibt vielleicht immer noch das eine oder andere was man optimieren kann, aber von den 4 KB die die bascomdemo kann bin ich weit entfernt.

Eigentlich bin ich mir allem zufrieden außer 2 Kleinigkeiten.

Das erste und vorerst größere Problem ist die adc und pwm Geschichte.
Und zwar ist das Problem das die led flackern wenn sich die Helligkeit stark verändert, also z.B. wenn ich das Licht im Raum ausschalte. Dann werden die led nur schrittweise dunkler.

Ich denke es liegt daran das der ldr die Helligkeit der led auch aufnimmt und es so schrittweise dunkler wird.
Ich habe versucht das zu lösen in dem ich nur 1-mal in der Minute den adc einlese. Das Problem ist besser geworden aber immer noch nicht so ganz wie ich es will.
Das nächste ist das der adc nie ganz 5 bzw. 0 v wird. Dementsprechend gehen die Leds nicht ganz aus bzw. an.
Was gibt es für eine Möglichkeit das zu lösen, ein Case für den comparewert und den Index aus dem adc berechnen??

Das 2 ist die Berechnung des stundenindex. Ich habe es gelöst bekommen benutze dafür aber nicht mehr die _hour sondern eine eigene variable.
Das funktioniert soweit auch ganz gut, nur ist so das synchroneren mit dem dcf Signal nicht mehr so leicht zu lösen.

Also 2 Probleme die es noch zu lösen gibt.
Für weitere Hilfe bin ich dankbar.
 

Anhänge

  • uhr array 2min versetzt caseberechnung pwm.bas
    11,2 KB · Aufrufe: 13
Hi,

also ich habs der Neugier wegen einfach mal runtergezogen. Bei mir kommt beim compilieren nur ...

Error : 243 Line : 210 Bit index out of range for supplied data type [23] , in File : uhr array 2min versetzt caseberechnung pwm.bas
Error : 243 Line : 213 Bit index out of range for supplied data type [23] , in File : uhr array 2min versetzt caseberechnung pwm.bas
Error : 7 Line : 0 IF THEN expected [ 213] , in File :
Error : 123 Line : 0 END IF expected , in File :
so richtig kann mein Bascom 2.0.7.0 nicht wirklich was mit dem Programm anfangen :confused:

Ist zwar als "Long" definiert aber Bascom mag es anscheinend trotzdem nicht wenn man mit dem 23en Bit rumspielen will.

Code:
If Min_index = 0 Then                                       'Min_index = 0 bedeutet volle Stunde
Zeitausgabe.23 = 1                                          'Das Wort Uhr soll nur leuchten wenn es eine volle Stunde ist.
S = 0                                                       'Das S soll bei voller Stunde nicht leuchte
Else
Zeitausgabe.23 = 0                                          'Das wort Uhr soll bei angebrochen Stunden nicht leuchten
S = 1                                                       'S Soll bei angebrochenen Stunden an sei
End If

gibts da noch nen Trick ?

Gruß
Dino
 
so richtig kann mein Bascom 2.0.7.0 nicht wirklich was mit dem Programm anfangen :confused:
Ist zwar als "Long" definiert aber Bascom mag es anscheinend trotzdem nicht wenn man mit dem 23en Bit rumspielen will.

gibts da noch nen Trick ?
Ist ein Fehler von Bascom 2.0.7.0 und auch in 2.0.7.1.

Wenn du ein einzelnes Bit nach dem Befehl Config Base=0 ansprichst, gibt es einen Compiler Fehler.
War bei 2.0.6.2 noch nicht.
Ich hab's mal an MCS weitergeleitet.

Grüße

Sebastian
 
Hi Sebastian,

Ist ein Fehler von Bascom 2.0.7.0 und auch in 2.0.7.1.
dann bin ich ja beruhigt ;) wobei ... hab mich über meine neue Bascom-Vollversion gefreut und dann sowas :p

Wenn du ein einzelnes Bit nach dem Befehl Config Base=0 ansprichst, gibt es einen Compiler Fehler.
War bei 2.0.6.2 noch nicht.
und meine alte 1.11.9.8 Demo meldet ...
... "Error : 12 Line : 37 Unknown CONFIG parameter [BASE] , in File : uhr array 2min versetzt caseberechnung pwm.bas" ...
die Version kann mit der Zeile ...
... "Config Base = 0 'Das Array beginnt bei 0" ...
nix anfangen :p :( so ein Mist auch ...

Ich hab's mal an MCS weitergeleitet.
na denn warte ich mal auf ne neue Version. So richtig Zeit hab ich im Moment sowieso nicht um mal was zu programmieren. Und in 20min schnell was tippen ist auch Blödsinn. Wenn man sich eingearbeitet hat kann man schon wieder aufhören.

Gruß
Dino
 
und meine alte 1.11.9.8 Demo meldet ...
na denn warte ich mal auf ne neue Version.
Ich habe daher alle alten Versionen in separaten Verzeichnissen liegen. Dann kannst du jede Version wieder starten.
Du musst halt nur den Lizenzfile in jeder drin haben.
Wenn eine neue Version rauskommt, installiere ich die zwar, aber ich arbeite normalerweise weiter mit der letzten.

Grüße

Sebastian
 
Der angesprochene Fehler (243: ... Bit index out of range ...) ist in der aktuellen Version 2.0.7.2 behoben.

Grüße

Sebastian
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)