Forum: Mikrocontroller und Digitale Elektronik vs1011 bzw. vs1001 Testprogramm


von Michael (Gast)


Lesenswert?

Hallo,

ich hab den Vs1011 nach dem Schaltplan im Datenblatt aufgebaut.

Nun wollte ich ihn mit dem Programm von der Yampp Seite testen.
Doch leider passiert garnichts.
Also stell ich mir die Frage, ob die Initialisierung bzw. der
Sinustest. bei dem Vs1011 sich vom Vs1001 unterscheidet.

Kann mir jemand sagen, wie ich anderst testen kann ob mein vs1011
funktioniert. (z.b Knacken wenn Strom fließt, wobei das ja beim vs1011
nicht sein sollte, laut datenblatt)


Gruß
Michael

von Michael (Gast)


Lesenswert?

Vielleicht sollte ich noch erwähnen, dass ich den Pegelwandler durch
jeweils einen Spannungsteiler (1,8KOhm und 3,3KOhm) ersetzt habe.

von Ulrich P. (uprinz)


Lesenswert?

Hi!

Ich komme über die Suche zu Deinem Thread und kann daher nicht sehen in 
welchem Forum Du das gepostet hast. Daher sehe ich auch nicht, welchen 
Controller Du verwendest. In meinem Testaufbau nutze ich einen ATmega32 
mit internen 8MHz zusammen mit SD-Card und VS1011E auf 3.3V.

Dann kommt es darauf an, ob Du den VS im Compatibility Mode ( also mit 
BSYNC) oder im New-Mode ( mit xDCS) betreibst.

Ich nutze den New-Mode, der hervorragend funktioniert und ein paar 
Pinne, bzw Fädeldrähte spart.
Der Yampp nutzt, soweit ich weiß, den alten Modus, von dem VLSI 
inzwischen abrät. D.h. Du solltest genau nachsehen, ob Du in dem VLSI 
Datenblatt das Beispiel mit Comp-Mode oder das mit New-Mode nachgelötet 
hast.

Die Änderungen an der Software sind aber nicht sehr aufwendig:
Daten gehen, wie gehabt, über SPI raus an den VS, xDCS wird aber nicht 
bei jedem geraden Byte auf 0 gezogen, sondern während der kompletten 
Übertragung und erst danach wieder auf 1 gesetzt. xCS bleibt auf 1 
während man Daten sendet.

Für den NewMode muss man den VS1011 erst korrekt initialisieren, dazu 
findet man weitere Vorgehensweisen auch im VS10xx_AN.pdf (Application 
Notes) auf der VLSI Seite. Fast schon eine Schritt für Schritt Anleitung 
für den Aufbau und den Software-Start. Ich habe mich nach deren Weg 
gerichtet und meinen eigenen Player nahezu an einem Wochenende aufgebaut 
und initialisiert. An dem Part SD->VS arbeite ich jetzt noch.

Bitte arbeite auch die Zwischenschritte ab:
VLSI rät in der AppNote dazu die Spannung am RCAP zu messen, um 
festzustellen, ob der Analogteil korrekt aufgebaut und initialisiert 
ist. Als ich nach Stunden der Suche immer noch keinen Sinus-Test machen 
konnte, hae ich die Spannung gemessen und daran erkannt, dass im analog 
Teil meiner Fädelung ein Bug stecken musste. Ein Kanal war 
kuzgeschlossen durch einen defekt in der Klinkenbuchse. Nach beheben 
funktionierte alles wunderbar.

Gruß, Ulrich

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Der Thread ist ja erst 1 Jahr alt... ;-)

von Michael (Gast)


Lesenswert?

Hallo,

;)  Aber Danke, dass du darauf geantwortet hast...


Inzwischen bin ich schon soweit, dass der Sinustest funktioniert, die 
MMC-Karte kann ich auch schon auslesen..  nur wenn ich ne Mp3 abspiel 
kann man den Song schon vage erkennen er ruckelt "nur" sehr stark und 
scheint verzerrt zu sein...

vielleicht hast du dazu eine Lösung parrat... ;)

Hier in diesem Thread wurde mir schon sehr gut weitergeholfen mit dem 
Sinustest u.v.m.  :

Beitrag "vs1011 bzw. vs1001   Testprogramm"



THX Michael

von Pat F. (breaker87)


Lesenswert?

Vielleicht hilft euch diese Seite weiter...

Hatte auch mal vor, mir nen mp3 player zu bauen - habs aber bleiben 
lassen und mit einfacheren dingen begonnen... ;-)


lg Patrick

von Michael W. (mictronics) Benutzerseite


Lesenswert?

>> nur wenn ich ne Mp3 abspiel kann man den Song schon vage erkennen er ruckelt 
"nur" sehr stark und scheint verzerrt zu sein...

Dann überprüf mal das Handling des BSYNC und DREQ Signals. Besonderst 
BSYNC ist wichtig.
Wenn du auf DREQ nicht schnell genug Daten schickst dann gibt es 
Aussetzer im  Lied.

von Michael (Gast)


Lesenswert?

Hallo,
so hier mal meine sende-Funktion:

void spi_32 (char * data)
{
 int i = 1;
 int g = 0;
 Mp3DeselectControl();
 Mp3SelectData();

 while(g<=512)
 {
  if(i == 32 )
  {
    printf("                  wait\n");
    while (!DREQ_PIN & (1<<DREQ));
    i=1;
  }
  else
  {
           delay(10);
    spi (*data++);  // send 32 bytes
    delay(10);
    i++;
    g++;
  }
  }
 Mp3DeselectData();
}


void spi (unsigned char data)
{
  SPDR = data;
  while (!(SPSR & (1<<SPIF)));
}



An die Funktion spi_32 werden 512er Blöcke übergeben....
ich weiß einfach nicht was da los ist...
Bitte helft mir  ;)

Gruß
Michael

ps: Patrick, ich sehe deinen Link nicht...


von Michael (Gast)


Lesenswert?

ach was ich vergaß zu erwähnen..

Ich betreibe meinen Vs1011 im VS1002 Native Modes (New Mode)

von Der Albi (Gast)


Lesenswert?

1.) while(g<=512) -> while(g<512)
sonst gehts weiter, auch wenn der Pointer schon bei 512 angekommen ist 
und zählt weiter bis 544.
2.) lass das printf weg. Kann sein, dass das ungewollt sehr viel Zeit 
nimmt und du deswegen auf das sinkende DREQ nicht schnell genug 
reagierst.
3.) Man sieht nirgends die SPI-Initialisierung.. aber Systemtakt/4 + 
Clockdoubler ist minimum angeraten. Kommt drauf an, was du für eine 
Komprimierung spielst. Teste erstmal mit ner 56kBit-Datei, da ist das 
Timing erstmal vernachlässigbar. Da geht auch ein 2MHz-SPI-Takt, falls 
die Kabel zu lang sind..
4.) Warum heißt die Fuktion spi_32, wenn sie doch 512 Byte sendet?? Ist 
da vielleicht beim Funktionsaufruf ein Denkfehler, wegen dem falschen 
Namem? (kann ja sein)
5.) Mach spaßenhalber mal ein "return SPDR;" in deine SPI-Routine. Das 
muss nix bewirken, kann aber. Warum, weiß ich nicht.
6.) Taktet der Decoder schnell genug?

7.) MFG :-)

von fubu1000 (Gast)


Lesenswert?

hallo,
wenn du einen ASSembler code zum testen haben willst geb ich dir gerne 
meinen, und wenn du mir sagst an welche ports du alles angeschlossen 
hast, ändere ich den code dir gerne um, auf deine vorstellungen !!!!
noch besser du gibst mir deine Email addresse und ich helf DIR !!!!

also MIKROcontroller: ??????????????
     LCD            :????????????
     VS1011e         :ja, ich hoffe wegen NEW MODE, ansonsten auch egal
     welche ports   : wo ist was angeschlossen (wichtig!!) (ports)

und bitte einen schaltplan, falls ( will dir nix unterstellen) 
einen fehler in der hardware hast !!!!!
((((( mein SYSTEM: atmega32 , vs1002 , USART , SD-1GB , KS0108 ,,, bis 
320 KBit !!))))

BITTE fubu ;-)


von Michael (Gast)


Lesenswert?

Hallo,

Vielen Dank für die SUPER Tips...

der 1. Tip hat sofort Wunder gewirkt.....  das Lied kann man nun sehr 
gut erkennen...

-> Leider ist die Soundquali immer noch nicht berrauschend... ganz ganz 
kleine Lücken; die Frequenzen sind verzerrt..


Nun habe ich versucht den SPI Speed hochzudrehen. Das funktioniert auch 
wunderbar bei dem Vs1011... der kommt überall mit
Aber die MMC-Karte kann höchstens  16Mhz/64 verkraften, dannach kann ich 
sie nicht mehr ansteuern...

Kann das daran liegen, dass ich zwischen Atmega und MMC-Karte so ne 
Sicherheitsschaltung eingebaut habe.. (bestehend aus Transistoren und 
Widerständen)
Oder an was kann das liegen?


Also nochmals vielen Dank, das hat mich einen großen Schritt 
weitergebracht...


Gruß
Michael

von Carsten P. (papa_of_t)


Lesenswert?

Besorg Dir doch eine MP3-Datei mit sehr niedriger Bitrate. Wenn die dann 
auch mit "Lücken" spielt, liegt es nicht an der SPI-Geschwindigkeit.

Versuche es mit einer SD-statt MMC-Karte, die kann schneller :-)

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Wofür soll denn die Sicherheitsschaltung den gut sein? Pegelwandlung?
Könnte möglich sein, das die Schaltung die Signale von und zur Karte 
verfälscht.

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
im Anhang der Schaltplan zur MMC-Sicherheits-Schaltung.

Ich hab sie von der Ulrich Radig Seite...
(http://www.ulrichradig.de/site/atmel/avr_mmcsd/)
(http://www.ulrichradig.de/site/atmel/avr_mmcsd/gfx/MMC_Optimal.JPG)


Es ist ein Pegelwandler (Level-Shifter).




Gruß
Michael

von Jens (Gast)


Lesenswert?

>Besorg Dir doch eine MP3-Datei mit sehr niedriger Bitrate. Wenn die dann
>auch mit "Lücken" spielt, liegt es nicht an der SPI-Geschwindigkeit.

Die SPI-Geschwindigkeit dürft relativ wurscht sein, also 128k oder 256k 
sind doch Peanuts, kann man das SPI überhaupt langsamer konfigurieren? 
Relevant ist die Zeit, die zwischen den SPI-Transfers liegt. Ist die zu 
groß, läuft der Buffer des Decoders leer und es gibt Aussetzer.

von fubu1000 (Gast)


Lesenswert?

hallo,
schmeiss den level shifter russ und besorg dir nen IC, z.b. 74LVC245
oder nimm 1,8 und 3,3 kohm zum runterregeln der signale.
das funzt auf jeden und sollte bei ner MMC/SD mindestens 8MHZ SPI 
laufen,
und höher.

von fubu1000 (Gast)


Lesenswert?

hallo,

@jens  ------>
 der SPI takt ist net wurscht weil bei nem 256kbit MP3 muss der takt 
auch dann mindestens 256k bei dem ATMEGA eingestellt sein, momentan sind 
es bei ihm ja nur 250k --> (16mhz/64).

dazu kommt das der VS intern die daten auch noch verarbeiten muss, siehe 
DREQ also muss er noch schneller sein >256k um überhaupt genug reserven 
zu haben um auf DREQ zu warten.

ausserdem har er sicher net das ganze lied auf den MC gezogen und 
überträgt dann, sondern sicher überträgt er 512byte(je nach CMD_17) von 
der MMC zum MC und dann erst die 32byte häppchen zum VS, also schon 
minimum mehr als doppelten speed brauch er also <512k

empfehlenswert wäre es SPI net unter 1Mhz !!!

gruss

von Michael W. (mictronics) Benutzerseite


Lesenswert?

>>schmeiss den level shifter russ und besorg dir nen IC
Oder gleich AVR mit 3.3V Betriebspannung.

von fubu1000 (Gast)


Lesenswert?

jo,
oder so allerdings glaub i net das SPI mit 3,3volt mit 8mHZ SPI takt 
läuft,
gruss

von fubu1000 (Gast)


Lesenswert?

sry i glaub da brauch der AVR mehr spannung, aber egAL i bin voll wird 
scho gehen ;-), frau sagt au jau (ficken) !!!

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Was hat den die SPI Taktrate mit der Betriebspannung zu tun? Erklär 
mal...

von Jens (Gast)


Lesenswert?

LOL, da gibts halt nichts zu erklären :)

Im Datenblatt steht, was geht und was nicht. Das ist keine 
Glaubensfrage.

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Danke. Auf solch eine "qualifizierte" Antwort hatte ich natürlich 
gehofft...

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

So hallo,

ich hab die Schaltung dazwischen weggelassen... Die MMC karte wird dann 
aber garnicht erkannt.

Jetzt hab ich die Schaltung wieder "eingebaut"..


Damit ihr euch eine Meinung BILDen ;) könnt, hab ich 2 Tracks recorded 
und angehängt.
In diesem Anhang ist die 128 kbs Version..

Gruß
Michael

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hier die 32kbs version

Die sollte ja eigentlich ohne Hänger funktioniern...
Aber hier hört man irgendwie am ärgsten, dass Teile fehlen...


Gruß

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Und für die Wenigen unter euch die das Lied nicht kennen ;)

Hier das Original:  das gabs mal zum Downloaden auf der Bandseite
<- Legal

Leider nur die 32 kbs version, da das original zu groß ist



also die ersten zwei uploads sind Aufnahmen vom VS1011

der hier (der dritte) ist das original, nur auf 32 kbs 
heruntergeschraubt.



Gruß
Michael

von fubu1000 (Gast)


Lesenswert?

hallo,
der SPI takt hat was in dem sinne mit der SPannung zu tun,
das du einen avr mit 5volt auf 16mhz takten kannst, also SPI=8mhz
und wenn du nur 3,3volt hast max. takt laut datenblatt 8mhz, also 4mhz 
SPI.

alles klar mädels.

von AUK (Gast)


Angehängte Dateien:

Lesenswert?

Mahlzeit,

für anständige Pegelwandlung versuch doch mal die Schaltung im Anhang. 
Andere FETs gehen auch gut.

Gruß,
Arne

von Michael (Gast)


Lesenswert?

Hallo,
ich bin noch nicht weitergekommen....

ich hab mir jetzt immer die Daten auf dem PC speichern lassen, welche 
der uc von der mmc karte an den vs1011 schickt...

und die Daten stimmen genau mit der MP3- Datei ein....

da es sich aber so anhört, als ob was fehlen würde, wollt e ich mal 
fragen, ob es eine möglichkeit gibt sich ausgeben zu lassen was beim 
vs1011 angekommen ist...
um dann vllt. zu sehen obs da n problem gibt...


kann mir noch irgendjemand n tipp geben, was ich ausprobieren könnte....

Das beste wär natürlich ein "einfacher" c-code, bei dem MMc vs1011 und 
Atmega 32 verwendet wird....


so long...
Michael

von holger (Gast)


Lesenswert?

Eigentlich hast du alle nötigen Tips schon bekommen.
Musst du nur noch ausfiltern:

Aussetzer: SPI Speed zu langsam. Buffer vom VS läuft leer.
Wenn der leer ist kommt halt kurze Zeit nichts mehr.

Hardware verträgt nicht mehr SPI Speed: Neue bauen.
Bessere Levelshifter benutzen.

Bei 4MHz CPU- und 2MHz SPI-Takt kann ich bis zu
224kBps abspielen. Wenn du immer noch mit 250kHz
SPI Speed rummachst ist es kein Wunder das du nicht
weiter kommst.

von Gast (Gast)


Lesenswert?

Hallo,
Hab nach dem FET von AUK FDV310N gesucht hab ihn aber nirgends 
gefunden...
Kann mir einer ein vergleichbares Model nennen, welches bei Reichelt zu 
haben ist..?

Kann man da in beide Richtungen arbeiten?
Also von 3,3 nach 5 Volt, und von 5 nach 3,3 Volt (mit der gleichen 
Schaltung? Oder muss man da den FET anders einbauen, oder geht das 
garnicht?)


Vielen Dank schonmal im Vorraus

von Gast (Gast)


Lesenswert?

Hallo,
ich geb jetzt auch mal meinen Senf dazu ^^

Wie groß sind die Delays ums eigentliche Senden der Daten? Was sollen 
die überhaupt bezwecken?

gruß Gast ^^

von Michael (Gast)


Lesenswert?

So Hallo,
lange nichts mehr von mir gehört... :)


Also ich hab mich jetzt nach langer Zeit mal wieder an das Projekt 
gesetzt und siehe da, schon gleich das erste Problem gelöst:

Ich kann den SPI Takt jetzt voll ausschöpfen.


Nun passiert aber folgendes:
Wenn ich die MP3 bei vollem SPI Speed übertrage hört sich das an wie 
vorwärtsgespult...

Wenn ich die SPI Übertragungsrate so wähle, dass sie nahe an die Bitrate 
der Mp3 Datei kommt hört sich das schon ganz in Orndung an...

Was mach ich da falsch?
Ich dachte der VS1011 erkennt automatisch was für ne Bitrate vorhanden 
ist und steuert dementsprechend auch die ganze Datenzufur (Dreq...)

Hab auch schon verschiedene Register ausgelesen (HDAT0/1, Audat...)
und da kommen die richtigen Bitraten raus.


Hier mal mein Sendecode:
1
uint8_t buffer[32];
2
while(fat_read_file(fd, buffer, sizeof(buffer)) > 0) {
3
     while (!DREQ_PIN & (1<<DREQ)){}
4
     unselect_card();
5
     Mp3SelectData();
6
     for(uint16_t i = 0; i < 32; ++i)  {
7
          vs_send_byte(buffer[i]);
8
     }
9
     Mp3DeselectData();
10
     select_card();
11
}

das ganze ist natürlich schön in Roland Riegels Library eingebettet.

Wie schon erwähnt, folgendes wird verwendet:
Atmega32 mit 16MHz
Vs1011 mit 12.288MHz
clockf wird mit clock doubler initialisiert.
es wird der new_mode verwendet.




Kennt jemand das Problem?
Wer verrät mir die Lösung? :)



Grüße
Michael

von holger (Gast)


Lesenswert?

>     while (!DREQ_PIN & (1<<DREQ)){}

Da fehlen Klammern

     while (!(DREQ_PIN & (1<<DREQ))){}

von Michael (Gast)


Lesenswert?

Nice!!!!!
Das hat die Sache schonmal sehr verbessert!!!!
Merci!!!!


Natürlich gehts gleich weiter....

Wenn ich jetzt den SPI Speed auf 16MHz / 8 = 2MHz einstelle funtionierts 
eigentlich ganz gut. Es hört sich nur sehr "digital" an. So als ob die 
MP3 sehr schlecht konvertiert worden wäre.
Und die Frequenzen sind auch verzerrt.
Was könnte da falsch laufen?

Stell ich den SPI Speed auf 16MHz / 4 = 4MHz einstelle wird auch die MP3 
doppelt so schnell abgespielt. Woran könnte das liegen?
Weil nach Datenblatt soll man den SPI Takt ja auf CLKI/6 also ca. 4MHz 
einstellen...


Es grüßt wieder
Michael

von Michael (Gast)


Lesenswert?

Sodale
das ganze scheint irgendwie mit dem Kopfhörer zusammenzuhängen...

Je nachdem wie ich dran rumwackle läufts wunderbar oder halt weniger 
gut.
:) Ja es ist ein Steckboard :)  (wird sich aber hoffentlich bald 
ändern!!)


Kann mir jemand sagen, wie ich die Kopfhörer am Besten anschließe?
Hab im Inet mehrere Möglichkeiten gefunden:

http://www.mikrocontroller.net/attachment/49027/VS-Schaltung.PNG

http://members.liwest.at/dobretsb/stephan/mp3/schematic.png

Mein Vs1011 ist im SOIC-28 Gehäuse -> also kein GBUF vorhanden.


So und nochmals vielen vielen dank an Holger!!!!!!

Grüße
Michael

von Sebastian (Gast)


Lesenswert?

Wenn du den Clockdoubler verwendest musst du, nachdem du ins 
Clock-Register geschrieben hast noch ein anderes (ich glaub es war 
Audata, steht aber im Datenblatt/Appnote) beschreiben, damit der 
Clockdoubler übernommen wird. Was du reinschreibst ist glaub ich egal, 
aber du muss einen Schreibzugriff generieren.

Clock/6 ist die Obergrenze. Drunter ist alles erlaubt. Man muss halt die 
Daten rüberkriegen, aber ein kleinerer Takt ist im allgemeinen 
störsicherer.

Ich bin mir jetzt auch nicht sicher, ob Clock/6 auf den interne (also 
24,...MHz) oder den externen (also 12,...MHz) bezieht. Schau das besser 
nochmal nach.

Sebastian

von Sebastian (Gast)


Lesenswert?

Kennst du schon das:

http://www.vlsi.fi/uploads/media/vs10XXan_output_01.pdf

Hab momentan Bild 7 noch ohne Mute nachgebaut. GBUF gibts ja nicht, wenn 
ich mich recht entsinne hab mich dann auch nicht weiter drum gekümmert. 
Die Gleichanteile werden ja über die Serien-Cs gefiltert. Der sinn von 
GBUF war ja glaub ich nur, die Ausgänge DC-frei zu bekommen.


Was ich dir auch sehr empfehlen kann (falls du es noch nicht kennst:
http://www.vlsi.fi/uploads/media/vs10XXan.pdf

Sebastian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.