ich bin ganz schön fertig. Der Vorschlag von AVRnix brachte das gleiche Ergebnis wie vorher. Die Goto Variante ist bis jetzt die Einzige, welche die Befehle ohne Probleme an das Modul weitergibt. Aber warum? Den geänderten Code Häng ich nochmal an. Ist wie Verhext. Kann eventuell jemand mal Gucken, ob es im Ablauf des Programms irgendwas gibt, woraus man Schließen könnte, dass das Programm Blödsinn macht? Muss ich vielleicht die Abfolge ändern, wenn ja, wie? Ich Sehe eigentlich keine wirklichen Probleme (Ich seh sowieso kaum was.HiHi) Hier also der Code:
[code]
$regfile = "m8def.dat" ' ATMEga8
$crystal = 8000000 ' 16Mhz extern, FuseBits= High = 0xD1, Low = 0xDF ' 8MHz extern, FuseBits= High = , Low =
$baud = 9600 ' Baudrate
$hwstack = 64 ' default use 32 for the hardware stack
$swstack = 20 ' default use 10 for the SW stack
$framesize = 80
'
'---- fuer Taster kompletter Port C als Eingänge -----------
Config Portc = Input
'---- Alle Taster-Eingänge auf "H" -------------------------
Portc = &B00111111
'---- Variable ---------------------------------------------
'---- Test -------------------------------------------------
Dim S As String * 9 At &H70
Dim B(11) As Byte At &H70 Overlay
Dim N As Word 'Byte
Dim RTS as Byte
Dim CTS as Byte
'---- Test Voreinstellungen --------------------------------
RTS = 1
CTS = 0
'---- Festtext ---------------------------------------------
Cls 'Lösche Display
Locate 2 , 3
Lcd " Klaus - VMUSIC2 "
Locate 3 , 3
Lcd " USB MP3 Player "
Wait 2
Cls
'---- Eingang Serieller Daten ------------------------------
'Sreg.7 = 1
Set Sreg.7
On Urxc Onrxd
Enable Urxc
'---- Deklariere Unterprogramme ----------------------------
Declare Sub Play_one
Declare Sub Stopp
Declare Sub Pause
Declare Sub Track
Declare Sub Random
Declare Sub Play_All
'---- Hauptprogramm ----------------------------------------
Do
If Pinc.0 = 0 Then call Play_one
If Pinc.1 = 0 Then call Stopp
If Pinc.2 = 0 Then call Pause
If Pinc.3 = 0 Then call Track
If Pinc.4 = 0 Then call Random
If Pinc.5 = 0 Then call Play_All
locate 1 , 1
lcd "" ; N ; "" ; S
Loop
end
'---- Unterprogramme ----------------------------------------
Onrxd:
Incr N
B(n) = Udr
Return
Sub Play_one
Print "vpf Lorelei.mp3" ; Chr(13)
Waitms 20
Cls
locate 1 , 1
lcd S
Locate 4 , 5
Lcd "Play one"
End Sub
Sub Stopp
Print "vst" ; Chr(13)
Waitms 20
Cls
Locate 4 , 5
Lcd "Stop"
End Sub
Sub Pause
Print "vp" ; Chr(13)
Waitms 20
Cls
Locate 4 , 5
Lcd "Pause"
End Sub
Sub Track
Print "vsf" ; Chr(13)
Waitms 20
Cls
Locate 4 , 5
Lcd "Next"
locate 1 , 1
lcd S
End Sub
Sub Random
Print "vrr" ; Chr(13)
Waitms 20
Cls
Locate 4 , 5
Lcd "Play Random"
locate 1 , 1
lcd S
End Sub
Sub Play_All
Print "v3a" ; Chr(13)
Waitms 20
Cls
Locate 4 , 5
Lcd "Play all"
locate 1 , 1
lcd S
End Sub
Also ich bin ein wenig verwundert das mit goto sub aufgerufen werden können.
Was sagte Walter Giller:" immer Locker vom Hocker oder es bleibt schwierig"
Es muss ja ein Grund geben dafür.
Frage:
1. Du benutzt ein Quarz ( Wieviel MHz ) am ATMEGA 8 der auch die entsprechende Fuse eingestellt ist? Kannst du prüfen ob der Quarz schwingt (Osziloskop)?
Oder geht das nur über den internen RC Oszilator im ATMega8
Ich weis es nicht genau aber wird bei Print nicht ein CR + LF mitgesendet?
ggf mit HTERM überprüfen ob die Kommunikation klappt man sieht auch welche Sonderzeichen ( CR + LF ) empfangen oder gesendet werden.
Ich schätze mal das mit der Kommunikation nicht so ganz was stimmt.
Es muss ja ein Grund geben - Wir brauchen Fakten Fakten Fakten.
ALso mal Auzeichen wie es klappt und dann mit dem ATMega.
Bei Unterschied haste den Fehler
Zur Kommunikation von und zu dem Modul kann ich keine Aussage machen da ich das nicht habe.
Es könnte sein das du keine ASCII empfängst sondern Bytes.
Onrxd:
Incr N
B(n) = Udr
Return
Und wo werden bei dir:
'---- Handshake Signale RTS/CTS ----------------------------
Config Pind.3 = Input
Portd.2 = 1
Config Pind.2 = Output
PortD.3 = 1
RTS ,CTS überprüft bzw brauchst du das wirklich ?
Weil Tx und Rx sollten reichen , aber das weiss ich nicht.
Steht das ihrgendwo das du das benutzen must?
im Haupprogramm mal print "Empfang: ASCII "; chr(B(n)) ;" HEX: "; hex (b(n)) ; "
Hallo Klaus und auch AVRNix,
ich finde auch, dass die Sache in den Griff zu bekommen sein MUSS.
Zuerst einmal würde ich die Ansprechbarkeit des VMUSIC2 mithilfe des Terminalprogramms testen und dabei möglichst viele verschiedene Kommandos ausprobieren.
Dann würde ich den Atmega einmal ggf. verschiedenen EINZELNE Kommandos in Richtung Sprachbaustein senden lassen und gucken, ob diese ordnungsgemäß ausgeführt werden.
Wenn er das nicht tut, dann würde ich den ATMEGA in Richtung PC mit aktiviertem Terminalprogramm senden lassen und wieder gucken, was dort ankommt und ob dabei z.B. auch die Datenrate 9600bps stimmt. Wie auch AVRNix schon geschrieben hat, würde dabei besonders auch interessant sein, was an den jeweiligen Zeilenenden ( <CR><LF> ) passiert. Dazu kann die HEX-Darstellmöglichkeit des Terminalprogrammes sinnvoll genutzt werden. Nach m.W. braucht der VMUSIC2 zur Befehlsauslösung immer NUR ein <CR> bzw. Chr(13) oder auch Chr(&H1D), aber auch noch ein zusätzliches <LF> bzw. Chr(10) oder Chr(&H1A) dürfte nicht stören. Ob es Probleme macht, wenn das <LF> z.B. vor dem <CR> steht, vermag ich derzeit nicht zu sagen.
Wenn das erst einmal mit den Einzelbefehlen klappt, dann kann man immer noch dazu übergehen, das Programm dahingehend zu erweitern, dass auch die einzelnen Tasten abgefragt werden und es sollte mit dem Deibel zugehen, wenn dann nicht auch ( wie schon in unzählligen Fällen bei anderen Programmen realisiert ) die Unterprogrammaufrufe in den Griff zu bekommen sein sollten.
ich hab mit meinem Terminal Programm zwei Log-File's Gespeichert und versuch mal die hier Anzuhängen. Man kann eigentlich gut die Abfolge Erkennen. Schaut euch das mal an. Was die Leitungen RTS und CTS betrifft, normaler Weise braucht man die Leitungen eigentlich nicht. Was die Anweisung <CR> und <LF> betrifft, hab ich die mal ins Programm Aufgenommen, mal vor mal hinter <CR>. Das brachte keine Veränderung. Ich hab versucht, meine Unterlagen hier anzuhängen aber die Datei ist zu groß. Könnte euch die Unterlagen als e-Mail zukommen zu lassen. Würde vielleicht Helfen das Ganze zu Verstehen. In den Unterlagen wird so Einiges (Was ich leider nicht richtig verstehe, mangels ausreichender Englischkenntnisse.) Beschrieben betreffend z.B. auch der RTS und CTS Leitungen.
Gruß
Klaus
PS: in dem Anhang "Anweisungen Aus AVR" ist gut zu Erkennen, das jedesmal wenn ich eine Taste gedrückt habe, ein Programm-Reset ausgeführt wird. Denn die Anweisung "vsv 0" darf eigentlich nur nach dem Start des Programms ausgeführt werden. Warum auch immer?
Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2010 18:58 von Veryoldman.
Mir sagt die Ausgabe nichts, ich weis nicht was gesendet wurde und was empfangen wurde.
Das ist eine Ausgabe von Hyberterm nicht mit HTerm ? Macht das mal mit Hterm mit Print " Ausgabe von"; Varibel_String_name in Bascom oder sowas die Sonderzeichen müssen auch erkennbar sein deswegen HTERM Programm Link siehe oben.
im zweiten Fall findet das Teil frn Befehl nicht. USB ist Laufwerk d: ?
OK, ich hab mir das HTerm Heruntergeladen. Kenn ich zwar noch nicht aber ich Häng das Modul und den AVR mal dran. Das Terminal-Programm, welches ich hier verwende, ist nicht Hyper-Terminal. Das USB Laufwerk ist D:/. So hab ich das jedenfalls verstanden. OK, ich werde das Ganze jetzt ausprobieren und hier wieder Posten. Wenn Du die anderen Unterlagen auch noch haben möchtest (ca. 1,5 MB) dann sag Bescheid, ich Schick sie Dir dann per Mail.
hab mir das HTerm mal angeschaut und werd das heute mal Anschliessen. Die Befehlsfolge ist auch klar. Was die Musik angeht, die ich so höre, geht das von Klassik bis Hartrock. Ich werd mal versuchen, die Unterlagen in ein entsprechendes Format zu bringen, damit die Datei nicht allzu groß wird. Entscheidend ist ja eigentlich nur die Befehlsliste und was mit dem Teil alles möglich ist. Da die Unterlagen in Word verfasst sind, müsste es ohne Probleme funktionieren. Hab mir gestern abend den Code nochmal Angeschaut und versucht was zu ändern, damit nicht jedesmal, wenn ich eine Taste Drücke ein Softreset ausgelöst wird. Hab die Goto Anweisungen in Call geändert. Zumindest Springt das Programm jetzt nicht immer ganz an den Anfang.
Gruß
Klaus
PS: Mein Alter, na ja, ich bin Bj. 50 und schon Rentner.
Also mit Softreset ohne es zu wollen ist meist ein Stacküberlauf bzw. da die Rücksprungadresse überschrieben wird rennt der AVR bis zum Speicherende und dann beginnt er von vorne.
Die Sub wird aufgerufen und durch da es keine Rücksprungadresse gibt läuft das Programm bis zum Ende bzw. zur anderen Sub die ja dahinter ist, es werden jeweils 32 Byte auf den Stack gelegt und nie abgeholt.
Doc können nur gezippt hochgeladen werden.
Also lass mal das call stehen.
Das Problem was ich hier sehe ist die Kommunikation. Den Ablauf wie GPSKlaus sagte ist wichtig. Was wird gesendet was empfangen.
Gebe auch die Werte von der Varibale von
Dim S As String * 9 At &H70
Dim B(11) As Byte At &H70 Overlay