PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Codegenerator für Data-Zeilen (großes Datenfeld!)



Rolle77
25.08.2009, 18:12
Hallo,

nach längerer Zeit komme ich auch wieder mal zum Basteln. :-)
Leider habe ich gleich ein Problem. Ich bin zur Zeit daran einem AVR das Sprechen beizubringen indem ich ihn mit Wave-Dateien füttern will. :-)
Zu Testzwecken und um zu Prüfen wo das Speedlimit liegt verwende ich den ATmega 32. Diesem habe ich damit ich mich nicht immer mit dem ISP rumärgern muss (Hatte den Mega32 nur noch als SMD da!) den Bascom-Bootloader verpasst.
Nun das Problem: Ich habe einen Testsound als Sample von 3 Sec. länge mit einer Samplerate von 8KHz. Diese Daten müssen aber als Data-Zeilen in den Bascom-Quellcode rein. Ich möchte allerdings nicht alles Abschreiben. :-) Ich habe die Wave-Datei mit dem Audio-Editor "Goldwave 2001" da es den grade als Demo gab aufbereitet.

Wie bekomme ich diese nun als Data-Zeilen in meinen Programmcode oder in eine Textdatei damit ich das in Bascom reinkopieren kann?

Packt Bascom überhaupt so große Datenfelder oder gibt es da eine Limitierung beim Read befehl der die Data-Zeilen liest?

Falls alles klappt habe ich einige Sachen vor mit dem Programm und teile dies auch gerne hier mit.


Rolle77 :-)

for_ro
25.08.2009, 22:09
Da ich mit Excel ganz gut umgehen kann, habe ich mir die Datenzeilen immer dort erstellt.
Bisher bin ich noch nicht auf eine Beschränkung bei den Data Zeilen gestoßen. 16k große Bereiche habe ich schon für ein Farb LCD benutzt.
Allerdings mag Bascom nicht überlange Zeilen. Daher habe ich in einer Data Zeile immer nur 16 Werte gespeichert.

Gruß

Rolf

Andree-HB
26.08.2009, 08:30
Schau mal hier ; https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=48357&highlight=programmierer+gesucht&sid=7433572205e7764ef540610bb23f5f95

...da hatte ich etwas thematisch Ähnliches gesucht !

sast
26.08.2009, 11:09
Du willst sicher Daten aus einer Datei einlesen und als Data ... in den Code aufnehmen.

Vielleicht hilft dir das hier weiter: (siehe Attachment weiter hinten im Thread)

Du kannst eine Datei öffnen und durch Start in einem extra Fenster anzeigen lassen. Speichern hab ich jetzt noch nicht implementiert. Deswegen ist auch das Ziel disabled.
Offset legt fest ab wo in der Datei angefangen wird (wegen eventueller Header) und mit Anzahl legst du fest wie viele Bytes du lesen willst.
Mit Sprache wird die Programmiersprache bzw der Anzeigetyp gewählt.

Ich übernehme keine Haftung auf die Absturzsicherheit und Korrektheit, da ich bestimmt noch nicht alle Eventualitäten berücksichtigt habe.

sast

Rolle77
26.08.2009, 11:09
Hi,

@Andree-HB, sehr interessanter Link, nur kann ich bezüglich sound damit nix anfangen. :) Aber als Ansatz ist das schon mal ganz gut, vielleicht kann ich von dem Projekt dort einige Ansätze "klauen". :D

Ich bin momemtan auch dran google zu quälen, es muss doch nen programm geben das die Sounddaten wenigstens als Textdatei ausgeben kann als 8 Bit-Zahl. Goldwave kann das nämlich leider nicht ist mir aufgefallen, da kommen immer Sachen mit Vorzeichen raus. :(

Rolle77

sast
26.08.2009, 11:23
@Andree-HB
geht in deinem anderen Projekt noch was weiter bzgl. EEPROM? Oder hast du das abgeschlossen?

@Rolle77
Hab leider von BasCom keinerlei Ahnung und hoffe mal, das die Schreibweise Data &H00 so richtig ist.

sast

Andree-HB
26.08.2009, 11:51
@Andree-HB
geht in deinem anderen Projekt noch was weiter bzgl. EEPROM? Oder hast du das abgeschlossen?


....weder noch - ich bin derzeit nur vollends mit Renovierungs- und Umzugsarbeiten ausgelastet, Elektronik komplett in Kartons versenkt ! ;-)

Rolle77
26.08.2009, 12:31
@sast, ich verstehe deine Formulierung mit Data nicht. Was meinst du genau?

sast
26.08.2009, 12:43
Das bezog sich auf das Programm, welches ich dir weiter oben zur Verfügung gestellt habe.

sast

Rolle77
26.08.2009, 19:09
@sast,

danke ich test das Programm mal das sieht gut aus. Hast du das selbst geschrieben? Wenn ja, mit was für einer Programmiersprache? Dein Posting habe ich irgendwie überlesen, ich glaube ich sollte die seite nicht stundenlang offen lassen sondern ab und an auch mal refreshen. :-)

Rolle77
26.08.2009, 20:17
@sast,ich habe das Programm gerade mal ausprobiert, es funktioniert super! Falls du das selbst geproggt hast: Großes lob soweit bin ich noch lange nicht :D
Ist es dir vielleicht möglich noch einen Menüpunkt einzubauen (unter "Sprache") der die Bascom-Datazeilen mit Dezimalzahlen ausgibt? Hexadezimal ist zwar schön aber öhm nun ja nicht so gut zu lesen.

Ich habe als Quelldatei ein Wave von 3 sec. Länge mit Adobe Audition (Goldwave kann keine unsigned erzeugen!) als Textdatei konvertiert, und damit dein Programm gefüttert. Dann Copy&Paste aus dem Angezeigten Fenster in Bascom rüber und gut war. :) Vielleicht bekomme ich den Sound heute noch zum laufen um zu probieren wie sich das anhört...

Rolle77 :))

sast
26.08.2009, 20:30
Hab eigentlich noch etwas am Programm gemacht. Gibt morgen sicher noch mal ein Update. Z.B werden dann 16 Werte auf eine Zeile geschrieben. Das ist sonst bei längeren Dateien in der Länge zu viel. Zum Überprüfen, ob das Programm richtig funktioniert kann man die RAW Ansicht nehmen. Die lässt sich dann am einfachsten mit den tatsächlichen Daten der Datei vergleichen.

Ja das Programm ist selbst geschrieben, ist in Delphi (Object Pascal) aber auch kein großes Ding. Entscheidend ist immer, dass man weiß wie es im Kern umgesetzt werden soll. Das graphische drumherum, sprich Button und so weiter, klickt man sowieso nur zusammen.

Immer wenn es mal was schnelles sein soll, ist Delphi die erste Wahl. Obwohl ich eigentlich C Fan bin. Wenn irgendwelche Fehler bei den Eingaben auffallen, dann einfach kurz Bescheid geben. Fehler sind dazu da, dass sie beseitigt werden.

sast

Edit
@Rolle77 hab gerade dein neuen Post gelesen. Das mit den Dezimalzahlen sollte kein Problem sein. Wie sieht denn so eine dezimal Data Zeile in BasCom aus? Data &D24 &D6 oder Data 24 6.
Wie schon gesagt habe ich von BasCom gar keine Ahnung, da wäre maximal Verstehen durch Lesen von Quellcode drin. Zum selber machen ist mir das zu uninteressant. Gib mal ein Beispiel, dann pflege ich das noch mit ein.

Rolle77
26.08.2009, 23:30
Hi sast,

also bei Bascom werden beim Data-Befehl die dezimalzahlen so geschrieben:

Data 132,65,12,9,43,255 usw. die reinen Werte ohne führende Sonderzeichen.

Generell wird bei Bascom durch ein führendes "Spezialzeichen" dem Compiler mitgeteilt was für ein Datenformat er verwenden soll:

Data $34 <-- wird als ASCII Wert interpretiert, gut für Zeichen die man mit der Tastatur nicht schreiben kann.

Data &B1011 <-- wird als Binärwert interpretiert

Data &HFF <-- wird als Hexwert interpretiert

Data 123456789& <-- wird als "Long" (4 byte) interpretiert, für große Zahlen. Das "Spezialzeichen" in hier ausnahmsweise hinter der Zahl nicht vorne dran. Der Compiler will das laut Hilfe-Datei so haben.

Data "Hallo", "das", "ist", "ein", "Test" <-- wird als String interpretiert.

Generell werden mehrere Werte immer durch Kommas getrennt, unabhängig vom Format der Daten.

Deiner Aussage entnehme ich das Delphi nicht so schwer sein soll wie immer gesagt wird. Könntest du eventuell mal ein Beispiel posten? Welchen Compiler verwendest du dafür? *Neugier*

Ich hoffe ich konnte helfen. :)

Rolle77 :D

sast
27.08.2009, 11:35
So hier gibts die neue Version mit 16 Werten pro Zeile für C und BasCom.
BasCom geht jetzt in hexadezimal oder dezimal.
Kommas hab ich jetzt bei den BasCom Arrays auch drin.

Und im Raw Teil gibt es jetzt hex, bin, dez und Zeichendarstellung

Viel Spass damit.

sast

edit: attachment gelöscht, siehe unten

Rolle77
27.08.2009, 17:44
Hi sast,

Hut ab, wirklich, so stelle ich mir das Programm vor. :) Ich habe das ganze gerade mal getestet, die Umwandlung klappt einwandfrei.
Eine kleine Optische Sache vielleicht noch: Ist es dir vielleicht möglich (natürlich nur wenn es nicht zu viele Umstände macht) das du die Ausgabe der dezimalzahlen für Bascom dahingehend änderst, dass diese immer drei-stellig mit eventuell notwendigen führenden Nullen sind? Dann sieht der Quelltext im Editor nicht so zerrupft aus. :-) Das ist wie gesagt eher ein optisches Problem, Bascom setzt selbstständig die Leerzeichen bei den Kommas, berücksichtigt allerdings nicht die Zahlenlänge.
Eventuell ist das ganze auch für 16 Bit zahlen möglich, so als Anregung? Dann währe das Programm absolut perfekt!

Rolle77 :-))

sast
28.08.2009, 14:38
Meinst du das so? ...

Falls das Ende bei der 16Bit Darstellung auf ein einzelnes Byte stößt, wird dieses ignoriert. Wüßte sonst nicht wie ich es behandeln soll.

Kann sein, dass es noch ein Problem mit dem C Code gibt, aber das ist ja für dich irrelevant

sast

edit: attachment gelöscht

Rolle77
28.08.2009, 18:37
Hi,

genau so, jetzt ist das Programm perfekt! :-) Ich werde heute Abend das ganze mal "am Patienten" ausprobieren und schauen wie das Klingt so Soundtechnisch.

Sobald ich mehr weiß melde ich mich wieder. Falls interesse besteht kann ich den Code hier auch posten. Da ich aber erst noch meinen Progger (den von Klaus Leidinger) reparieren muss, kann das durchaus spät werden. Ich habe es geschafft durch verpolen (zugegeben es war schon sehr spät) auf diesem den Tiny2313 zu töten. Da ich zur Zeit keinen anderen Progger habe muss ich mir jetzt mit Ponyprog (ich hasse das Programm!) nen neuen Proggen. Diesmal aber gleich zwei, zur Sicherheit und nen zweiten Progger bau ich mir auch noch. :)

Rolle77 ;-)

sast
31.08.2009, 09:17
So hab in Version 6 noch ein paar kleine Fehler in der 16 Bit Variante ausgebessert.

Für Gento ist jetzt auch Pascal Array mit drin.

Wie immer die Bitte, wenn ihr Fehler findet, dann gebt mir Bescheid. Ich verwende das Tool ja selbst nicht und bin somit auf eure Hilfe angewiesen.

Haftung übernehme ich natürlich keine, aber es ist jedem erlaubt, das Tool zu verwenden, wozu auch immer ihr es braucht.

sast

Edit : Wieder mal Attachment gelöscht. Aktuelles ist wie immer weiter unten zu finden.

Rolle77
31.08.2009, 16:50
Hi,

ich melde mich auch mal kurz zu Wort, mein Projekt läuft leider momentan etwas schleppend da ich zur Zeit viele Überstunden in der Firma machen muss, wir haben viel Arbeit. :)
Aber spätestens Mittwoch Abend mache ich weiter ab dort habe ich nämlich Urlaub! :))))

Rolle77

Gento
02.09.2009, 21:56
Delphi / Pascal.

Hinter dem letzten Wert jeder Zeile fehl ein Komma.
Aber nur seit der letzten Version.

lg
Gento

Rolle77
02.09.2009, 23:09
Hi,

kurzer zwischenbericht, der Platinen-Prototyp wurde vor ca. 10 min. fertig gelötet, jetzt gehts ans Programmieren. Leider konnte ich heute erst so gegen 22.30h anfangen da ich erst da daheim war. Der letzte Tag vor dem Urlaub ist immer der stressigste... :D Die Platine enthält einen kleinen Tiny25, weils ein Prototyp ist als DIL mit Sockel und ein Atmel Dataflash. Da es das nicht als DIL gibt habe ich das auf einen 8-Pin Dil-Sockel provisorisch draufgelötet. Mehr infos wenn das Programm steht (ich muss das vom "großen" Mega noch anpassen auf den "kleinen" Tiny)

Rolle77

sast
03.09.2009, 12:53
@Gento
Sorry ist wahrscheinlich bei einer Copy 'n Paste Operation passiert.

Aber dadurch hatte ich mal wieder etwas Muse noch das IntelHex und das Speichern in eine Datei einzubinden.

Außerdem gibt es jetzt auch eine Inidatei in der die Bezeichner geändert werden können. Wird beim ersten Start erzeugt.

Gespeichert wird automatisch in eine Datei, so bald im "Zieldatei" Feld etwas drin steht. Dabei wird bei nicht vorhandensein der Datei eine neue erzeugt und ansonsten an das Ende der Datei angehangen.

Beim Hilferuf wird ein Link auf diese Seite angezeigt. Wenn man da drauf klickt, wird der Browser geöffnet. Man kann aber im Ini auch den help= Eintrag durch eine Datei ersetzen, in der die Hilfe steht. Ich bin wie immer zu faul eine zu schreiben.

sast

Edit: Attachment gelöscht. neues weiter hinten \:D/

sast
04.09.2009, 14:12
Und weil es so schön war hab ich mal noch das Programm soweit erweitert, dass man es jetzt auch aus einer Batch aufrufen kann.

Dazu gibt es im Zip jetzt noch ein kleines Hilfe File, welches man über hex2data.exe -h aufrufen kann. Natürlich nur wenn die Datei auch im exe Verzeichnis liegt.

Hier mal der Inhalt im Codeteil




hex2data.exe [Optionen]
Optionen:
-a bei IntelHex wird hier die Adresse für die Längenangabe des Arrays definiert.
Nach dieser 16Bit Variable schließt das Array an
Anwendung -a <Wert>
-b Werte werden als Byte (8Bit) eingelesen
Anwendung -b
-c Festlegen wieviel Bytes maximal eingelesen werden sollen
Anwendung -c <Wert>
-d Zieldatei
Anwendung -d <Pfad\Dateiname>
-e Aktiviert die Fertigmeldung nach der Abarbeitung im Konsolenmodus
Anwendung -e
-h Hilfe Aufrufen
Anwendung -h
-i Bezeichner für DatenAnzahl-Variable festlegen
Anwendung -i <Variablenbezeichner>
-l Auswahl der Sprache. Funktioniert über den Index
0, 'C Array'
1, 'BasCom Dezimal'
2, 'BasCom Hex'
3, 'BasCom Bin'
4, 'IntelHex'
5, 'Raw'
6, 'Delphi Pascal'
Anwendung -l <Index>
-n Bezeichner des Arrays
Anwendung -n <Arraybezeichner>
-o Offset ab welchem Byte in der Quelldatei gelesen wird
Anwendung -o <Wert>
-s Quelldatei
Anwendung -s <Pfad\Dateiname>
-w Werte werden als Word (16bit) eingelesen
Anwendung -w

Beispiel:
hex2data.exe -s test.wav -d test.hex -o 0 -l 4 -a 14



sast

Edit: Attachment wie immer in ver(schlimm)besserter Variante etwas weiter hinten im Thread

sast
04.09.2009, 17:23
Es gibt noch einen Fehler bei bestimmten Konstellationen in der letzten Zeile.
Da werde ich mich nächste Woche drum kümmern. Jetzt ist erst mal Wochenende und da ist die Familie mal wieder dran.

Wenn wer noch ein Feedback für mich hat bis dahin, wäre nicht schlecht

sast

sast
07.09.2009, 09:17
So nun die Variante ohne diesen Fehler.

sast