Hey thanks a lot for the help. I will look for the P2PASM.
Martin
I'm pretty sure the ROM could be compiled by any of the assemblers available for P2 -- PNut, fastspin, or p2asm. With PNut you might need the most recent version (32j).
Um, help me understand why you perform clkset() inside the demo object. Why? I don't recall this in spin 1. You set the clock settings in the top spin file and never had to set it again.
Thanks,
Terry
Yes, for P1 you do not need a clkset. For P2 we do, because (at the moment) there's no implicit clkset() in the startup routine. clkset() is a lot heavier weight in P2 (it requires waiting for a pretty significant period of time (10 milliseconds or so). So I didn't want to make this hidden from the user. It's still only needs to be done once, in the top spin file.
We're also still figuring out what the best clock settings are for P2, so again, it's probably nice not to hide that detail from users.
All of the tools are still under active development. The P2 is not (at this early stage) a beginner friendly platform. As the tools mature that will change!
I haven't tried it but not only should the leds blink but with the 20ms delay there should be a rippling effect as well.
The 20ms is actually closer to 80ms due to timing difference between RCFAST and 80MHz FPGA (same with the 20 ms)
BTW - I haven't got a P2-ES board but I could hook up some leds on my P2D2 and video it.
Breakdown of that code:
56 - push 56 onto the stack
8 - push 8 onto the stack
ADO - take two values from the stack ( start=56 count=8 ) andsetloopfor effectively 8 times starting with I = 56
I - leave current index value on stack
PIN - use value from stack toselect a pin
4
ms - delay for milliseconds specified
LOOP - increment index until start+count is reached elsecontinuetoloop back to code following ADO
( implicit EXITorreturn )
Hi Peter,
I had to adapt the code, since TAQOZ was freezing. Since pins 62 and 63 are problematic in that respect, I had to change the code to:
566 ADO I PIN 4 HZ 20 ms LOOP
Anyway, it is a nice effect. Is there any TAQOZ way to exercise the cogs?
I've loaded up an SD card with the .BIX file provided in the start of this thread, but I can't get the program to boot. I can see the contents of the SD card under TAQOZ, using the "DIR" command. I'm using the original dipswitch configuration (BOD=1, FLASH=0, P59UP=0, P59DN=0).
This is the TAQOZ1V1 SD BOOT image you should use for the P2-ES board.
The Introduction to TAQOZ has links for these at the start of the document as well as the P2 LINKs sticky thread.
BTW - if you want to load up another cog with TAQOZ use NEWCOG and then you can get it to run like this (ROM version):
(This is my terminal copy&paste, as is including typos etc, and I use ^X to reexecute the previous command on some lines)
TAQOZ# 1 NEWCOG ok
TAQOZ# ok
TAQOZ# long counter ok
TAQOZ# : COUNT_TASK BEGIN counter ++ AGAIN ; ok
TAQOZ#' COUNT_TASK 1 RUN ??? ok
TAQOZ# ' COUNT_TASK 1 TASK W! ok
TAQOZ# counter @ . -38590398 ok
TAQOZ# -38516446 ok
TAQOZ# -38467762 ok
TAQOZ# -38415683 ok
TAQOZ# -38277814 ok
TAQOZ# 0 counter ! ok
TAQOZ# counter @ . 179222 ok
TAQOZ# 239858 ok
TAQOZ# 315675 ok
So after loading cog 1 with a copy of TAQOZ it sits in an IDLE loop looking for a "job" and when the vector is non-zero it will load this and start executing from there. Each cog has an entry in the task table with the job vector being the first 16-bits. Once a job is started and unless it exits back to IDLE it won't execute other jobs. However you can always override the cog with NEWCOG at anytime.
I've copied the file into the SD card, but still doesn't load. The TAQOZ version is the same. Am I missing a step?
Update: Confirmed that loading only from the SD card fails. P59DN switch was set to 1. No TAQOZ v1.1 in sight. The card may have an issue with the formatting, or something.
I've copied the file into the SD card, but still doesn't load. The TAQOZ version is the same. Am I missing a step?
Update: Confirmed that loading only from the SD card fails. P59DN switch was set to 1. No TAQOZ v1.1 in sight. The card may have an issue with the formatting, or something.
Kind regards, Samuel Lourenço
Ok, finally solved. Had to reformat the SD card using the "SD Card Formatter" application for Windows, then copied "_BOOT_P2.BIX" again and then, under Linux, deleted the "System Volume Information" via terminal. This way I made sude I only had that file to boot.
I downloaded the "_BOOT_P2.BIX" for the sd card. How do I access it. Would someone give me some example code please.
Thanks
Just copy the file to an empty SD Card, and reset with the switches off (you can leave BOD on). Make sure your card is well formatted. If you need to reformat, don't use the OS format application: use an application specific for SD cards and compliant with the specs.
I think it was deleted long filenames caused a boot problem. Or might have been any long filenames first caused it. I never tried again so have forgotten the detail.
I reformatted the sd card and copied it over. What switches are you talking about?? what is BOD? I am assuming that I can call this as a subroutine so I can print to the Serial Terminal??
Thanks
I reformatted the sd card and copied it over. What switches are you talking about?? what is BOD? I am assuming that I can call this as a subroutine so I can print to the Serial Terminal??
Thanks
I reformatted the sd card and copied it over. What switches are you talking about?? what is BOD? I am assuming that I can call this as a subroutine so I can print to the Serial Terminal??
Thanks
I reformatted the sd card and copied it over. What switches are you talking about?? what is BOD? I am assuming that I can call this as a subroutine so I can print to the Serial Terminal??
Thanks
Are you using the P2-ES board? Or the FPGA? On the ES board, you'll have four DIP switches: The first one says BOD (Brown Out Detection). The first you can leave on, the others should be in the off position.
If you load the new TAQOZ from the SD card, it should appear right at the start, after a reset, without having to do the "> ESC" combination.
Samuel,
I am using the ES board. Switches are BOD on and the others are off.
Give this a try. Fire up PST, (Parallax Serial Terminal). Power up the ES Board with the SD with TAQOZ loaded. Connect to to COM port in PST. (Make sure Enable PST if it is blinking). Wait one minute, then hit the reset button on the ES board. That should bring up the TAQOS prompt.
Sometimes I have to toggle DTR in PST,(on then off), then a reset to get the SD to load. May just be my board.
Samuel,
I am using the ES board. Switches are BOD on and the others are off.
Give this a try. Fire up PST, (Parallax Serial Terminal). Power up the ES Board with the SD with TAQOZ loaded. Connect to to COM port in PST. (Make sure Enable PST if it is blinking). Wait one minute, then hit the reset button on the ES board. That should bring up the TAQOS prompt.
Sometimes I have to toggle DTR in PST,(on then off), then a reset to get the SD to load. May just be my board.
Strangely I need to do this when using TeraTerm, with the v2.0 image loaded. It used to work right of the bat.
{{
////////////////////////////////////////////////////////////////////////////////////////////
// stenzel_pink_noise.spin2
// Pink noise generation using the "new shade of pink" algorithm by Stenzel:
// http://stenzel.waldorfmusic.de/post/pink/
// https://github.com/Stenzel/newshadeofpink
// Author: Mark Tillotson
// Updated: 2019-01-28
// Designed For: P2X8C4M64PES
// Version: 1.0
// Provides Start
// Functions:
// PUB Start (dest, scale)
// dest points to a long to which pink noise samples are written every 512 clock cycles
// scale is a non-negative left shift count used to scale up the results from their natural range
}}
CON
OSCMODE = $010c3f04
FREQ = 160_000_000
BAUD = 2*115200
PERIOD = $200' can be interrogated by client of this object, clocks per iteration
POWER = 16
DACpin = 48
dither_dac = %0000_0000_000_10100_00000000_01_00010_0OBJ
ser: "SmartSerial.spin2"PUB Demo
clkset (OSCMODE, FREQ)
ser.start (63, 62, 0, BAUD)
ser.str (string ("Stanzel pink noise generator"))
ser.tx (13)
ser.tx (10)
pausems(1000)
table_addr := @firtable
cognew (@asm_entry)
DAT{ --------------------- main setup and loop with waitct1 --------------------- }ORG0
asm_entry movPTRB, table_addr ' copy tables to LUTrammov t, #0REP @.done, #128rdlong accum, PTRB++
WRLUT accum, t
add t, #1
.done
wrpin ##dither_dac, #DACpin
getct time
mov resul, #0
.loop
addct1 time, #80WAITCT1wypin resul, #DACpin
call #stenzel
sar resul, #4add resul, dac_offset
jmp #.loop
stenzel
' get bit mask from counter's lowest 1 and bit reversing'add counter, #1'and counter, maskincmod counter, mask
mov bitmask, counter
neg t, counter
and bitmask, t ' find lowest set bit in counterrev bitmask
shr bitmask, #32-POWER ' reverse so highest bit changes most rapidlygetrnd rand_sample
testb rand_sample, #12wcandn dec, bitmask
mov t, inc
and t, bitmask
or dec, t
if_cxor inc, bitmask
add accum, inc
sub accum, dec
mov resul, accum
mov t, rand_sample ' lookup lower bits 5:0and t, #$3Frdlut t, t
add resul, t
mov t, rand_sample ' lookup next bits 11:6shr t, #6and t, #$3Fadd t, #$40rdlut t, t
add resul, t
stenzel_ret ret
table_addr long @firtable
scale_shift long0
inc long$CCCC
dec long$CCCC
accum long0
dac_offset long$8000
counter long0
mask long$FFFF
bitmask res1
t res1
time res1
resul res1
rand_sample res1FIT$1F0
firtable long -45437long32588long -34782long43243long -45292long32733long -34638long43387long -43768long34257long -33113long44912long -43623long34402long -32968long45057long -45537long32488long -34882long43143long -45392long32633long -34737long43288long -43867long34158long -33212long44813long -43723long34302long -33068long44957long -44957long33068long -34302long43723long -44813long33212long -34158long43867long -43288long34737long -32633long45392long -43143long34882long -32488long45537long -45057long32968long -34402long43623long -44912long33113long -34257long43768long -43387long34638long -32733long45292long -43243long34782long -32588long45437
highpart
long -231long -115long66long182long -333long -217long -36long80long -180long -64long117long233long -282long -166long14long131long -263long -147long34long150long -365long -249long -68long48long -212long -96long85long201long -314long -198long -17long99long -99long17long198long314long -201long -85long96long212long -48long68long249long365long -150long -34long147long263long -131long -14long166long282long -233long -117long64long180long -80long36long217long333long -182long -66long115long231{{
////////////////////////////////////////////////////////////////////////////////////////////
// TERMS OF USE: MIT License
////////////////////////////////////////////////////////////////////////////////////////////
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
////////////////////////////////////////////////////////////////////////////////////////////
}}
The 1/f nature of the output as displayed on spectrum analyzer on log-log scale (Bode plot):
Mark_T how did you imbed the above image into the text area??
Also I have not been able to access _BOOT_P2.BIX via the sd card. Can someone walk me through it. I am assuming that I will be able to access the PST terminal using the P2asm code. Would someone give me a simple example of doing that. Something like just printing a variable. If you look at my simple tutorial using pasm from spin I would like to start simple.
Thanks.
I am using Spin2Gui from @ersmith and that uses a terminal provided by the loader, I guess.
But it is a all in one solution, you can write PASM2, SPIN2, BASIC and some C code with the same IDE. All gets compiled down to PASM2 (and you can look at the result) and can be started using the build in terminal. No need for PST.
As far as I understand _BOOT_P2.BIX is just any loadable binary named like that and saved to SD. It should then start. Try the newer rom version of TAQOZ @"Peter Jakacki" has in his drop-box. If you save the file as _BOOT_P2.BIX in the root of the SD it should start without changing any jumpers on the EVVAL board.
Then create your own binary using PNUT/spin2gui/spinedit and do the same...
Comments
I'm pretty sure the ROM could be compiled by any of the assemblers available for P2 -- PNut, fastspin, or p2asm. With PNut you might need the most recent version (32j).
Yes, for P1 you do not need a clkset. For P2 we do, because (at the moment) there's no implicit clkset() in the startup routine. clkset() is a lot heavier weight in P2 (it requires waiting for a pretty significant period of time (10 milliseconds or so). So I didn't want to make this hidden from the user. It's still only needs to be done once, in the top spin file.
We're also still figuring out what the best clock settings are for P2, so again, it's probably nice not to hide that detail from users.
All of the tools are still under active development. The P2 is not (at this early stage) a beginner friendly platform. As the tools mature that will change!
Thanks, I got it going. Now going to play. If I run into any other snags I will let you know.
Appreciate it.
Thanks
I had to adapt the code, since TAQOZ was freezing. Since pins 62 and 63 are problematic in that respect, I had to change the code to:
56 6 ADO I PIN 4 HZ 20 ms LOOP
Anyway, it is a nice effect. Is there any TAQOZ way to exercise the cogs?Kind regards, Samuel Lourenço
I've loaded up an SD card with the .BIX file provided in the start of this thread, but I can't get the program to boot. I can see the contents of the SD card under TAQOZ, using the "DIR" command. I'm using the original dipswitch configuration (BOD=1, FLASH=0, P59UP=0, P59DN=0).
Kind regards, Samuel Lourenço
The Introduction to TAQOZ has links for these at the start of the document as well as the P2 LINKs sticky thread.
BTW - if you want to load up another cog with TAQOZ use NEWCOG and then you can get it to run like this (ROM version):
(This is my terminal copy&paste, as is including typos etc, and I use ^X to reexecute the previous command on some lines)
TAQOZ# 1 NEWCOG ok TAQOZ# ok TAQOZ# long counter ok TAQOZ# : COUNT_TASK BEGIN counter ++ AGAIN ; ok TAQOZ# ' COUNT_TASK 1 RUN ??? ok TAQOZ# ' COUNT_TASK 1 TASK W! ok TAQOZ# counter @ . -38590398 ok TAQOZ# -38516446 ok TAQOZ# -38467762 ok TAQOZ# -38415683 ok TAQOZ# -38277814 ok TAQOZ# 0 counter ! ok TAQOZ# counter @ . 179222 ok TAQOZ# 239858 ok TAQOZ# 315675 ok
So after loading cog 1 with a copy of TAQOZ it sits in an IDLE loop looking for a "job" and when the vector is non-zero it will load this and start executing from there. Each cog has an entry in the task table with the job vector being the first 16-bits. Once a job is started and unless it exits back to IDLE it won't execute other jobs. However you can always override the cog with NEWCOG at anytime.I've copied the file into the SD card, but still doesn't load. The TAQOZ version is the same. Am I missing a step?
Update: Confirmed that loading only from the SD card fails. P59DN switch was set to 1. No TAQOZ v1.1 in sight. The card may have an issue with the formatting, or something.
Kind regards, Samuel Lourenço
I downloaded the "_BOOT_P2.BIX" for the sd card. How do I access it. Would someone give me some example code please.
Thanks
Just copy the file to an empty SD Card, and reset with the switches off (you can leave BOD on). Make sure your card is well formatted. If you need to reformat, don't use the OS format application: use an application specific for SD cards and compliant with the specs.
Kind regards, Samuel Lourenço
Thanks
"BOD" Brown Out Detection
Referring to this document:
https://docs.google.com/document/d/1gIKAfx5slcwjrAvHnbn5VNReY2SbQxtYkgO8cIzjyyY/edit#heading=h.6frgvwkw4djo
Page 3 picture shows the Mode Selection Switch Bank.
Page 9 shows the Boot Mode Selections.
If you load the new TAQOZ from the SD card, it should appear right at the start, after a reset, without having to do the "> ESC" combination.
Kind regards, Samuel Lourenço
I am using the ES board. Switches are BOD on and the others are off.
I am using the ES board. Switches are BOD on and the others are off.
Give this a try. Fire up PST, (Parallax Serial Terminal). Power up the ES Board with the SD with TAQOZ loaded. Connect to to COM port in PST. (Make sure Enable PST if it is blinking). Wait one minute, then hit the reset button on the ES board. That should bring up the TAQOS prompt.
Sometimes I have to toggle DTR in PST,(on then off), then a reset to get the SD to load. May just be my board.
Kind regards, Samuel Lourenço
The xoro32 generator provides the random bits, the output goes to a DAC pin in 16 bit dither mode.
Stenzel's really cunning pink noise method can be studied here: stenzel.waldorfmusic.de/post/pink/ and here: https://github.com/Stenzel/newshadeofpink
{{ //////////////////////////////////////////////////////////////////////////////////////////// // stenzel_pink_noise.spin2 // Pink noise generation using the "new shade of pink" algorithm by Stenzel: // http://stenzel.waldorfmusic.de/post/pink/ // https://github.com/Stenzel/newshadeofpink // Author: Mark Tillotson // Updated: 2019-01-28 // Designed For: P2X8C4M64PES // Version: 1.0 // Provides Start // Functions: // PUB Start (dest, scale) // dest points to a long to which pink noise samples are written every 512 clock cycles // scale is a non-negative left shift count used to scale up the results from their natural range }} CON OSCMODE = $010c3f04 FREQ = 160_000_000 BAUD = 2*115200 PERIOD = $200 ' can be interrogated by client of this object, clocks per iteration POWER = 16 DACpin = 48 dither_dac = %0000_0000_000_10100_00000000_01_00010_0 OBJ ser: "SmartSerial.spin2" PUB Demo clkset (OSCMODE, FREQ) ser.start (63, 62, 0, BAUD) ser.str (string ("Stanzel pink noise generator")) ser.tx (13) ser.tx (10) pausems(1000) table_addr := @firtable cognew (@asm_entry) DAT { --------------------- main setup and loop with waitct1 --------------------- } ORG 0 asm_entry mov PTRB, table_addr ' copy tables to LUTram mov t, #0 REP @.done, #128 rdlong accum, PTRB++ WRLUT accum, t add t, #1 .done wrpin ##dither_dac, #DACpin getct time mov resul, #0 .loop addct1 time, #80 WAITCT1 wypin resul, #DACpin call #stenzel sar resul, #4 add resul, dac_offset jmp #.loop stenzel ' get bit mask from counter's lowest 1 and bit reversing 'add counter, #1 'and counter, mask incmod counter, mask mov bitmask, counter neg t, counter and bitmask, t ' find lowest set bit in counter rev bitmask shr bitmask, #32-POWER ' reverse so highest bit changes most rapidly getrnd rand_sample testb rand_sample, #12 wc andn dec, bitmask mov t, inc and t, bitmask or dec, t if_c xor inc, bitmask add accum, inc sub accum, dec mov resul, accum mov t, rand_sample ' lookup lower bits 5:0 and t, #$3F rdlut t, t add resul, t mov t, rand_sample ' lookup next bits 11:6 shr t, #6 and t, #$3F add t, #$40 rdlut t, t add resul, t stenzel_ret ret table_addr long @firtable scale_shift long 0 inc long $CCCC dec long $CCCC accum long 0 dac_offset long $8000 counter long 0 mask long $FFFF bitmask res 1 t res 1 time res 1 resul res 1 rand_sample res 1 FIT $1F0 firtable long -45437 long 32588 long -34782 long 43243 long -45292 long 32733 long -34638 long 43387 long -43768 long 34257 long -33113 long 44912 long -43623 long 34402 long -32968 long 45057 long -45537 long 32488 long -34882 long 43143 long -45392 long 32633 long -34737 long 43288 long -43867 long 34158 long -33212 long 44813 long -43723 long 34302 long -33068 long 44957 long -44957 long 33068 long -34302 long 43723 long -44813 long 33212 long -34158 long 43867 long -43288 long 34737 long -32633 long 45392 long -43143 long 34882 long -32488 long 45537 long -45057 long 32968 long -34402 long 43623 long -44912 long 33113 long -34257 long 43768 long -43387 long 34638 long -32733 long 45292 long -43243 long 34782 long -32588 long 45437 highpart long -231 long -115 long 66 long 182 long -333 long -217 long -36 long 80 long -180 long -64 long 117 long 233 long -282 long -166 long 14 long 131 long -263 long -147 long 34 long 150 long -365 long -249 long -68 long 48 long -212 long -96 long 85 long 201 long -314 long -198 long -17 long 99 long -99 long 17 long 198 long 314 long -201 long -85 long 96 long 212 long -48 long 68 long 249 long 365 long -150 long -34 long 147 long 263 long -131 long -14 long 166 long 282 long -233 long -117 long 64 long 180 long -80 long 36 long 217 long 333 long -182 long -66 long 115 long 231 {{ //////////////////////////////////////////////////////////////////////////////////////////// // TERMS OF USE: MIT License //////////////////////////////////////////////////////////////////////////////////////////// // Permission is hereby granted, free of charge, to any person obtaining a copy of this // software and associated documentation files (the "Software"), to deal in the Software // without restriction, including without limitation the rights to use, copy, modify, merge, // publish, distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or // substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. //////////////////////////////////////////////////////////////////////////////////////////// }}
The 1/f nature of the output as displayed on spectrum analyzer on log-log scale (Bode plot):
Also I have not been able to access _BOOT_P2.BIX via the sd card. Can someone walk me through it. I am assuming that I will be able to access the PST terminal using the P2asm code. Would someone give me a simple example of doing that. Something like just printing a variable. If you look at my simple tutorial using pasm from spin I would like to start simple.
Thanks.
http://forums.parallax.com/discussion/169380/pasm-tutorial#latest
But it is a all in one solution, you can write PASM2, SPIN2, BASIC and some C code with the same IDE. All gets compiled down to PASM2 (and you can look at the result) and can be started using the build in terminal. No need for PST.
As far as I understand _BOOT_P2.BIX is just any loadable binary named like that and saved to SD. It should then start. Try the newer rom version of TAQOZ @"Peter Jakacki" has in his drop-box. If you save the file as _BOOT_P2.BIX in the root of the SD it should start without changing any jumpers on the EVVAL board.
Then create your own binary using PNUT/spin2gui/spinedit and do the same...
Enjoy!
Mike
With the image icon as normal. I'm hosting the image, its not in the forum.