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 irGÄHNdwas mit Pin0 macht...
20170530-211440-GMT.png
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:
20170531-011631-GMT.png
...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).
20170531-053537-GMT.png
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

Code: Alles auswählen

delayLine  := (1<<invertedPin) | (1<<outPin)

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***