PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stellung von 10 x 24 Ports speichern



zwanzischmark
03.01.2005, 13:36
Hallo,

ich habe folgendes Problem:
ich will 10 unterschiedliche einstellung von 24 Ports abspeichern können. Das beste und einfachste wär meiner ansicht wenn das mit dieser tabellenfunktion gehen würde, aber man kann die daten in den tabellen ja nicht ändern, deswegen suche ich nach einer anderen Lösung. Wenn ich die einfache Dateifunktion benutzen würde müsste ich also 240 variablen einlesen und speichern was mir irgendwie zu unüberschaubar wird und wofür der speicher vielleicht nichtmal reicht. Ich hätte zumindest jede menge verschwendet, weil ich ja nur 0 oder 1 abspeichern will. Da ja Integerzahlen abgespeichert werden besteht jeder speicherplatz aus 2Byte also 16 Bit. Wenn ich also nur 16 ausgänge hätte könnte man das sicher irgendwie zu einem "binärcode" zusammenfassen und hätte für die 10 einstellungen nur "20" Byte verbraucht. Bei 24 Bits wird es aber dann schon wieder kompliziert weil ich für jede einstellung 2 Werte speichern muss. Also hat jemand ne idee wie es noch einfacher oder anders gehen könnte? wäre über jeden tipp dankbar. Das ich 10 Speicherplätze haben will war nur mal die erste idee. Mir würden auch 5 oder so reichen, aber ich denke darauf kommts dabei nicht mehr an...

Paul

PicNick
03.01.2005, 13:49
Hi, geht's da um 24 Ports a 8 Bit ?
dann brauchst du für 10 "Presets" wohl 10 * 24 Byte = 240.
Da kann man noch ein bißchen rumkomprimieren, aber im Prinzip isses so.
Benötige Bytes = Anzahl Presets * Anzahl Ports
mfg robert

zwanzischmark
03.01.2005, 13:51
nein, ich will einfach die stellung der digitalports speichern also ON oder OFF 0 oder 1 und das ganze möglichst einfach halt

PicNick
03.01.2005, 14:02
I see.
Naja, dann sinnes 10 * 24 Bit ---> 240 / 8 => 30 Byte, die du brauchst.
Jedes Preset braucht 24 Bit, da sin genau 3 Byte, ist ja praktisch.
Bei Presets# 0 - 9 / Ports 0 - 23

PresetEntry = tabaddresse + 3 * Preset#
Bits (ports) 0 - 7 <- Presetentry
Bits (ports) 8 - 15 <- Presetentry + 1
Bits (ports) 16 -23 <- Presetentry + 2

mfg robert

zwanzischmark
03.01.2005, 14:11
hilfe...

kannst du mir das nochmal genauer erklären ich versteh grad nur Bahnhof

vielleicht solte ich es nochmal genauer erklären, ich weiss nich so genau ob du mich richitg verstanden hast...

ich hab die C-control (M-unit 1) und mir ne tastatur angeschlossen worüber ich über die nummern die ports an und ausschalten kann

also ich geb ein 1 dann 0 dann # damit wäre port 10 an soweit alles fertig. jetzt nehmen wir an ich hab grad folgenden status:

1000 0000 0000 0000 0000 0001

also 1 ist an und 24 ist an und das möchte ich möglichst einfach mit dem dateifunktion kram

OPEN# FOR WRITE
#PRINT
....

umsetzen das ich auch nach abschalten der spannung auf die einstellungen zurückkreifen kann und da man tabellen wärend der laufzeit ja nicht speichern kann wusste ich keinen andern weg. Ich will aber nun nicht nur eine einstellung speichern sondern 5 oder 10 egal... die zahl kann ruhig fest sein

du meintest jetz vorgefertigte tabellen oder? aber ich will das ja wärend der laufzeit speicchern...

PicNick
03.01.2005, 15:19
Oh jemieh, bei C-Control kenn ich mich wenig aus.
Normalerweise müßte man die Tabelle in den EEPROM speichern und von dort wieder holen.
Aber wie gesagt, der passende Formalismus bei C-control is mir nicht vertraut, das tut mir leid.
Versuch doch mal "HELP" EEPROM ? mfg robert

zwanzischmark
03.01.2005, 15:23
ja wie gesagt tabbellen kann man nur im im programm anlegen nicht während der laufzeit...

trotzdem danke

ACU
03.01.2005, 17:54
Dann speichere doch einfach im EEPROM.
Als File.
Der erste Wert ist Port 1 und so weiter.

Brauchst du ein Beispiel, oder bekommst dus auch so hin?

Die Dinge passen locker in den EEPROM, da habe ich schon ganz andere Dinge reingepackt.

Wie ich in einem anderen Thread schon geschrieben habe, sollte man allerdings nicht zu oft die ganzen Werte speichern (wegen den begrenzten Schreib/Lesezyklen).


MfG ACU

zwanzischmark
03.01.2005, 18:03
hab den treat gelesen und ist diese methode die die am meisten zyklen benötigt ;) weil ich ja dann nicht immer nur ein Preset (wie PicNic das schön genannt hat) speichern muss sondern alle 10 oder kann man den Zeiger auch selbst setzen?

ist auch egal ich arbeite an einer lösung mit der ich für jedes Preset nur 2 speicherplätze benutze also entweder 2 x 12 bit oder 1 x 16 1x 8 das muss ich noch sehen wies einfacher is. Wenn einer nen guten quellcode dafür hat wär auch gut ;) bei mir wirds wiede son wurscht kram


edit:
also ich hab schonmal herausgefunden das es für die normalen 16 Ports ja super easy ist. Man muss ja nur die ports als WORDPORT deklarieren und speichert einfach den WORDPORT also:

DEFINE ports WORDPORT
...
PRINT# ports
ClOSE#
...
das klappt schonmal perfekt. Mit Port 17-24 wirds wohl nicht so leicht gehn, weil die ja über den PCF8574 angesteuert werden, aber da ich den noch nich hab muss ich erstmal abwarten ob sich da dann auch sone simple lösung findet...

so long

edit2:

hab jetzt nochmal ein bisschen quellcode über den PCF8574 nachgelesen und herausgefunden das man den auch mit ner einfachen schleide auslesen kann und dann ne 8bit binärzahl hat die ich dann abspeichern kann. Also besteht jedes Preset aus einer 16bit und einer 8bit einheit die ich abspeichern kann.

Bleibt noch die frage ob ich den zeiger im eeprom selbst setzen kann (wenn ja wie?) oder ob ich immer alles überschreiben muss was bei dieser lösung auch nich so tragisch wäre.

BlueNature
03.01.2005, 19:55
Hallo zwanzischmark!

Wie schon die andern beiden das recht gut erklärt haben ist das mit dem Tabellen schreiben als File die optimalste Variante. Aber wenn du eh einen PCF8574 mit I2C vwerwendest kannst du auch gleich deinen Speicher damit aufrüsten. Es gibt einen 8-Füssler der I2C kann und auch 256 Bytes ablegen kann. Diese können sogar gepuffert werden mit einer Batterie. Das steht im Datenblatt. Der Baustein nennt sich PCF8570P und gibt es auch bei Reichelt zu kaufen. Das Datenblatt kannst du dir dort auch herunterladen. Hab mir das Teil auch mal bestellt gehabt zum herumprobieren und ist gar nicht so schlecht für eine C-Control.

Grüsse Wolfgang

zwanzischmark
03.01.2005, 19:59
als tabelle kann man doch nicht speichern?!?!?!?! aber mein problem hat sich ja shon gelöst wie ich geschrieben hab... mit der variante die ich jetz hab bin ich recht zufrieden... mit tabelle wär natürlich besser aber das geht ja nun mal nicht oder wovon redest du?

BlueNature
03.01.2005, 20:08
als tabelle kann man doch nicht speichern?!?!?!?! aber mein problem hat sich ja shon gelöst wie ich geschrieben hab... mit der variante die ich jetz hab bin ich recht zufrieden... mit tabelle wär natürlich besser aber das geht ja nun mal nicht oder wovon redest du?

Hab mich da etwas ungenau ausgedrückt gehabt. Ich meinte natürlich Tabelle als Datei. Hab ja geschrieben die beiden oberen Programmansätze, die sind schon sehr gut gelungen von der Art. Aber wenn es funktioniert kannst du gerne das Ganze mal an webmaster@wieselsworld-online.de senden. Ist meine Seite und dachte bei der Gelegenheit auch gleich mal die Möglichkeit anzugeben das auch Userprojekte willkommen sind. Vor allem ungewöhnliche Methoden. Ansonsten werde ich bei Lust und Laune wieder mal einen neuen Beitrag verfassen.

Grüsse Wolfgang

zwanzischmark
03.01.2005, 20:12
ok dachte grad es gibt doch ne möglichkeit.... aber soviel ist das ja nich was ich dann schicken kann ;) is ja alles recht simpel... werds mal posten wenn ich alles beisammen hab

BlueNature
03.01.2005, 20:17
ok dachte grad es gibt doch ne möglichkeit.... aber was heisst programm schicken das sind ja nur ein paar Zeilen... aber ih werds mal hier posten wenn ich die teile hab

Hallo zwanzischmark

Es war nur als allgemeine Anregung gedacht. Das mit dem I2C-RAM hatte ich so angedeutet da du damit nicht immer das komplette Pattern schreiben musst. Damit wärst du in der Lage wahlfrei zuzugreifen und zu schreiben. Das geht mit einer Datei leider nicht. Eine kleine Anregung die ich dir noch empfehlen kann wäre das DeepFx im wahlfreien EEPROM-Zugriff von Mark Hämmerling. Der hat eine Webseite und hat das Assemblermodul und den Code dazu zur Verfügung gestellt. Lies dort am besten nochmals nach, es wäre für deien Fall ohne weitere Komponenten eine ideale Lösung.

Nachtrag: http://markh.de/cc-projekte.html#deepxs

Grüsse Wolfgang

zwanzischmark
03.01.2005, 20:25
danke für die tipps werd ich mir mal anschauen wenns nich all zu aufwendig ist

mfg Paul


edit:

hab mal grad drübergeschaut über die Seite, aber in englisch werd ich sowas eh nich verstehen. Ich hab mir aber nen eeprom mitbestellt vielleicht kann ich mich ja mal mehr damit beschäftigen wenn der zum einsatz kommt...

zwanzischmark
07.01.2005, 21:42
so hab jetzt du Umsetzung nahezu abgeschlossen. Vom Prinzip funktioniert jetzt alles, nur fehlen jetzt einfach die variablen um auf 10 speicherplätze zu kommen. Deshalb sinds erstmal nur 4 geworden muss mal sehen ob ich das mit dem zwischenspeichern in variablen noch irgendwie anders lösen kann.