PropellerSignalGenerator (alt SIDCOG)

Allgemeine Themen rund um den Propeller Mikrocontroller und Elektronik
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

PropellerSignalGenerator (alt SIDCOG)

Beitrag 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.
Zuletzt geändert von PIC18F2550 am Mi 31. Mai 2017, 05:41, insgesamt 1-mal geändert.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: SIDCOG

Beitrag 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)
Dateianhänge
PropellerSignalGeneratorV1_2_2.zip
(5.03 KiB) 458-mal heruntergeladen
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: SIDCOG

Beitrag 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)
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: SIDCOG

Beitrag 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?
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: SIDCOG

Beitrag von PIC18F2550 »

ersetz mal die 32 durch 33 da müsste das signal von p0 auf p1 wandern.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: SIDCOG

Beitrag 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!
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: PropellerSignalGenerator (alt SIDCOG)

Beitrag von PIC18F2550 »

Probier mal das psg.start(8, 33, 34).

Mit was hast Du Übersetzt?
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: PropellerSignalGenerator (alt SIDCOG)

Beitrag 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.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: PropellerSignalGenerator (alt SIDCOG)

Beitrag 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?
Dateianhänge
CTRA.jpg
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: PropellerSignalGenerator (alt SIDCOG)

Beitrag 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***
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Antworten