Seite 1 von 3
PropellerSignalGenerator (alt SIDCOG)
Verfasst: Di 30. Mai 2017, 15:25
von PIC18F2550
hallo,
wenn ich das richtig verstanden habe kann er nur ganzzahlige Frequenzen erzeugen.
Oder liege ich da falsch?
Ich breuchte bis 3 kommastellen.
a’ = 440,000 Hz und der nächst höhere währe dann a’# = 466,164 Hz.
Danke.
Re: SIDCOG
Verfasst: Di 30. Mai 2017, 16:20
von PIC18F2550
habe gerade was im parallaxischen gefunden.
Es besitzt die die Eigenschaften die ich brauche. (SINE, TRIANGLE und SQUARE)
nur suche ich nach einer Möglichkeit die Funktion setFrequencyCentiHertz(freq) noch weitere 10Hz nach unten zu verschieben. 7,5 Mhz sid mir schon viel zu viel. 15Khz würden reichen.
Code: Alles auswählen
PUB setFrequencyCentiHertz(freq)
' ┌──────────────────────────────────────────────────────────────┐
' │ Set frequency │
' ├──────────────────────────────────────────────────────────────┤
' │ freq - The frequency in centi hertz (0 Hz to 750000000 cHz) │
' └──────────────────────────────────────────────────────────────┘
frequency := freqRef / (1.000.000.000 / freq)
Ob das die Lösung ist weis ich nicht.
frequency := freqRef / (100.000.000 / freq)
Re: SIDCOG
Verfasst: Di 30. Mai 2017, 20:33
von PIC18F2550
So habe gerade ein mal das Programm getestet....
Es sind ja schon 2 Kommastellen die die Routine PUB setFrequencyCentiHertz(freq) macht.
Muss mal testen ob da noch machbar ist.
Die untere Frequenz ist 0,02Hz wie genau das ist muss ich erst ein mal nachmessen.
Aber der wert ist eh nicht relevant ich brauche erst ab 20Hz
Kleine LED Spielerei auf dem Demobord.
Code: Alles auswählen
CON
_CLKMODE = xtal1 + pll16x
_XINFREQ = 5_000_000
OBJ
psg1 : "PropellerSignalGenerator"
psg2 : "PropellerSignalGenerator"
psg3 : "PropellerSignalGenerator"
psg4 : "PropellerSignalGenerator"
psg5 : "PropellerSignalGenerator"
psg6 : "PropellerSignalGenerator"
psg7 : "PropellerSignalGenerator"
PUB main | i
'Start "Propeller Signal Generator" and output signal on pin 10
psg1.start(16, 23, 32) ' Sync pin = 32 = No pin
psg2.start(17, 32, 32) ' Sync pin = 32 = No pin
psg3.start(18, 32, 32) ' Sync pin = 32 = No pin
psg4.start(19, 32, 32) ' Sync pin = 32 = No pin
psg5.start(20, 32, 32) ' Sync pin = 32 = No pin
psg6.start(21, 32, 32) ' Sync pin = 32 = No pin
psg7.start(22, 32, 32) ' Sync pin = 32 = No pin
psg1.setParameters(psg1#SQUARE, 0, 0, psg1#PW50)
psg2.setParameters(psg1#SQUARE, 0, 0, psg1#PW50)
psg3.setParameters(psg1#SQUARE, 0, 0, psg1#PW50)
psg4.setParameters(psg1#SQUARE, 0, 0, psg1#PW50)
psg5.setParameters(psg1#SQUARE, 0, 0, psg1#PW50)
psg6.setParameters(psg1#SQUARE, 0, 0, psg1#PW50)
psg7.setParameters(psg1#SQUARE, 0, 0, psg1#PW50)
psg1.setFrequencyCentiHertz( 2)
psg2.setFrequencyCentiHertz( 4)
psg3.setFrequencyCentiHertz( 8)
psg4.setFrequencyCentiHertz( 16)
psg5.setFrequencyCentiHertz( 32)
psg6.setFrequencyCentiHertz( 64)
psg7.setFrequencyCentiHertz( 128)
Re: SIDCOG
Verfasst: Di 30. Mai 2017, 22:18
von yeti
Wenn ich...
Code: Alles auswählen
CON
_CLKMODE = xtal1+pll16x
_XINFREQ = 5_000_000
OBJ
psg : "PropellerSignalGenerator"
PUB main
psg.start(8, 32, 32)
psg.setParameters(psg#SINE, 100, 0, 0)
...in GEAR laufen lasse, sehe ich daß der PSG auch ir
GÄHNdwas mit Pin0 macht...
Beim Überfliegen der Quellen sah ich den Grund nicht, vielleicht verdaddelt sich das Programm irgendwo künstlerisch beim Bit-Shiften und Masken-Berechnen für die Pin-Masken?
Re: SIDCOG
Verfasst: Di 30. Mai 2017, 23:43
von PIC18F2550
ersetz mal die 32 durch 33 da müsste das signal von p0 auf p1 wandern.
Re: SIDCOG
Verfasst: Mi 31. Mai 2017, 02:22
von yeti
PIC18F2550 hat geschrieben:ersetz mal die 32 durch 33 da müsste das signal von p0 auf p1 wandern.
Das gewünschte Signal ist auf Pin8.
32 heißt angäblich "kein Pin".
Meine obigen Zeilen sollen nur Pin8 anfassen
***tief-lufthol*** oooder ich hab Alles irgendwie falsch verstanden. Kann ja auch sein...
Mit...
Code: Alles auswählen
CON
_CLKMODE = xtal1+pll16x
_XINFREQ = 5_000_000
OBJ
psg : "PropellerSignalGenerator"
PUB main
psg.start(8, 9, 11)
psg.setParameters(psg#SINE, 100, 0, 0)
Das erste Beispiel hatte durch Angabe von 32 als letzter Parameter "kein Synchronpin" verlangt. Jetzt ist ein solcher angegeben und Pin0 wird nimmer benutzt:
...warum bei "ohne Synchronpin" plötzlich Pin0 irgendwie ins Spiel kommt muß mir mal einer erklären, wenn ich groß bin... oder schon jetzt, aber dann bitte gaaanz schonend!
Re: PropellerSignalGenerator (alt SIDCOG)
Verfasst: Mi 31. Mai 2017, 06:10
von PIC18F2550
Probier mal das psg.start(8, 33, 34).
Mit was hast Du Übersetzt?
Re: PropellerSignalGenerator (alt SIDCOG)
Verfasst: Mi 31. Mai 2017, 06:40
von yeti
PIC18F2550 hat geschrieben:Probier mal das psg.start(8, 33, 34).
Was hat das mit der 32 denn zu bedeuten? Schau mal in "TestBench.spin"...
Code: Alles auswählen
PUB main | i
'Start "Propeller Signal Generator" and output signal on pin 10 (inverted signal on pin 11)
psg.start(10, 11, 32) ' Sync pin = 32 = No pin
Im Code des eigentlichen PSGenerators seh ich nix, wo 32 eine Sonderbehandlung auslösen würde. Ok... im Spin-Code nicht... den PASM.Code hab ich wohl noch nicht lange genug angestarrt...
PIC18F2550 hat geschrieben:Mit was hast Du Übersetzt?
OpenSpin.
Re: PropellerSignalGenerator (alt SIDCOG)
Verfasst: Mi 31. Mai 2017, 08:16
von PIC18F2550
Ich glaub dein Simulator könnte daran schuld sein.
Die Abschaltung mit größer 31 ist einfach nur ein Trick der im Simulator nicht funktioniert.
Code: Alles auswählen
regCounter := $1C000000 | outPin | (invertedPin<<9) ' in CTRA
noiseValue := $10000000 | syncPin ' in CTRB
Daher wandern deine 33 und 34 auch weiter auf pin 2 und 3.
ich wird heute abend mal auf dem Demo Bord mir das Pin 0 näher anschauen.
eventuell aus
Code: Alles auswählen
delayLine := (1<<invertedPin) | (1<<outPin) | (1<<syncPin)
das machen
Aber was ich noch wissen wollte wofür soll das Sync pin sein?
Re: PropellerSignalGenerator (alt SIDCOG)
Verfasst: Mi 31. Mai 2017, 09:59
von yeti
Das Teil entbehrt ja jeglicher Doku... daher reimte ich mir den Sync-Pin zusammen als Trigger für z.B. ein angeschlossenes Oszilloskop... aber mir der Phantasie kann ich ja auch völlig falsch liegen... vielleicht soll es auch verschiedene PSG-Instanzen gegeneinander synchronisieren?
"delayline" ist 32bittig... "1<<32" wäre dann doch sogar außerhalb des Bereiches... schrägerweis' ist dies mit "1" vorbesetzt... wird aber zum Glück in der "start"-Funktion mit dem aktuellen Wert überplättet...
Vielleicht tatsächlich mal 'n anderen Kompiler antesten?
Spääääter... ich bin noch im XXL-Dienstag und daher nimmer so wirklich konzentriert... ***hüstel***