Bascom AVR Frage zu Arraynamen in Variablen Im Unterforum Microcontroller - Beschreibung: 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!
|
|
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
|