JQ6500 ansteuern

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • JQ6500 ansteuern

      Hallo Bascom Freunde,

      ich habe bei mir einen JQ6500 zu liegen und möchte den gerne mal verwenden.
      Aber über ein Transistor kann man ja nur 5 Titel anspielen usw.
      Ich würde gerne über TX und RX ansteuern.

      Hat jemand sowas schon gemacht?
      Da tapse ich komplett im dunkeln a_19_23577ce2 , da ich sowas noch nie gemacht habe.
      Gruß
    • Falls niemand fertigen Code hat, scheint die serielle Ansteuerung hier recht gut beschrieben zu sein:
      sparks.gogo.co.nz/jq6500/serial.html
      Hast Du Dir wahrscheinlich auch schon einmal angesehen die Seite.
      Wie gesagt: Falls niemand etwas Fertiges hat.

      Dann könntest Du ja einmal Gnd mit Gnd verbinden.
      Dann Tx vom Mikrocontroller (über einen 1k-Widerstand) an Rx vom Modul:
      If you are communicating from a 5v device, it is sufficient to put a 1k resistor in series between the TX on your 5v device and the RX on the JQ6500.

      Und dann mit PRINTBIN die angegebene Folge an das Modul senden:
      1. 0x7E – Start Byte
      2. 0x02 – 2 Bytes Follow
      3. 0x0D – Command Byte
      4. 0xEF – Termination Byte


      Siehe:
      avrhelp.mcselec.com/index.html?printbin.htm
    • Dieses hatte ich noch nicht gefunden bei Google.
      Na sowas hatte ich auch schon gesucht, das wenigstens die Byte hat.
      Arduino findet man sehr viel, aber man kann dort nichts ab schauen oder ähnliches.


      PRINTBIN #channel, var [; varn] [;varn [,bytes]]
      vieleicht auch mit Koma so wie das?

      PRINTBIN ( 0x7E, 0x02 , 0x0D, 0xEF )
    • Schau dir mal im Lexikon den Beitrag zum DF-Player-Mini an.
      Für den habe ich mal eine Bibliothek entwickelt.
      Beim JQ6500 ist die Befehlsfolge IMHO ähnlich so dass man daraus ableiten kann wie der im Gegensatz zum DFPM funktioniert.

      Ich habe mal ein Ansagemodul entwickelt dass wohl mit dem anderen Modul (da gibt es mindestens zwei verschiedene ohne SD-Karte die aber alle ähnlich arbeiten).
      Da kannst du ja sehen wie das mit der seriellen Steuerung funktioniert.
      Zeitansage V1.png
      Ansagemodul V1.bas
    • Pluto25 wrote:

      Mit Semikolon,
      Ja und auch am Ende weil da sonst noch CRLF nachkommt und das mögen die Module auch wieder nicht.
      Diese Module erwarten alle einen Befehlsstring aus einer Mindestanzahl (je nach Modul sogar immer acht oder zehn Bytes je nach dem ob auch noch die CheckSum mitkommt) an Byte (welche auch Null-Bytes sein können!) wo auch im String Chr(13) und/oder Chr(10) vorkommen können!
    • Das ist ja richtig schwere kost.
      Da muss ich mich erstmal durch arbeiten.


      Aber geht das irgendwie einfacher?

      So ungefähr
      Play Lied 2
      Stop Lied 2

      So zu sagen eine Befehlszeile rüber schicken und ab spielen lassen.
    • Fast genau so geht es doch:

      „the command to play a specific file (0x012) has two arguments (folder number and file number) so it looks like this
      1. 0x7E – Start
      2. 0x04 – 4 Bytes Follow
      3. 0x12 – Command
      4. 0x02 – 1st Argument (in this case, “Folder 02”)
      5. 0x03 – 2nd Argument (in this case, “File 003”)
      6. 0xEF – Termination Byte“
      Also einmal PRINTBIN wie oben beschrieben.

      Schreib‘ doch einmal ein kleines Testprogramm, um Dich heranzutasten. Wenn es dann hakt, dann beschreibe Deine Verschaltung und poste das (kompilierbare) Programm.
    • ariel6 wrote:

      geht das irgendwie einfacher?

      ich "vermute" mal, dass Du Dich im Hauptprogramm nicht um die einzelnen Commands kümmern möchtest. Benutze in diesem Fall einfach Unterroutinen. ;)

      Für das Abspielen eines bestimmten Liedes in einem bestimmten Ordner könnte die Unterroutine z.B. so aussehen (ungetestet):

      BASCOM Source Code

      1. '(
      2. ####################################################
      3. #
      4. # Unterroutine für das Abspielen eines bestimmten
      5. # Liedes aus einem bestimmten Ordner
      6. #
      7. # Parameter:
      8. # Folder Nr. des Ordners
      9. # File Nr. des Liedes
      10. #
      11. ####################################################
      12. ')
      13. Sub Play_File_by_Folder_and_File(ByVal Folder as Byte , ByVal File as Byte)
      14. Printbin &H7E ; &H04 ; &H12 ; Folder ; File ; &HEF
      15. End Sub
      Display All



      Im Hauptprogramm müsstest Du dann nur noch die Routine aufrufen und den gewünschten Ordner sowie das gewünschte Lied als Parameter übergeben, z.B. so:


      BASCOM Source Code

      1. Call Play_File_by_Folder_and_File(2 , 3) ' Es wird das Lied Nr 3 aus dem Ordner Nr 2 gespielt
      oder so

      BASCOM Source Code

      1. Play_File_by_Folder_and_File 2 , 3 ' Es wird das Lied Nr 3 aus dem Ordner Nr 2 gespielt

      The post was edited 1 time, last by R2D2 Bastler ().

    • Danke für eure vielen Tipps.
      Ich werde es mal versuchen ob das so funktioniert.
      Bei dem Code schmeißt er keinen Fehler raus. Aber wenn ich den Attiny13 nehme kommt jedes mal eine Fehlermeldung.
      Geht das mit dem Attiny13 nicht über rx tx ?

      Source Code

      1. $regfile = "attiny2313.dat"
      2. $crystal = 8000000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. $baud = 19200
      7. Declare Sub Play_file_by_folder_and_file(byval Folder As Byte , Byval File As Byte)
      8. Taster1 Alias Pinb.0
      9. Config Taster1 = Input
      10. Portb.0 = 1
      11. Do
      12. If Taster1 = 0 Then
      13. Call Play_file_by_folder_and_file(2 , 3)
      14. End If
      15. Loop
      16. Sub Play_file_by_folder_and_file(byval Folder As Byte , Byval File As Byte)
      17. Printbin &H7E ; &H04 ; &H12 ; Folder ; File ; &HEF
      18. End Sub
      Display All
      Display Spoiler
      Display Spoiler

      Source Code

      1. $regfile = "attiny2313.dat"
      2. $crystal = 8000000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. $baud = 19200
      7. Declare Sub Play_file_by_folder_and_file(byval Folder As Byte , Byval File As Byte)
      8. Taster1 Alias Pinb.0
      9. Config Taster1 = Input
      10. Portb.0 = 1
      11. Do
      12. If Taster1 = 0 Then
      13. Call Play_file_by_folder_and_file(2 , 3)
      14. End If
      15. Loop
      16. Sub Play_file_by_folder_and_file(byval Folder As Byte , Byval File As Byte)
      17. Printbin &H7E ; &H04 ; &H12 ; Folder ; File ; &HEF
      18. End Sub
      Display All
    • Der ATtiny13 hat keinen HW-UART
      ww1.microchip.com/downloads/en/devicedoc/doc2535.pdf
      Da siehst Du beim Pinout nichts von Tx.

      Versuche es mit Software-UART.
      avrhelp.mcselec.com/index.html?uart.htm
      Unten auf der Hilfeseite.

      So etwas wie:
      open "COMB.4:9600,8,N,1" For Output As #2
      Printbib #2 , xxxx ;



      Und da ich nicht weiß, wieviel Erfahrungen Du mit BASOM hast:
      Achte darauf, dass der Wert bei $crystal dem entsprechen muss, wie schnell derATtiny13 laut Fuses tatsächlich läuft und, dass der ATtiny13 weniger Stack hat. An besten schreib erst einmal ein Programm ohne Software-UART und lass nur eine LED im Sekundentakt blinken. Dann die Software-UART-Thematik einbauen.

      Standardmäßig - also im Auslieferungszustand - läuft ein ATtiny13 mit 1,2 MHz.
      Besser für die serielle Datenübertragung ist es, wenn Du in den Fusebits den Teiler DIV 8 deaktivierst und dann Dein ATtiny13 mit 9,6 MHz läuft. Dann ist der Baudratenfehler kleiner. Ein interner Oszillator gilt sowieso als nicht so optimal für serielle Übertragungen.

      Aus dem Datenblatt des ATtiny13:
      6.2.4 Default Clock Source
      The device is shipped with CKSEL = “10”, SUT = “10”, and CKDIV8 programmed. The default
      clock source setting is therefore the Internal RC Oscillator running at 9.6 MHz
      with longest startup
      time and an initial system clock prescaling of 8.

      Default ist also ein Takt von 9,6 MHz / 8 = 1,2 MHz
      Wenn Du nichts an den Fuses gemacht hast, läuft Dein Attiny13 also mit 1,2 MHz und Du musst auch $Crystal = 1200000 schreiben.
      Wenn Du den ATtiny13 mir 9,6 MHz laufen lassen möchtest - was den Baudratenfehler rechnerisch etwas kleiner macht - dann musst Du entsprechend in den Fusebits den Teiler durch 8 deaktivieren und dann darfst/musst Du auch $Crystal = 9600000 schreiben.


      Program - Send to Chip - Manual Program - Lock and Fuse bits - Divide Clock by 8
      bzw.
      Programmieren - zum Chip senden - Manuell programmieren - Lock and Fuse bits - Divide Clock by 8Fusebits.jpg
    • Guck Dir mittelfristig auch einmal den DEBOUNCE-Befehl von BASCOM an.
      avrhelp.mcselec.com/index.html?debounce.htm
      Es ist sicherlich nicht gut, den Befehl tausendfach hintereinander an das Soundmodul zu senden, solange der Taster gedrückt ist. Mit DEBOUNCE wird der Tasterzustand abgefragt. Wenn der Taster gedrückt wird, dann wird das Kommando einmal ausgeführt und vor der erneuten Aussendung muss der Taster zunächst einmal wieder losgelassen worden sein. Auch Tastenprellen wird mit DEBOUNCE durch eine kleine Wartezeit abgefangen. (Daher der Name DEBOUNCE)

      Wichtig ist bei serieller Übertragung übrigens immer, dass mit genau der Geschwindigkeit gesendet wird, wie es der Empfänger (hier das Soundmodul) erwartet. Man muss also immer im Datenblatt oder bei den technischen Daten oder in funktionierenden Beispielprogrammen nachsehen, welche Übertragungsgeschwindigkeit vom Empfänger erwartet wird. Genau das muss man dann auch beim Sender einstellen.

      Lies Dir bei Gelegenheit auch einmal den Lexikoneintrag bezüglich Stack durch:
      Speicheraufbau
    • Danke für deine Nette Hilfe. :) :)

      Programmiert habe ich schon mit habe ich mit Debounce auch schon mit Sub usw.
      Im Ganzem? Schieberegister, ADC, Servo, Lcd, Leds, also Normale Sachen.
      So wie dieses habe ich noch nie gemacht, da stehe ich komplett im Dunkeln. =O
      Leider ist mein Englisch auch sehr schlecht, da wir dieses früher nicht hatten.
      Leider nur Russisch

      Bascom kenne ich ein wenig, Komplett noch nicht. Die Daten schiebe ich nicht über Bascom rüber.
      Sonder mit Mk2 und MyAVR ProgTool dort steht was mit Divide Clock by 8.
      Da habe ich das Häkchen raus genommen.


      Dieses verstehe ich jetzt nicht ganz?
      Printbib #2 , xxxx ;


      Den Rest schau ich mir mal an, Danki