PDA

Επιστροφή στο Forum : Προγραμματισμος EEPROM με VB



billtech
07-02-11, 16:28
παιδια ξερει κανεις πως μπορω να προγραμματισω EEPROM μεσα απο την VB ενα wav αρχειο??
ή
πως μπορω να μετατρεψω σε hex ενα wav για να το περασω σε EEPROM?
απο το wav να απομωνοσω μονο τον ηχο. τα header και αυτα να φυγουν....

ξερει κανεις πως μπορω να κανω ενα απο τα 2?

klik
07-02-11, 17:11
Τι μορφές αρχείων παίρνει ο programmer σου για τις eeprom;

Να ένα πρόγραμμα (http://www.keil.com/download/docs/113.asp) που μετατρέπει ένα binary αρχείο σε intel hex format.
Μπορείς να του ζητήσεις να παρακάμψει τα πρώτα bytes (header) αν θες.



Syntax: BIN2HEX [/option] binfile [hexfile]

binfile is the binary input file
hexfile is the Intel HEX file to create

option may be any of the following

/Ln Bytes to read from binary file
/In Binary file starting offset
/On Output file address offset (where HEX data starts)
/M Merge data into existing HEX file
/2 Generate HEX file using ext. segment address records (HEX86)
/4 Generate HEX file using ext. linear address records (HEX386)
/Q Quiet mode (no statistics are displayed)
/T Exclude EOF record
/A Append to end of existing HEX file

Να και το τι περιέχει το intel hex format (http://pages.interlog.com/~speff/usefulinfo/Hexfrmt.pdf), αν θέλεις να κάνεις μόνος σου πρόγραμμα για μετατροπή

billtech
07-02-11, 18:38
εχω κανει αυτο εδω τον προγραμματιστη:
http://www.hlektronika.gr/forum/showthread.php?t=36287

εγω στη ουσια τι θελω να κανω? να περασω μεσα σε μια EEPROM ενα wav αρχειο. αρα δεν με ενδιαφερει το header ονοματα ή οτιδηποτε αλλο.

klik
07-02-11, 18:57
Μια χαρά παίζει τότε, μετέτρεψε σε hex το WAV και γράψτο σε 24cxx. Πρέπει να βγάλεις το header πρώτα (ή αν ξέρεις το μέγεθος του header, χρησιμοποιείς την παράμετρο /In). Δεν χρειάζεται να χρησιμοποιήσεις άλλες παραμέτρους.

billtech
07-02-11, 20:11
και κατι αλλο...ξερεις τι εχει μεσα ενα wav αρχειο? δηλαδη εχει το header..την πληροφορια(ηχος)..εχει τπτ αλλο που δεν χρειαζομαι?

klik
07-02-11, 20:51
με μια πρόχειρη ματιά:
http://www.ringthis.com/dev/wave_format.htm
όλη η σαβούρα είναι στην αρχή...

να και μερικές αναπαραστάσεις αρχείων με σχόλια
http://efreedom.com/Question/1-4207326/Parse-WAV-File-Header

GeorgeVita
07-02-11, 22:16
... τι έχει μέσα ένα wav αρχείο; Δηλαδή έχει το header, την πληροφορία (ήχος), έχει τίποτε άλλο που δεν χρειάζομαι;
Γειά σου Βασίλη, φαντάζομαι θέλεις να γράψεις το wav στη μνήμη και μετά με σάρωση των διευθύνσεων της μνήμης να οδηγείς τα data σε D/A για αναπαραγωγή του ήχου. Διαβάζοντας τα links του klik νομίζω ότι αν γράψεις το wav ως μονοφωνικό, 8 bits, σε συγκεκριμένο ρυθμό δειγματοληψίας και 'κόψεις' 40-50 bytes στην αρχή, θα είναι εντάξει. Ακόμη και να μείνουν ή χαθούν λίγα bytes πληροφορίας θα είναι μια πολύ μικρή αρχική ή ενδιάμεση παραμόρφωση.

-------
klik έχεις να προτείνεις κάποιο πρόγραμμα σε linux (ubuntu) που να βλέπει τα αρχεία σε μορφή 'debug' (διεύθυνση:data:chr)

Edit: κάτι κάνει η εντολή od
od -x test.wav > test_wav.txt
-------

G

billtech
07-02-11, 22:28
ναι. να τα γραψω πανω σε μνημη με 8kHz συχνοτητα δειγματοληψιας και μετα να παω με τον επεξεργαστη να τα διαβαζω με αυτη τη συχνοτητα και να τα κανω ξανα ηχο.

αλλα το bin2hex δεν το καταφερα. και κατι αλλο . με ενα hex editor ανοιξα ενα wav αρχειο και ειδα το χαος που εχει μεσα.
που ξερω που σταματα η πληροφορια?εχει ενα τεραστιο πινακα.

klik
07-02-11, 22:40
..
klik έχεις να προτείνεις κάποιο πρόγραμμα σε linux (ubuntu) που να βλέπει τα αρχεία σε μορφή 'debug' (διεύθυνση:data:chr);

G
υποθέτω θα έχει πολλά στο internet, αλλά πάρε ένα από τα πρώτα (ίσως και το πρώτο μου) πρόγραμμα πριν πολλάααα χρόνια. Κάντο compile με το cc στο linux και μετονόμασε το παραγόμενο αρχείο a.out σε ότι όνομα θες να έχει (εγώ το είχα ονομάσει dump).



/* dump.c
*/

#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <ctype.h>

#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif

int DumpTextOnly = FALSE;
unsigned REC_SIZE = 16;

long dump_hex(unsigned char *buffer,long address,int length){
register int i;
long checksum = 0L;

do {
// print label line
if(address % (REC_SIZE<<3) == 0){register int i;
printf("\n%8c",' ');
if(!DumpTextOnly){
for(i=0;i<REC_SIZE;i++)
printf("%2x %s",i%16,((i&0xf)==7||(i&0xf)==0xf)?"- ":"");
printf("| ");
}
for(i=0;i<REC_SIZE;i++)
printf("%01x",i % 16);
putchar('\n');
}

// print address (position in file)
printf("%06lX ",address); /* print starting buffer */

// print hexadecimal values
if(!DumpTextOnly){
for(i=0;i<REC_SIZE;i++){ /* print hexadecimal dump */
printf((i<length)?"%02x ":" ",(unsigned char)buffer[i]);
if((i&0xf)==7||(i&0xf)==0xf) printf("- ");
}
printf("| ");
}

// print ascii values
for(i=0;i<length && i<REC_SIZE;i++){/* print ascii dump - add to checksum*/
putchar(buffer[i]<' ' || buffer[i]==255?'.':buffer[i]);
checksum += buffer[i];
}
putchar('\n');

length -= REC_SIZE;
address += REC_SIZE;
buffer += REC_SIZE;

} while(length>0);

return checksum;
}

main(int argc,char **argv){
int fd,status;
long fileptr,checksum;
unsigned char filebuf[BUFSIZ];
long (*dumpf)(unsigned char *,long,int) = dump_hex;

while(--argc>0){

switch((*++argv)[0]){

case '-':
case '/':
switch(tolower((*argv)[1])){
// case 'c':
// dumpf = dump_c_like;
// break;
case 't':
DumpTextOnly = TRUE;
if(REC_SIZE==16)
REC_SIZE = 64;
break;
case 'w':
REC_SIZE = atoi((*argv)+2);
if(REC_SIZE < 1)
REC_SIZE=1;
if(REC_SIZE > 1 && REC_SIZE % 2)
REC_SIZE = ((REC_SIZE + 4) / 4) * 4;
break;
default:
fprintf(stderr,
"Unknown option %s\n"
"\t-wn: use n columnes (default=16)\n"
// "\t-c : use C format for output\n"
"\t-t : dump only text(ascii)\n"
,*argv
);
break;
}
break;

default:
if((fd=open(*argv,O_RDONLY|O_BINARY))>0){
checksum = fileptr = 0l;
printf("\n`%s` file processing ...\n",*argv);
while((status=read(fd,filebuf,sizeof filebuf))!=0)
checksum += (*dumpf)(filebuf,fileptr,status),
fileptr += status;
if(!isatty(fileno(stdout)))
//isatty() doesnot work in msdos 6.0
fprintf(stderr,"File=`%s` FileSize=%lu CheckSum=%08lx\n",*argv,fileptr,checksum);
printf("File=`%s` FileSize=%lu CheckSum=%08lx\n",*argv,fileptr,checksum);
close(fd);
}else
perror(*argv);
}
}
return 0;
}

billtech
07-02-11, 22:44
τι ειναι αυτο ρε παιδια?

klik
07-02-11, 22:46
Αυτό είναι για να βλέπεις το hex, αν δεν έχεις άλλο πρόγραμμα.

klik
07-02-11, 22:50
αλλα το bin2hex δεν το καταφερα. και κατι αλλο . με ενα hex editor ανοιξα ενα wav αρχειο και ειδα το χαος που εχει μεσα.
που ξερω που σταματα η πληροφορια?εχει ενα τεραστιο πινακα.
Όπως σου είπε ο GeorgeVita να το κάνεις μονοφωνικό με παραμέτρους που σε βολεύουν εσένα και με το hex editor ψάξε τη λέξη data

παράδειγμα από το αρχείο \WINDOWS\MEDIA\START.WAV




`start.wav` file processing ...

0 1 2 3 4 5 6 7 - 8 9 a b c d e f - | 0123456789abcdef
000000 52 49 46 46 a0 04 00 00 - 57 41 56 45 66 6d 74 20 - | RIFF*...WAVEfmt
000010 32 00 00 00 02 00 02 00 - 22 56 00 00 27 57 00 00 - | 2......."V..'W..
000020 00 04 04 00 20 00 f4 03 - 07 00 00 01 00 00 00 02 - | .... .τ.........
000030 00 ff 00 00 00 00 c0 00 - 40 00 f0 00 00 00 cc 01 - | ......ΐ.@.π...Μ.
000040 30 ff 88 01 18 ff 66 61 - 63 74 04 00 00 00 a7 02 - | 0.ˆ...fact....§.
000050 00 00 64 61 74 61 00 04 - 00 00 02 02 28 00 37 00 - | ..data......(.7.
000060 89 ff 6f 01 3d 01 76 00 - 4e 64 05 bf 1c c2 0b 70 - | ‰.o.=.v.Nd.Ώ.Β.p
000070 37 80 78 e7 fd 50 d4 eb - 2f 22 71 f4 ed fd 4e 16 - | 7€xηύPΤλ/"qτνύN.

0 1 2 3 4 5 6 7 - 8 9 a b c d e f - | 0123456789abcdef
000080 f0 0f d0 4d 34 c1 fc 20 - 22 f1 cf 0d 20 42 e4 ed - | π.ΠM4Αό "ρΟ. Bδν
000090 2e 02 00 21 02 2f 92 08 - 00 f0 00 00 20 f2 0f 10 - | ...!./’..π.. ς..
0000A0 01 50 24 f1 fe ef 0d 00 - 00 f0 1e 03 f0 6f 27 e1 - | .P$ρώο...π..πo'α
0000B0 0e 30 e4 de 0f e0 3f 82 - e8 5f 04 10 11 f1 0f 00 - | .0δή.ΰ?‚θ_...ρ..

GeorgeVita
07-02-11, 23:01
Εφτιαξα ένα αρχείο με τόνο 100Hz για 1 sec (με το audacity), μονοφωνικό, 16bit PCM και δείχνει μιά συμμετρία μετά τα πρώτα bytes. Βέβαια το 16bit PCM κάτι κάνει με το πρόσημο (high bit) αλλά νομίζω έτσι μπορεί να γίνει.


0000000 4952 4646 3ea4 0000 4157 4556 6d66 2074
0000020 0010 0000 0001 0001 1f40 0000 3e80 0000
0000040 0002 0010 6164 6174 3e80 0000 ffff 0a0f
0000060 1401 1de5 278d 30fa 3a1f 42df 4b3f 531f
0000100 5a83 6155 678d 6d26 7209 7645 79b9 7c78
0000120 7e6d 7f9a 7ffe 7f9e 7e66 7c7e 79b5 7647
0000140 720b 6d23 678f 6153 5a83 5323 4b3b 42e2
0000160 3a1c 30fb 2790 1ddf 1408 0a0a 0001 f5f5
0000200 ebf8 e221 d871 cf05 c5e4 bd1c b4c6 acde
0000220 a57d 9ead 986f 92df 8df3 89bc 8648 8384
0000240 8198 8064 8000 8067 8193 8388 8648 89b9
0000260 8df6 92dd 9872 9eaa a580 acda b4c9 bd1a
0000300 c5e7 cf01 d875 e21c ebfb f5f6 fffd 0a0e
0000320 1404 1de3 278d 30fc 3a1c 42e2 4b3b 5324
0000340 5a7e 615a 6789 6d27 720a 7645 79b8 7c7a
0000360 7e6b 7f9b 7fff 7f9b 7e6b 7c78 79ba 7645
0000400 720a 6d25 678c 6156 5a81 5324 4b3a 42e3
0000420 3a1b 30fc 278e 1de4 1400 0a13 fff7 f5fe
0000440 ebf2 e225 d86e cf06 c5e3 bd1e b4c5 acde

Τα αρχεία είναι στο συνημμένο (F100Hz.wav & F100Hz.txt)

>>> Ξέρεις τι ωραίο είναι να βάλεις τα data σε γρήγορο μC και να "μιλάει" σαρώνοντας την εσωτερική Flash (single chip); Ιδανικό αν ο μC έχει DMA.

G

billtech
08-02-11, 00:02
μα μυνηματα θελω να βαλω μεσα στην eeprom και να τα διαβαζω με συγκεκριμενη συχνοτητα και να τα παιζω με επεξεργαστη.

το data το βρησκω. απο εκει και μετα ειναι η πληροφορια μου?ολο το υπολοιπο?

billtech
10-02-11, 12:51
δηλαδη με δυο λογια.
κανω ενα wav με 8MHz συχνοτητα δειγματοληψιας.ΜΟΝΟ οχι στερεο.
και με ενα hex editor ανοιγω το wav και ψαχνω την λεξη data. απο εκει και μετα κραταω το αρχειο και ολα τα προηγουμενα μαζι με το data τα σβηνω.
τα περναω στην μνημη και μετα με εναν επεξεργαστη παω και διαβαζω ενα ενα τα byte απο την μνημη και τα παιζω στη εξοδο.
σωστα?

GeorgeVita
10-02-11, 12:59
Δειγματοληψία 8 KHz και αν έχεις επιλογή εγγραφή στα 8 bits. Συνήθως έχουν 16 ή 24 bits οπότε τα data είναι διπλά ή 3πλά bytes. Αν είναι έτσι χρειάζεσαι ένα μικρό πρόγραμμα για επιλογή των bytes που σου κάνουν. Θέλει επίσης προσοχή στα όρια έντασης (volume level). Αν είναι 16bits πρέπει να διαλέξεις τα 8 bits που έχουν τη σωστότερη πληροφορία (ίσως με shifting).
G

billtech
10-02-11, 13:55
αυτο με τα ορια της εντασης που λες πως να το προσεξω?
απλα στην ηχογραφηση δεν πρεπει να ειναι σωστη η ηχογραφηση?
ε ναι...στα 8bit μαλλον για να χωρεσει στην eeprom.
πχ. 8KHz δειγματοληψια * 60δευτερ. ηχος = 480kBytes σωστα?

GeorgeVita
10-02-11, 14:31
Στα 8KHz/8bits για 60sec θέλεις 480.000 bytes και δεν έχεις πρόβλημα με την ένταση (αναφερόμουν στην περίπτωση εγγραφής στα 16bits και αποθήκευσης σε μνήμη 8bits).
G

billtech
10-02-11, 16:02
ωραια αμα βρω ενα προγραμμα οπως το audition(νομιζω μας κανει) να κανω την ηχογραφηση για ενα λεπτο διαρκεια με 8KHz/8bits (ελπιζω να εχει την επιλογη) και μετα με ενα hex editor να βρω το data και θα κρατησω οτι εχει απο εκει και κατω.
και να φυλαξω το hex να το περασω στη μνημη. και μετα με uC να διαβασω την μνημη και να τα στελνω σε ενα DAC. η να τα βγαζω με PWM και με ενα φιλτρο να γινετε αναλογικη η ταση?
ετσι δεν πρεπει να κανω την διαδικασια?

billtech
14-02-11, 03:07
παιδια εγραψα εναν ηχο.
απλο. με 8bits και 8kHz συχνοτητα δειγματολιψιας.
και με ενα hexeditor ανοιξα το wav και ειδα μεσα να εχει αυτο που επισυναπτο.
ολο αυτο για 5sec ηχο? το data το βρησκω. απο εκει και μετα ειναι η πληροφορια? ολο το υπολοιπο?κατι δεν μου παει καλα.

GeorgeVita
14-02-11, 07:56
Αυτό το αρχείο είναι περίπου 40000 bytes (2500 γραμμές επί 16 bytes ανά γραμμή) άρα ναι είναι για 5 δευτερόλεπτα. Το 99% των bytes είναι μεταξύ 0x7E και 0x82 άρα δεν θα ακουστεί τίποτα! Αν περιέχει ήχους, πρέπει να 'διαμορφωθούν' από 0x00 έως 0xFF για να έχει αποτέλεσμα.

edit: Δοκίμασε το συνημμένο .wav ή πάρε τα bytes από το .txt (όταν παίζει δεν καθόμαστε!)

G

billtech
14-02-11, 12:14
Το 99% των bytes είναι μεταξύ 0x7E και 0x82 άρα δεν θα ακουστεί τίποτα! Αν περιέχει ήχους, πρέπει να 'διαμορφωθούν' από 0x00 έως 0xFF για να έχει αποτέλεσμα.
αυτο το κομματι εννοεις οτι στο δικο μου wav ισχυει αυτο?
πως να τους διαμορφωσω? εγω το εχω οπως το εγραψα απο το mic.

GeorgeVita
14-02-11, 12:17
... πως να τους διαμορφώσω; Εγώ το έχω όπως το έγραψα από το mic.
Οταν το βάλεις να παίξει ακούγεται καλά; Δεν είναι πολύ χαμηλή η ένταση; Ακουσε το δικό μου wav και σύγκρινέ το.
Πρέπει κατά την εγγραφή να ρυθμίσεις την ευαισθησία μικροφώνου ή να χρησιμοποιήσεις το Line In.
G

billtech
14-02-11, 13:58
εκανα την ευαισθησια στο max κι εγραψα κατι. φενεται καλυτερο τωρα.
δηλ αμα καταλαβα καλα 0x80 ειναι τα νεκρα σημεια χωρις ηχο ε?
αλλα γενικα ο ηχος ειναι απο το Data και μετα ολο το υπολοιπο ε? ως το τελος.

GeorgeVita
14-02-11, 14:20
Το 0x80 πρέπει να είναι το σημείο ηρεμίας, δηλαδή η 'πόλωση' στη μέση της τάσης (Vcc/2) για να υπάρχουν μόνο θετικές τιμές στα data. Το 0x00 θα είναι το "αρνητικό peak" του σήματος και το 0xFF το "θετικό peak".
G