Peter,
Thanks, The OFF word is perfect with one minor adjustment and that is I will change OUTSET to OUTCLEAR. The system is designed with NC relay contacts so in the event of a failure on the MCU side of things, the HVAC will function normally. This system, when active, will interrupt the COOL thermostat line (%011,%0101) when I wish a unit to not run.
Hopefully will get the system tested today on the QS board. Next project will be completing my WX station which has languished in a drawer for several years. I will use SPI to read from AS4055 for wind direction, Counters in detect mode for the rain gage and wind velocity. The Parallax Altimeter module for barometric pressure and eventually one of the newer Senseron chips for temp and RH.
Jim
From the way you were controlling the relays it looked like they were active low to turn on which is why I used an OUTSET to turn them all off. One thing I did forget was that when a linked timer times out and calls the alarm is that you need to reload the timer again. You can add 60000 hvactmr TIMEOUT like this:
I wanted to see how far I could push my hardware, so I replaced the 12.5MHz crystal with a 16MHz one, for sysfreq of 128MHz. EXTEND loaded no problem. I put Peter's fibo program into an infinite loop in 4 cores to see how things went. The system seems stable, prop is very slightly warm to the touch.
lap time of fibo(46) is 40 us.
One possible bug: I set baud = 1152000 (note the extra zero), but found that I had to set the baudrate in minicom to 1000000.
I'd try to go higher but I think my 3.3V regulator is probably near its limit of 100mA...if I do a new board revision at some stage I'll put in a beefier one.
Most regulators do at least 250ma but it sounds like you used an old part. I normally use MCP1700s in SOT89 but I am changing over to AZ1117CR-3.3TRG1 which can handle 1A in an SOT89. Of course the limiting factor is really the power dissipation.
I used an LT1761-3.3, which is a SOT-23-5. So it's more about footprint power dissipation than age. The LT1761 is a nice low-noise regulator I've used in a number of commercial projects. I've socketted the Prop and actually stuck the regulator underneath, as close to both pairs of supply pins as is physically possible. 100mA is plenty for a non-overclocked Prop
@ CtlAltDel: what about xpos,xneg,ypos,yneg long ? just a hint. its Tachyon
@Peter: we have used the new EASYFILE and it works like expected. Now we have to load ASM routines. First: lsroms showed no entry with freshly installed tachyon. After pasting "SAVEROM the UART HEX" lsroms showed different entries. It turned out that early entries appeared again. So we did an C100 2000 00 EFILL to erase a part of higher 32 kB and lsroms showed empty ROM, a next SAVEROM showed the expected result: only one entry.
@ CtlAltDel: what about xpos,xneg,ypos,yneg long ? just a hint. its Tachyon
@Peter: we have used the new EASYFILE and it works like expected. Now we have to load ASM routines. First: lsroms showed no entry with freshly installed tachyon. After pasting "SAVEROM the UART HEX" lsroms showed different entries. It turned out that early entries appeared again. So we did an C100 2000 00 EFILL to erase a part of higher 32 kB and lsroms showed empty ROM, a next SAVEROM showed the expected result: only one entry.
Next hurdle: how to create the INTEL HEX file?
Have a look in the ROMS folder and there is the corresponding .spin file with the ROM header. Use "Compile and save binary" and then (using UART.spin) run bh.py like this:
python bh.py --binaries=0,UART.binary
That way you end up with UART.hex
BTW - Comma separated names were implemented in V3 and I just kept in simple in V4 and V5 although I could implement it again if need be. For now just:
long xpos
long xneg
long ypos
long yneg
But you should be able to chain these on the same line too:
long xpos long xneg long ypos long yneg
NOTE: If anyone wants to implement extra features in Tachyon I would be more than happy.
Hi Peter, I have a question that is not about Tachyon.
But you are using the W5500 I need a Ethernet interface. What data rate can be achieved with this chip? There will only be one other partner on the net so no congestion. I would need an average data rate of 1MBit/s. Can this be done with a prop and a W5500?
Thank you for any info.
Any pitfalls to take care of when doing a layout?
BTW - Comma separated names were implemented in V3 and I just kept in simple in V4 and V5 although I could implement it again if need be. For now just:
long xpos
long xneg
long ypos
long yneg
But you should be able to chain these on the same line too:
long xpos long xneg long ypos long yneg
NOTE: If anyone wants to implement extra features in Tachyon I would be more than happy.
Before reading your post I just had a look in the TACHYON.spin source
to see the 'Comma separated names' are not there any more.
Good to read the source every now and then anyhow ;-).
I think this is a seldom used feature and not worth blowing up the kernel.
either separate lines for readability
or all in one if you want it compact ... all fine
Just as an encouragement for others to reading the source:
Look for long in the internal dictionary in TACHYON.spin
byte 4+im,"long"
word @VLONG+s
then search for VLONG
VLONG word _1
VLONGS word _4,@VALIGN+s,@GRAB+s,_SHL2,@AVAR+t
no code to handle the ',' comma.
Just puts 1 on the stack and calls 'longs' ...
then you can follow on what AVAR is really doing etc. ...
and after a while you get a much more in depth feeling for
"TACHYON under the hood"
Hi Peter, I have a question that is not about Tachyon.
But you are using the W5500 I need a Ethernet interface. What data rate can be achieved with this chip? There will only be one other partner on the net so no congestion. I would need an average data rate of 1MBit/s. Can this be done with a prop and a W5500?
Thank you for any info.
Any pitfalls to take care of when doing a layout?
If you are transferring large blocks then you can hit 245kBytes/sec for 4k blocks but if you want to go faster then we would access the W5500 via another cog which might even be optimized for high-speed SPI but at least can continue to run at maximum throughput. My IoT5500 modules are already designed to drop in onto a PCB with a footprint that is practically no larger than the RJ45 socket itself although I will have to get another run of these done sometime.
Hi Peter, I have a question that is not about Tachyon.
But you are using the W5500 I need a Ethernet interface. What data rate can be achieved with this chip? There will only be one other partner on the net so no congestion. I would need an average data rate of 1MBit/s. Can this be done with a prop and a W5500?
Thank you for any info.
Any pitfalls to take care of when doing a layout?
Hi Peter, I have a question that is not about Tachyon.
But you are using the W5500 I need a Ethernet interface. What data rate can be achieved with this chip? There will only be one other partner on the net so no congestion. I would need an average data rate of 1MBit/s. Can this be done with a prop and a W5500?
Thank you for any info.
Any pitfalls to take care of when doing a layout?
Hi Peter, I have a question that is not about Tachyon.
But you are using the W5500 I need a Ethernet interface. What data rate can be achieved with this chip? There will only be one other partner on the net so no congestion. I would need an average data rate of 1MBit/s. Can this be done with a prop and a W5500?
Thank you for any info.
Any pitfalls to take care of when doing a layout?
If you are transferring large blocks then you can hit 245kBytes/sec for 4k blocks but if you want to go faster then we would access the W5500 via another cog which might even be optimized for high-speed SPI but at least can continue to run at maximum throughput. My IoT5500 modules are already designed to drop in onto a PCB with a footprint that is practically no larger than the RJ45 socket itself although I will have to get another run of these done sometime.
Thanks Peter and MJB
That was also my intend to use a separate COG for the interface.
35-40MB/s is not needed, I get data from an ARINC-708 (Manchester Bi-Phase encoded) interface that's only 1MB/s and will just dump it via Ethernet to the host.
The prop is just ideal to make such special interfaces. Dedicate one COG for each. Another COG will do ARINC-429 in this project to interface weather radar to a moving map. that will be the third prop going into this equipment. Every aircraft needs several propellers.
Regarding ROM and Module management, I just wanted to check I understood correctly:
ROMs: binary images created from compiled pasm code (using python script/SAVEROM), reside in EEPROM starting at $C000, loaded from EEPROM into cog using FINDROM/LOADCOG
Modules: units of max 16 longs of pasm code (defined in RUNMODs section of Tachyon source), loaded from hub RAM into cog with LOADMOD, executed in cog with RUNMOD
Yes, the ROMS are upper EEPROM resident binary cog images which are loaded into cogs as required. The RUNMODs are small PASM modules that can be loaded into the Tachyon cog with a limit of 23 longs:
loadsz = 23 ' Specifies the number of longs to load with LOADMOD for a RUNMOD module
Seeing we have this method for loading ROMs into EEPROM, perhaps we could even load some custom RUNMODs too. I am trying to avoid having any funny hex blob in source code programs though.
Thanks Peter. I might try my hand at writing a module to drive the LTC2754. I take it nothing will barf if I remove unneeded modules, as long as I amend the RUNMOD table?
RUNMODs are very small so there is no need to remove any and besides they only get loaded as needed. I will see if I can compile a RUNMOD and use LOADMOD to load it in.
This is one from the kernel but we only need the PASM part:
org _RUNMOD
' [SDRDF] ( dst cnt -- )
_SDRDF
:l1 mov phsb,#0
movi frqb,#%0010_0000_0
test miso,ina wc
rcl r0,#1
test miso,ina wc
rcl r0,#1
test miso,ina wc
rcl r0,#1
test miso,ina wc
rcl r0,#1
test miso,ina wc
rcl r0,#1
test miso,ina wc
rcl r0,#1
test miso,ina wc
rcl r0,#1
test miso,ina wc
mov frqb,#0
rcl r0,#1
wrbyte r0,tos+1 ' write byte to destination
add tos+1,#1 ' dst = dst+1
djnz tos,#:l1 ' next
jmp #DROP2
' SDRD
SDRDF word w+@_SDRDF+s,@aLOADMOD+t
LOADMOD requires ( src dst cnt -- ) so even a TABLE of longs could be the RUNMOD to load.
dst is the RUNMOD area in the cog which is simply and so we could integrate a hex blob like this:
Next Step: Task is to have a simple state machine running that allows to check buttons and switch LEDs.
We want to use +POLL to have a program, that responses to the console and so can be controled by console input.
I believe we ran into some problems with the CASE construct. We are not sure about the BREAK functionality.
This piece of code:
TACHYON V5
{
Demonstrates TACHYON ADC Data Logging.
}
module MONITORING.fth ." ADC Data Logging module - [2018-09-19 Wed 15:18]" ;
byte iState
byte LState
0 LState C!
pub RunLEDs
LState C@ SWITCH
0 CASE
10 HIGH 10 LOW 10 FLOAT 1 LState C! BREAK
1 CASE
11 HIGH 11 LOW 11 FLOAT 2 LState C! BREAK
2 CASE
12 HIGH 12 LOW 12 FLOAT 0 LState C! BREAK
;
pub RunMonitoring
RunLEDs
;
END
ends up in crashing the system if we call it with RunMonitoring +POLL
... TACHYON V5 Propeller .:.:--TACHYON--:.:. Forth V5r4 NEON 540180811.0000
0026 ok
End of source code, 0000 errors found Load time = 0.5
Code bytes used = 142
Name bytes used = 64
CODE:$48DE = 18142 bytes
NAME:$5AFC = 6404 bytes
DATA:$77BF = 687 bytes
FREE: = 4638 bytes
Data Stack (0)
ok
... RunMonitoring +POLL ok
... �������������������������
Propeller .:.:--TACHYON--:.:. Forth V5r4 NEON 540180811.0000
and restarts TACHYON.
When omiting the BREAK, we can load the modul but the stack keeps a value.
TACHYON V5
{
Demonstrates TACHYON ADC Data Logging.
}
module MONITORING.fth ." ADC Data Logging module - [2018-09-19 Wed 15:18]" ;
byte iState
byte LState
0 LState C!
pub RunLEDs
LState C@ SWITCH
0 CASE
10 HIGH 10 LOW 10 FLOAT 1 LState C!
1 CASE
11 HIGH 11 LOW 11 FLOAT 2 LState C!
2 CASE
12 HIGH 12 LOW 12 FLOAT 0 LState C!
;
pub RunMonitoring
RunLEDs
;
END
Loading this code results in a Stack Level of 1.
Starting prints � ???
--------------------------------------------------------------------------------
... TACHYON V5 Propeller .:.:--TACHYON--:.:. Forth V5r4 NEON 540180811.0000
0026 ok
End of source code, 0000 errors found Load time = 0.4
Code bytes used = 136
Name bytes used = 64
CODE:$48D8 = 18136 bytes
NAME:$5AFC = 6404 bytes
DATA:$77BF = 687 bytes
FREE: = 4644 bytes
Data Stack (1)
$001F.4890 - 2050192
ok
... RunMonitoring +POLL ok
... � ???
...
The LEDs connected to the pin flicker, as it is expected.
If we insert a delay time on/10 ms/off the LEDs are bright, also as expected. So +POLL is able to manage modules that have a delay time longer than polling time. The hanging question is: what happens, if the modules runtime exceeds the polling intervall, will the intervall be expanded (polling frequency goes down?)
Anyway, the CASE of CASE is under investigation, seems odd as long as not understood.
sorry, what do you mean with "tick of"? Maybe I also have the understanding of a 5th grader. If I think about it: RunMonitoring BLANK runs RunMonitoring, +POLL is called with empty stack, so must fail. " ' RunMonitoring " places the address of RunMonitoring on the stack? OK, writing this, I checked on Tachyon, YES. But I didn't find "'" in the glossary, had more the impression of it being a comment.
LOW? ( pin -- flg ) X Test if pin is low
HIGH? ( pin -- flg ) X Test if pin is high
I somehow have the impression that this means "wait for"
I'm having trouble loading rooms, even the shortest "UART.hex" fails.
I tried to compile "TACHYON5r4.spin" downloaded and afterwards loaded "EXTEND.FTH".
Then I copy and paste "UART.hex"
Afterwards I loaded "TACHYON5r4-180812.binary" and tried "UART.hex" again, but unsuccessfully.
I have a Gadget Gangster, replacing eeprom with a 24lc512, who came by slow boat from China.
I run the Linux Mint 19 Cinnamon, and use GTKTerm as a terminal.
End of line delay is 15 miliseconds.
sorry, what do you mean with "tick of"? Maybe I also have the understanding of a 5th grader. If I think about it: RunMonitoring BLANK runs RunMonitoring, +POLL is called with empty stack, so must fail. " ' RunMonitoring " places the address of RunMonitoring on the stack? OK, writing this, I checked on Tachyon, YES. But I didn't find "'" in the glossary, had more the impression of it being a comment.
LOW? ( pin -- flg ) X Test if pin is low
HIGH? ( pin -- flg ) X Test if pin is high
I somehow have the impression that this means "wait for"
The tick symbol ' in Forth finds the code address of the following word so what I meant with "tick of" was "tick symbol for address of" the following word. Using tiny symbols like tick and dot are a problem with proportional fonts as sometimes you don't see them so here I will space them out for clarity:
' RunMonitoring +POLL
We use this to find the code address of a word rather than actually executing it. Since my name fields are in a separate area I have the equivalent NFA' to find the name field address "of" a word. (Perhaps I should have an alias for this tiny symbol, maybe CFA' so that it corresponds with NFA'. I do that same for . in that I have PRINT etc. The symbol is easy to use interactively while the longer word is better for readability)
When I use the ? symbol as a suffix I hope by convention to mostly imply that this returns with a yes/no true/false flag. So LOW? will test a pin and return with a true if high or false if low.
I'm having trouble loading rooms, even the shortest "UART.hex" fails.
I tried to compile "TACHYON5r4.spin" downloaded and afterwards loaded "EXTEND.FTH".
Then I copy and paste "UART.hex"
Afterwards I loaded "TACHYON5r4-180812.binary" and tried "UART.hex" again, but unsuccessfully.
I have a Gadget Gangster, replacing eeprom with a 24lc512, who came by slow boat from China.
I run the Linux Mint 19 Cinnamon, and use GTKTerm as a terminal.
End of line delay is 15 miliseconds.
What's next I can try?
Thanks for the screen shot, I see you typed in SAVEROM yourself before pasting since I had left that out while I was experimenting with some bash script and python code
Just to make sure I have manually added SAVEROM to the start of the text file and tried pasting it with GTkTerm set to 15ms but unfortunately it worked
Comments
From the way you were controlling the relays it looked like they were active low to turn on which is why I used an OUTSET to turn them all off. One thing I did forget was that when a linked timer times out and calls the alarm is that you need to reload the timer again. You can add 60000 hvactmr TIMEOUT like this:
lap time of fibo(46) is 40 us.
One possible bug: I set baud = 1152000 (note the extra zero), but found that I had to set the baudrate in minicom to 1000000.
Any idea why this might be, Peter?
How do I go about declaring a bunch of longs? The glossary seems to indicate you use a comma-separated list, but I can't get it to work....
should declare 4 longs - at least according to the glossary.
@Peter: we have used the new EASYFILE and it works like expected. Now we have to load ASM routines. First: lsroms showed no entry with freshly installed tachyon. After pasting "SAVEROM the UART HEX" lsroms showed different entries. It turned out that early entries appeared again. So we did an C100 2000 00 EFILL to erase a part of higher 32 kB and lsroms showed empty ROM, a next SAVEROM showed the expected result: only one entry.
Next hurdle: how to create the INTEL HEX file?
python bh.py --binaries=0,UART.binary
That way you end up with UART.hex
BTW - Comma separated names were implemented in V3 and I just kept in simple in V4 and V5 although I could implement it again if need be. For now just:
long xpos
long xneg
long ypos
long yneg
But you should be able to chain these on the same line too:
long xpos long xneg long ypos long yneg
NOTE: If anyone wants to implement extra features in Tachyon I would be more than happy.
this: MODULES LOADED:
4917: DATALOGGER.fth CE1372 DATALOGGER 140620.0000
3EE5: EASYNET.fth WIZNET NETWORK SERVERS 140615.2300
38E6: W5200.fth WIZNET W5200 driver 140517.0100
2FE8: EASYFILE.fth FAT32 Virtual Memory Access File System Layer V1.1 140528-0000
2B30: SDCARD.fth SD CARD Toolkit - 140626.1400
294C: CE1372.fth CE1372 WIDGET HARDWARE DEFINITIONS 131109.2340
2883: EPRINT.fth Stores PRINT strings in EEPROM 140626.0000
1881: EXTEND.fth Primary extensions to TACHYON kernel - 140626-14OO
.. and: is there a CASE construct in Tachyon? the ability to read gives you an advantage
But you are using the W5500 I need a Ethernet interface. What data rate can be achieved with this chip? There will only be one other partner on the net so no congestion. I would need an average data rate of 1MBit/s. Can this be done with a prop and a W5500?
Thank you for any info.
Any pitfalls to take care of when doing a layout?
Before reading your post I just had a look in the TACHYON.spin source
to see the 'Comma separated names' are not there any more.
Good to read the source every now and then anyhow ;-).
I think this is a seldom used feature and not worth blowing up the kernel.
either separate lines for readability
or all in one if you want it compact ... all fine
Just as an encouragement for others to reading the source:
Look for long in the internal dictionary in TACHYON.spin
then search for VLONG no code to handle the ',' comma.
Just puts 1 on the stack and calls 'longs' ...
then you can follow on what AVAR is really doing etc. ...
and after a while you get a much more in depth feeling for
"TACHYON under the hood"
If you are transferring large blocks then you can hit 245kBytes/sec for 4k blocks but if you want to go faster then we would access the W5500 via another cog which might even be optimized for high-speed SPI but at least can continue to run at maximum throughput. My IoT5500 modules are already designed to drop in onto a PCB with a footprint that is practically no larger than the RJ45 socket itself although I will have to get another run of these done sometime.
they are talkng about 35-40MBps here:
https://forum.wiznet.io/t/topic/4533
but at 80MHz SPI
Thanks Peter and MJB
That was also my intend to use a separate COG for the interface.
35-40MB/s is not needed, I get data from an ARINC-708 (Manchester Bi-Phase encoded) interface that's only 1MB/s and will just dump it via Ethernet to the host.
The prop is just ideal to make such special interfaces. Dedicate one COG for each. Another COG will do ARINC-429 in this project to interface weather radar to a moving map. that will be the third prop going into this equipment. Every aircraft needs several propellers.
In fact this is exactly what I did before I posted the question. I found my way as far as:
...wasn't 100% sure what was going on here, but I guessed that the CSV stuff wasn't in there, but thought I'd ask just in case I'd missed something.
I agree that it isn't needed, just thought I'd use it if it was there.
ROMs: binary images created from compiled pasm code (using python script/SAVEROM), reside in EEPROM starting at $C000, loaded from EEPROM into cog using FINDROM/LOADCOG
Modules: units of max 16 longs of pasm code (defined in RUNMODs section of Tachyon source), loaded from hub RAM into cog with LOADMOD, executed in cog with RUNMOD
loadsz = 23 ' Specifies the number of longs to load with LOADMOD for a RUNMOD module
Seeing we have this method for loading ROMs into EEPROM, perhaps we could even load some custom RUNMODs too. I am trying to avoid having any funny hex blob in source code programs though.
This is one from the kernel but we only need the PASM part:
LOADMOD requires ( src dst cnt -- ) so even a TABLE of longs could be the RUNMOD to load.
dst is the RUNMOD area in the cog which is simply and so we could integrate a hex blob like this: (The hex longs are actual longs from SDRDF, I wrote a Q&D one-liner to dump in this format)
There seems to be 2 versions of the SDIO module, one of which is commented out - what's the story here?
We want to use +POLL to have a program, that responses to the console and so can be controled by console input.
I believe we ran into some problems with the CASE construct. We are not sure about the BREAK functionality.
This piece of code:
ends up in crashing the system if we call it with RunMonitoring +POLL
and restarts TACHYON.
When omiting the BREAK, we can load the modul but the stack keeps a value.
Loading this code results in a Stack Level of 1.
Starting prints � ???
The LEDs connected to the pin flicker, as it is expected.
If we insert a delay time on/10 ms/off the LEDs are bright, also as expected. So +POLL is able to manage modules that have a delay time longer than polling time. The hanging question is: what happens, if the modules runtime exceeds the polling intervall, will the intervall be expanded (polling frequency goes down?)
Anyway, the CASE of CASE is under investigation, seems odd as long as not understood.
I tried to compile "TACHYON5r4.spin" downloaded and afterwards loaded "EXTEND.FTH".
Then I copy and paste "UART.hex"
Afterwards I loaded "TACHYON5r4-180812.binary" and tried "UART.hex" again, but unsuccessfully.
I have a Gadget Gangster, replacing eeprom with a 24lc512, who came by slow boat from China.
I run the Linux Mint 19 Cinnamon, and use GTKTerm as a terminal.
End of line delay is 15 miliseconds.
What's next I can try?
The tick symbol ' in Forth finds the code address of the following word so what I meant with "tick of" was "tick symbol for address of" the following word. Using tiny symbols like tick and dot are a problem with proportional fonts as sometimes you don't see them so here I will space them out for clarity: We use this to find the code address of a word rather than actually executing it. Since my name fields are in a separate area I have the equivalent NFA' to find the name field address "of" a word. (Perhaps I should have an alias for this tiny symbol, maybe CFA' so that it corresponds with NFA'. I do that same for . in that I have PRINT etc. The symbol is easy to use interactively while the longer word is better for readability)
When I use the ? symbol as a suffix I hope by convention to mostly imply that this returns with a yes/no true/false flag. So LOW? will test a pin and return with a true if high or false if low.
Thanks for the screen shot, I see you typed in SAVEROM yourself before pasting since I had left that out while I was experimenting with some bash script and python code
Just to make sure I have manually added SAVEROM to the start of the text file and tried pasting it with GTkTerm set to 15ms but unfortunately it worked
Could you try that again?