Forum: Mikrocontroller und Digitale Elektronik Bascom 62-Bit-Feld auf SPI an kaskadierte Schieberegister


von Johannes (menschenskind)


Lesenswert?

Hallo

Ein 62-Bit-Feld mit 0en und 1en gefüllt soll über den SPI in die 
Schieberegister rutschen.

Ich nutze nen ATTiny.

Der Bascom-Compiler meckert gleich zu Beginn rum
1
Config Spi = Soft,                                          'Initalisierung der SPI-Schnittstelle
2
         Din = None,
3
         Dout = Portb.6,
4
         Ss = None ,
5
         Clock = Portb.7

Und zwar meint er dazu: Din... Assignment Error
Dout...invalid Datatype [[0011]0]
Dout...variable not dimensioned

In der Hilfe steht leider nix dazu.

Und dann würd ich noch gern wissen ob ich das 62-Bit-Feld auf einmal an 
die SR-Kaskade senden kann oder für 8 SR in 8 Schritten mittels einer 
For-Schleife?

Dankeschön

von gast (Gast)


Lesenswert?

Wenn du die Fehlermeldungen liest, kommst du dann nicht darauf, dass der 
Compiler in
Din = None eine Zuweisung sieht?
Entweder du schreibst alles in eine Zeile oder mit _ als letztes Zeichen 
der Zeile, dann weiß Bascom, das es weitergeht.

von Compiler Error (Gast)


Lesenswert?

Demnächst gibt es hier ein GCC-Bascom-Forum, um solche Probleme zu 
lösen.

von Lothar S. (magic33)


Lesenswert?

wie sieht denn deine schaltung aus und was ist mit fehlern bei der 
datenübertragung in der 64bit kaskade

von Johannes (menschenskind)


Lesenswert?

Danke für die Antworten.

Ich wollte das ein wenig übersichtlicher schreiben, da kann man ja nicht 
wissen, dass Bascom da rummotzt. Zumal hinter den Zuweisungen noch immer 
ein Komma steht.

Eine Schaltung gibt es noch nicht, aber das ist wohl das geringste 
Problem.
Das ist übrigens eine Projektarbeit fürs Studium.

Nach Neukompilierung des Codes durfte ich feststellen, dass er mir bei 
dem 62Bit-Feld bringt: out of SRAM-Space.
Anders, als mit vier 15-Bit-Feldern, kann ich das sicher nicht 
realisieren, oder?

Ich war übrigens mal bei dem Bascom-Forum, das mir von Google an 1. 
Stelle genannt wurde. Aber da muss man sich schon fürs bloße Suchen 
anmelden.
Das sind vielleicht Spinner.

von Peter D. (peda)


Lesenswert?

Johannes Hofmann wrote:
> Nach Neukompilierung des Codes durfte ich feststellen, dass er mir bei
> dem 62Bit-Feld bringt: out of SRAM-Space.

Dann sag dochmal, was für nen AVR Du hast.


> Anders, als mit vier 15-Bit-Feldern, kann ich das sicher nicht
> realisieren, oder?

Der AVR ist ein 8-Bitter, also ist es am effektivsten ein Array aus 8 
Byte zu nehmen.

Bit- oder Wort-Felder müssen dagegen umständlich auf Byteoperationen 
zurückgeführt werden.


Peter

von Johannes (menschenskind)


Lesenswert?

nen ATTiny, das hat ich oben schon mal erwähnt.

Wenn ich also ein Array aus 8 Byte nähme, wie sähe das denn dann aus?

Kann ich da trotzdem noch Funktionen dieser Art verwenden?
1
for I=1 to 64
2
print Array(I)
3
Next

Und wie sähe dann die Initialisierung aus?

Dim Array(64) as Byte

die werte in dem feld sollen auch nur 0 oder 1 annehmen.

Ich bin, wie unschwer zu erkennen ist, noch Anfänger.

Dankeschön

Ach ja und dann würd ich noch gern wissen, wie man ein komplettes Feld 
mit '0' initialisieren kann.

von Peter D. (peda)


Lesenswert?

Johannes Hofmann wrote:
> nen ATTiny, das hat ich oben schon mal erwähnt.

Das ist aber kein bestimmter Chip.
Davon gibts mindestens 10 verschiedene von 0..512 Byte SRAM.


>
1
for I=1 to 64
2
> print Array(I)
3
> Next

Ne, das Array ist dann natürlich 8 Byte groß.
Und das SPI gibt dann byteweise aus, also 64 Bit.

Das SPI ist ein Byte-Interface, das kann mit Bits überhaupt nichts 
anfangen.


> die werte in dem feld sollen auch nur 0 oder 1 annehmen.

Die einzelnen Bits mußt Du dann mit UND/ODER Operatoren in die Bytes 
reinladen.
Man kann (zumindest unter C) ne Union machen aus Byte- und Bitfeldern, 
d.h. man setzt oder löscht sie als Bits und übergibt dem SPI dann die 
Bytes. Das Bitfeld wird dann vom Compiler intern auch über AND/OR 
gemacht.


Peter

von Johannes (menschenskind)


Lesenswert?

Hallo

Es ist ein 2313

Der genannte Code diente nur als Beispiel.

ich möchte wissen, ob ich denn dann noch auf so eine einfach Art und 
Weise  auf jedes einzelne Element von den 62 Bits zugreifen und 
manipulieren kann.

Wie man die einzelen Bits anspricht, weißt du aber nicht oder?
1
Dim Array(7)as Byte

Also wie genau ich dann auf bspw. das 2. Bit von Array(3) oder so 
rankomme? evtl so?
1
1 and Array(3).2

danke

von Peter D. (peda)


Lesenswert?

Johannes Hofmann wrote:
> Wie man die einzelen Bits anspricht, weißt du aber nicht oder?

Nein, weiß ich nicht, da ich kein Bascom benutze.
Ich weiß nur, wie es in C geht.


Peter

von Sebastian Heyn (Gast)


Lesenswert?

Alles in eine Zeile!

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.