www.mikrocontroller.net

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


Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht 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
Config Spi = Soft,                                          'Initalisierung der SPI-Schnittstelle
         Din = None,
         Dout = Portb.6,
         Ss = None ,
         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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Compiler Error (Gast)
Datum:

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

Autor: Lothar Sammel (magic33)
Datum:

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

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht 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?
for I=1 to 64
print Array(I)
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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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.


>
for I=1 to 64
> print Array(I)
> 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

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht 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?
Dim Array(7)as Byte

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

danke

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles in eine Zeile!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.