mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ist der Chip kaputt oder mache ich was falsches?


Autor: Luca Bertoncello (lucabert)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Leute!

Immer für mein Projekt, mit dem ich seit lange euch nerve...

Ich weiß nicht, ob ich was falsches mache, oder ob einfach der VS1011e 
"mülltonnenbereit" ist

Wenn ich den Wecker einschalte, lese ich die Lautstärke von einer 
Konfigurationsdatei auf der SD-Karte und schicke den Wert dem VS1011e.
Nur sehr selten ist diese Lautstärke richtig. Fast immer ist es entweder 
zu laut oder zu leise.
Auch wenn ich später die Lautstärke ändern, der Wert X ist fast nie die 
gleiche Lautstärke.
Auf gutem Deutsch: es gibt keine echte Korrespondenz zwischen den Wert, 
den ich dem VS1011e schicke, und die Lautstärke des Signals, das vom 
Lautsprecher kommt.

Zweites Problem: das Signal kommt NUR von einem Kanal, manchmal der 
rechte, manchmal der linke.
Eine Änderung der Lautstärke hat oft als Folge, daß das Signal von dem 
anderen Kanal zu hören ist (aber nicht mehr von dem vorigen).

Ich bezweifel, daß ich was falsches vom Programm mache, denn ich die 
Lautstärke nur so ändern:
  vsClearChipSelect();
  _delay_ms(10);
  spiWriteByte(VS1001_WRITE);
  _delay_ms(10);
  spiWriteByte(SCIREGISTER_VOLUME);
  _delay_ms(10);
  spiWriteByte(volume);
  _delay_ms(10);
  spiWriteByte(volume);
  _delay_ms(10);
  vsSetChipSelect();
  _delay_ms(100);

volume ist ein uint8_t und SCIREGISTER_VOLUME ist 0x0B. Alles wie in der 
Dokumentation geschrieben.

Eure Meinung?

Danke
Luca Bertoncello

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Volume  muss ein uint16_t sein, wobei die oberen 18 Bit den einen und 
die unteren den anderen Kanal setzen. Siehe Seite 28 des Datenblatts.

Gruß
Tom

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Burkhart schrieb:

> Volume  muss ein uint16_t sein, wobei die oberen 18 Bit den einen und
> die unteren den anderen Kanal setzen. Siehe Seite 28 des Datenblatts.

Das ist klar, aber über SPI kann ich nur 8 Bits schicken (mindestens bei 
dem HW-SPI).
Deswegen, wie du siehst, schicke ich ZWEIMAL die gleiche Lautstärke.
Also, der VS1011e bekommt 16 Bits.

Grüße
Luca

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal das Delay dazwischen rausgelassen?

wieso kannst Du kein 16Bit SPI senden?

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Burkhart schrieb:
> Schon mal das Delay dazwischen rausgelassen?

Ja, keine Änderung!

> wieso kannst Du kein 16Bit SPI senden?

Na, SPDR ist ein 8-Bit-Register, oder?
Jedenfalls, meine Funktion spiWriteByte ist wie folgendes definiert:
/**
 * Schickt ein Byte über SPI
 *
 * @param uint8_t byte        der Byte zu schicken
 */
#define spiWriteByte(__byte)      { SPDR = __byte; _delay_us(10); loop_until_bit_is_set(SPSR, SPIF); }

Ist es falsch?

Danke
Luca Bertoncello

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt hast recht, ich war grad beim STM32

Ich nehme den VS1011, da sieht mein Code so aus um ein Commando zu 
senden:


    PORTB &= ~(1 << VSCS);

    SPDR = 0x2; //write command
    while(!(SPSR & (1<<SPIF)));

    SPDR = reg;
    while(!(SPSR & (1<<SPIF)));

    SPDR = (uint8_t) (value >> 8);
    while(!(SPSR & (1<<SPIF)));

    SPDR = (uint8_t) value;
    while(!(SPSR & (1<<SPIF)));



    PORTB  |= (1 << VSCS);

Also ziemlich ähnlich.

Keine Anhnung was es sonst sein könnte.

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Burkhart schrieb:

> Ich nehme den VS1011, da sieht mein Code so aus um ein Commando zu
> senden:
...
> Also ziemlich ähnlich.

Ich würde sagen, daß bis zu der 10µS Pause vor dem while der Code gleich 
ist...

> Keine Anhnung was es sonst sein könnte.

Also, konnte es sein, daß der Chip kaputt ist?
Das Problem mit der Lautstärke habe ich eigenltlich immer gehabt, das 
Problem daß das Signal nur von einem Lautsprecher weiß ich nicht...
Bei der Entwicklung habe ich nur einen kleinen Lautsprecher an einem 
Kanal angeschloßen...

Grüße
Luca Bertoncello

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ich noch mache ist, dass ich am Anfang das SREG sichere und per 
cli() alle IRQs abschalte. Könnte ja sein, dass die FAT Lib sonst 
dazwischen funkt.

Gruß
Tom

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Burkhart schrieb:
> Was ich noch mache ist, dass ich am Anfang das SREG sichere und per
> cli() alle IRQs abschalte. Könnte ja sein, dass die FAT Lib sonst
> dazwischen funkt.

Ugh?!?
Wenn du die Interrupts abschaltest, wie kann dann SPI funktionieren?
Ich dachte, man braucht die Interrupts, oder?

Jedenfalls, die Änderung der Lautstärke wird gemacht wenn die 
FAT-Library NICHT im Betrieb ist.

Grüße
Luca Bertoncello

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nee, wieso sollte man die IRQs brauchen, wenn Du das ready bit pollst?
Tom

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Burkhart schrieb:
> Nee, wieso sollte man die IRQs brauchen, wenn Du das ready bit pollst?
> Tom

Dann habe ich die Dokumentation falsch verstanden...
Ich dachte, man brauch den Interrupts um den Clock zu generieren...

Ich werde was probieren!

Danke
Luca Bertoncello

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.