PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BIT-Arrays bzw. Alternative



tobimc
01.09.2004, 23:25
Hi!!

Ich habe eine Porterweiterung mit einem (bald mehreren) 74HC595.

Und dass ich diese in der Software ergonomisch ansteuern kann,
hätte ich gerne ein 2D BIT-Array. In ihm möchte ich
in der 1. Dimension die je 8 bit eines 595 zusammenfassen, in der 2.
die 8 Bit als je eine Bit-Variable.
Aber das geht ja nicht.
Bit-Array geht nicht und 2D schon gleich garnicht.

Deshalb suche ich eine halbwegs Platzsparende alternative,
denn je 8 Byte-Variablen nur um 0 oder 1 zu speichern... naja. ](*,)

Gibt es da eine andere Möglcihkeit oder kann ich nur das RAM des
Mega 16 vollmüllen??

Vielen Dank schonmal für eure Hilfe!!

Liebe Grüße,
Tobi

Frank
01.09.2004, 23:44
Da keine zweidimensionen gehen kannst du auch einfach zwei eindimensionale Byte Array´s für deinen Zweck nutzen. Einzelne Bit´s lassen sich ja in Bascom recht bequem setzen/löschen.

Variable.bit=1

x.2=1 ' Setzt Bit 2 von Variable x auf 1

eFFex
02.09.2004, 07:51
hab zwar noch kein Bascom programmiert, aber allgemein:
nutze die 8 bits dafür....nimm (ideal) ne 16 bit zahl...das HighByte speichrt die 8 Bits vom 595, das low byte die bit variablen...

platzsparender gehts nicht *g*, da du eben 16 bit in 16 bit speicherst...

ob das in Bascom umzusetzen ist,w eiss ich nich, denke mal aber schon...

tobimc
02.09.2004, 10:08
HI!

Danke für die Antworten!

Frank's Methode finde ich am besten! Ich dachte mir schon, wenn man die Bits einer Byte-Variablen setzen könnte... habe aber nicht gewusst,
wie das geht.
So ist's halt mit dem KNOW HOW bzw. KNOFF HOFF ;)

So werd ich das auf jeden Fall machen!
Ich werde immer das 8. Bit abfragen, und am Schluss alle Stellen einmal nach links rotieren.
DANKE!!

@eFFex: Deine Methode habe ich nicht ganz verstanden!
Was willst du mit den unteren 8 Bit machen?? :-k

Also VIELEN DANK nochmal an alle!!

Viele liebe Grüße,
Tobi

eFFex
02.09.2004, 10:19
in der 1. Dimension die je 8 bit eines 595 zusammenfassen

(highByte)


in der 2.
die 8 Bit als je eine Bit-Variable

(lowbyte)

läuft im endeffekt auf das was Frank meinte hinaus nur, dass es statt

zwei eindimensionale Byte Array´s

ein eindimensionales 16Bit (2Byte) array ist...
ich schätze mal aber ,dass sich die zwei bytearrays einfacher in bascom umsetzen lassen

Frank
02.09.2004, 10:20
Er meint das Du ein Array als 16 Bit anlegen sollst. Das Low Byte wäre dann die eine Dimension und das High Byte die andere.
Auch eine Möglichkeit. High Byte und Low Byte lassen sich in Bascom ebenfalls gut trennen (z.B. Befehl High). Also Ansichtssache wie du es machst.

Bedenken solltest du jedoch das bei beiden genannten Methoden die Speicherersparnis gegenüber Byte-Array´s ein wenig durch die aufwendigere Abfrage (Codegenerierung) reduziert wird. Kann sogar sein das du im Endeffekt in deinem Fall dann mehr Programmspeicher belegst. Musst Du testen!

Frank
02.09.2004, 10:22
Uhi, ich war eine Minute zu spät mit meiner Antwort ;-)

tobimc
02.09.2004, 11:03
Hi

Achso... Jetzt kapier ich das.
Ja, dann hätte ich aber 1 x 16 Bit. Aber was wäre wenn ich 9 595 hätte?
Dann würden ja die unteren 8 Bit nichtmehr zur speicherung der 8 Bit
der 595er ausreichen!

Ich werde das so machen:

Byte Array, je nach dem, wieviele 595er angeschlossen sind.
Und dann immer das höchste Bit des gerade aktuellen Chips (Bytevariable) lesen, dann rausschieben, um 1 nach links usw.

Danke nochmal!!

Viele liebe Grüße,
Tobi

eFFex
02.09.2004, 12:21
*argsl*
pro 595er eine 16bit zahl

E-Fan
26.09.2004, 14:02
Mal ne fragende Frage, die sich mir trotz ausführlicher Hilfelesung noch nicht beantwortet hat:
Gibt es einen Befehl mit dem ich ganze Arrays auf 0 oder deren mögliches Maximum (&HFF...) setzen kann?!?!