Forum: Mikrocontroller und Digitale Elektronik Wie kann man den YM7128B richtig ansteuern


von Alex N. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich hab ein kleines Problem mit einer Ansteuerung bei einem YM7128B in 
Assembler. Der AVR ist ein ATMEGA168. Der YM7128B hat eine ziemlich 
bescheidene Ansteuerung und komme nicht drauf wie ich das am einfachsten 
anstelle. Das untere Beispiel funktioniert nicht, obwohl es bei vielen 
ähnlichen Bausteinen anwendbar ist.

Ich hoffe man kann hier einen Anhaltspunkt geben. Der YM7128B ist doch 
ein nettes Bauteil für Audioanwendungen.

Bis dann!

1
;-----------------------------------------------------------------------------
2
;
3
; Die Ausgabe im Schieberegister in das Ausgaberegister übernehmen
4
;
5
; Dazu am RCK Eingang am Schieberegister einen 0-1-0 Puls erzeugen
6
;
7
SchiebeOut:
8
    sbi   SCHIEBE_PORT, RCK
9
  rcall YMWARTE
10
    cbi   SCHIEBE_PORT, RCK
11
    ret
12
13
14
15
;-----------------------------------------------------------------------------
16
;
17
; Die Ausgabe im Delay übernehmen
18
;
19
; Dazu am DELD Eingang auf H legen, später wieder auf L.
20
;
21
DelayIn:
22
    sbi   SCHIEBE_PORT, DELD
23
  rcall YMWARTE
24
    ret 
25
26
27
28
DelayOut:
29
30
    cbi   SCHIEBE_PORT, DELD
31
  rcall YMWARTE
32
    ret 
33
34
35
36
;-----------------------------------------------------------------------------
37
;
38
; 8 Bits aus temp1 an das Schieberegister ausgeben
39
Schiebe:
40
    push  temp2
41
    ldi   temp2, 8             ; 8 Bits müssen ausgegeben werden
42
 
43
44
45
Schiebe_1:
46
     ;
47
     ; jeweils das höchstwertige Bit aus temp1 ins Carry-Flag schieben
48
     ; Je nach Zustand des Carry-Flags wird die Datenleitung entsprechend
49
     ; gesetzt oder gelöscht
50
     ;
51
    rol  temp1                 ; MSB -> Carry
52
    brcs Schiebe_One           ; Carry gesetzt? -> weiter bei Schiebe_One
53
    cbi  SCHIEBE_PORT, SIN     ; Eine 0 ausgeben
54
    rjmp Schiebe_Clock         ; und Sprung zur Clock Puls Generierung
55
56
57
58
Schiebe_One:
59
    sbi  SCHIEBE_PORT, SIN     ; Eine 1 ausgeben
60
 
61
     ;
62
     ; einen Impuls an SCK zur Übernahme des Bits nachschieben
63
     ;
64
65
66
67
Schiebe_Clock:
68
    sbi   SCHIEBE_PORT, SCK    ; Clock-Ausgang auf 1 ...
69
  rcall YMWARTE
70
    cbi   SCHIEBE_PORT, SCK    ; und wieder zurück auf 0
71
  rcall YMWARTE
72
 
73
    dec   temp2                ; Anzahl der ausgegebenen Bits runterzählen
74
    brne  Schiebe_1            ; Wenn noch keine 8 Bits ausgegeben -> Schleife bilden
75
 
76
    pop   temp2
77
    ret
78
79
80
YMWARTE:
81
;Delay-Steuerfrequenz
82
          ldi  temp1, $9D
83
YM00:     dec  temp1
84
          brne YM00
85
          nop

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.