Bascom AVR Frage zu Arraynamen in Variablen

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 22 12 2025  11:32:46      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Bascom AVR Frage zu Arraynamen in Variablen

    







BID = 408758

stefan_z

Gelegenheitsposter



Beiträge: 57
Wohnort: Köln
 

  


Hey, das Basic treibt mich noch in den Wahnsinn!

Ich habe mehrere arrays definiert:


Code :


B_Array:
Data 17 , 15 , 22 , 30, 12

A_array:
Data 12 , 29 , 11 , 13, 24



Jetzt will ich den Inhalt jeweils eines Arrays in den Ram laden, jedes mal ein anderes Array - also mal A_array, dann mal B_array, etc...
und zwar mit einer Zwischenvariable, die den Namen des gewünschten Arrays enthält.
Hier scheitere ich.


Code :


Array_pointer = "A"
Zu_ladender_array = Array_pointer + "_Array"
Read Zu_ladender_array(Zu_lesende_zelle)




Klar, das gibt nur Fehlermeldungen, dass Zu_ladender_array kein Array ist (ist er ja auch nicht, ist nur ein String mit dessen Namen)...
Wie sage ich Bascom, dass er den Array-Namen aus der Variablen nehmen soll?

Wäre echt eine tolle Hilfe, ich bin am Ende mit meinem Latein


Stefan Z

BID = 408767

Her Masters Voice

Inventar


Avatar auf
fremdem Server !
Hochladen oder
per Mail an Admin

Beiträge: 5312
Wohnort: irgendwo südlich von Berlin

 

  

Ich würd mal auf garnicht tippen. Aber wenn du stattdessen mit CASE/SELECT arbeitest und dort die korrekten Arraynamen aufrufst klappts.

_________________
Tschüüüüüüüs

Her Masters Voice
aka
Frank

***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************

BID = 408863

DonComi

Inventar



Beiträge: 8604
Wohnort: Amerika

Ne, so kann das nicht gehen.

Sag mal genau, was du machen willst, dann können wir dir evtl. helfen, meine BASCOM-Kentnisse haben extrem nachgelassen, seitdem ich es nicht mehr nutze.

---

Wenn du Daten im ROM platzierst, ich denke, dass geht mit Data, dann musst du mal schauen, ob es einen Befehl gibt, der diese Daten lesen kann.

---

Ein Array wird allerdings noch etwas anders deklariert: Dim I[10] As Byte z.b.

_________________

BID = 408912

stefan_z

Gelegenheitsposter



Beiträge: 57
Wohnort: Köln


Zitat :
DonComi hat am 22 Feb 2007 16:51 geschrieben :

Ne, so kann das nicht gehen.

Sag mal genau, was du machen willst, dann können wir dir evtl. helfen, meine BASCOM-Kentnisse haben extrem nachgelassen, seitdem ich es nicht mehr nutze.

Wenn du Daten im ROM platzierst, ich denke, dass geht mit Data, dann musst du mal schauen, ob es einen Befehl gibt, der diese Daten lesen kann.

Ein Array wird allerdings noch etwas anders deklariert: Dim I[10] As Byte z.b.


Doch, so geht das schon, aber halt nicht mit einer Variablen, die den Namen einer anden enthält.
Lt. Anleitung werden DATA Zeilen im ROM Platziert (bzw. im Flash) und dann zur Laufzeit ausgelesen - soweit sogut.
Ich habe eine 5x5 LED Matrix gebaut, auf der sollen jetzt verschiedene Buchstaben auftauchen, später dann auch scrollen.
Der Text steht in einem String, davon übergebe ich den jeweiligen Buchstaben an eine Variable die dann den Namen des DATA-Eintrags enthält - und da endet die Reise dann wie gesagt schon....

Jeder Buchstabe besteht aus 5 Bytes, die sollen ausgelesen und in einen Array geparkt werden, der dann von der Anzeigeroutine Zeile für Zeile angezeigt wird.

Die Dimensionierung der Variablen klappt soweit prima, hat alles seine Richtigkeit - nur eben das dynamische Zuweisen der auzulesenden DATA-Zeile nicht.

Ich will halt Subroutinen für jeden Buchstaben vermeiden, das ist total überflüssig meiner Meinung nach.
Ich denke eher, dass es ein Problem mit der Syntax-Schreibweise ist...

Stefan Z

BID = 408927

DonComi

Inventar



Beiträge: 8604
Wohnort: Amerika

Ich mache das ungefähr so:

Tabelle mit Offsetwerten irgendwo im ROM platzieren.
Das auszugebene Zeichen wird auf die Basisadresse (erstes Byte) gerechnet, und der Tabellenwert wird wiederum als Offset benutzt und auf eine Tabellenbasisadresse gerechnet. Nachdem nun die Adresse eingestellt ist, wird nurnoch der Inhalt gelesen. Da du 5 Bytes hast, musst du halt entsprechend große Tabellen schreiben, aber das sollte eigentlich rel. gut gehen.

Nachdem du das erste Byte gelesen hast, muss der ROM-Zeiger (Z-Register) inkrementiert werden und das nächste Byte gelesen werden. Das ganze fünf mal.

Du musst dir nur was ausdenken, wie du das mit dem krummen Wert von 5 machst. Mit 5 multiplizieren ist in Basic leicht, aber auch anstrengend und zeitintensiv für den Prozessor.
Besser mit graden Werten wie 8 oder so rechnen. Da reicht es z.B., alle Bits drei Stellen nach links zu schieben.
Du verschwendest dann zwar pro Zeichen 3 Bytes, aber man muss da Nachteile und Vorteile gegeneinander aufrechnen.


Habe ich das Thema getroffen?


Oder: verschachtelte Select Case-Anweisungen.

_________________

BID = 409011

stefan_z

Gelegenheitsposter



Beiträge: 57
Wohnort: Köln


Zitat : DonComi hat am 22 Feb 2007 20:31 geschrieben :

Ich mache das ungefähr so:

Tabelle mit Offsetwerten irgendwo im ROM platzieren.
Das auszugebene Zeichen wird auf die Basisadresse (erstes Byte) gerechnet, und der Tabellenwert wird wiederum als Offset benutzt und auf eine Tabellenbasisadresse gerechnet.

Oder: verschachtelte Select Case-Anweisungen.


Wie leg ich denn so ne Tabelle an? Auch mit DATA?
Wenn ich dirch richtig verstehe, dann leg ich ne große Tabelle an, alle Zeichen hintereinander (schlauerweise vielleicht in ASCII-Sortierung ).
Dann Halt den aktuellen Buchstaben als String nehmen, daraus den entsprechenden ASCII/Binär-Wert erstellen, den dann mit 5 multiplizieren und als Offset für die Tabelle nutzen, 5 Byte auslesen, fertig.

Stefan Z

BID = 409069

DonComi

Inventar



Beiträge: 8604
Wohnort: Amerika

Ja, du hast mich korrekt verstanden.

Wie man das mit Basic macht, weiß ich leider nicht, in Assembler könnte ich dir weiterhelfen.

Sonst legst du halt einfach die Tabellen ins EEPROM, da kann ich dir dann auch sagen, wie das geht (da kenn ich noch die Zugriffbefehle).

Wenn mich aber nicht alles täuscht, sollte auch ein Array als Tabelle mit den Werten für die Zeichen reichen. Das Array ist dann eben im schlimmsten Fall (=alle ASCII-werte von 0-255) 256*5 Bytes groß.

Edit:
Dim Kode[255] As String * 5

Am Anfang muss dann die Tabelle mit den Werten gefüllt werden, die als Konstanten irgendwo im ROM rumliegen.
Deshalb macht es mehr Sinn, direkt im OM zu bleiben, ohne 768 Bytes im SRAM zu verschwenden. Nur musste dann rausfinden, wie man mit Basic auf Zellen im ROM zugreifen kann. Bedenke auch, dass das ROM nicht byte- sondern word-organisiert ist!

_________________


[ Diese Nachricht wurde geändert von: DonComi am 23 Feb 2007 14:41 ]

BID = 409777

stefan_z

Gelegenheitsposter



Beiträge: 57
Wohnort: Köln

Also ich habe das Ding jetzt endlich soweit am laufen - allerdings ist der EEPROM vom ATiny2313 ja schon arg klein
Von A bis Y komme ich, das Z ist dann nur noch in den ersten drei Zeilen korrekt, dann erscheinen die ersten zwei Zeilen des A wieder

Wie bekomme ich denn jetzt die verdammte DATA-Tabelle in den Flash-Speicher? (Davon hat er ja zumindest 2KB an Bord).

Ich habs mit $eeprom und Readeeprom gemacht (ja ich weiß, es ist falsch, aber womit machichs sonst?).

Das Listing habe ich angehangen - ist bestimmt auch für andere sie sowas bauen interessant.

Dankbar für jede Hilfe:
Stefan Z

BID = 410040

stefan_z

Gelegenheitsposter



Beiträge: 57
Wohnort: Köln

OK, hab des Rätsels Lösung gefunden... Mannomann.


Hier steht eigentlich alles Wesentliche:
http://www.mcselec.com/index2.php?o.....=3420

Vielen Dank nochmal für Eure Hilfe - ohne Internet wäre ich echt aufgeschmissen

Stefan Z

PS - des neuen Source und alles poste ich die Tage nochmal - wird jetzt noch verfeinert. Anbei schonmal ein kleines (schlechtes) Video - in Echt steht das Bild 1A!


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 18 Beiträge im Durchschnitt pro Tag       heute wurden bisher 6 Beiträge verfasst
© x sparkkelsputz        Besucher : 187878578   Heute : 10904    Gestern : 15438    Online : 628        22.12.2025    11:32
3 Besucher in den letzten 60 Sekunden        alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0733740329742