Re: [Amforth] Need some help with the SPI

2019-06-09 Thread Ian Jefferson

What a nice RTFM!

I have some fond memories of working with a capable C programmer on an 
Atmel Butterfly as a platform.  I relied heavily on the data sheet to 
understand the capability of the ATmega169 at the time and several times 
was able to identify paths forward by doing so. We were squeezing a lot 
of functionality out of this little chip which was probably not wise 
though I thought it was quite fun.


I came to appreciate those data sheets which I found at first 
intimidating but later I began to really appreciate them and the 
excellent writing in them.


I have not touched embedded stuff for a few years now but I stay on this 
list just for such posts.  Keeps my gray matter functional.


Ian

On 6/9/19 4:42 PM, Erich Wälde wrote:

Dear Jan,

allow me to observe the following things:


// enable SPI.Master
   SPI.setDataMode(SPI_MODE0);
   SPI.setBitOrder(MSBFIRST);
   SPI.setClockDivider(SPI_CLOCK_DIV4);
   SPI.begin();

The words and the concepts behind them are documented in great
detail in the datasheet of your controller. You mentioned
"arduino" at the beginning of this thread, so I *guess*
you are using a "atmega328p" controller.


http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf

yes I know, this is a big thing with >600 pages. And no, noone
expects you (or anyone else) to learn all of this by heart.
However, I do expect you to read the relevant sections.

The table of contents will suggest you look at chapter 19. SPI
--- Serial Peripheral Interface.

SPI is a piece of hardware, which will do the clocking and byte
transfers for you, no need to bit bang (i.e. setting pins high
and low) it yourself. The price for this nicety is that you need
to configure it properly.

- is the first bit in transfer the *most* or *least* significant
   bit?
- is the data valid at rising of falling edges of the clock?
   (19.4 Data Modes)
- which speed should the interface be clocked with?
- is a transfer currently ongoing or can I write the next Byte
   to register SPDR
and so on.

I can give you my routines, but I guess you will be unable to
use them if you do not understand these details, I'm afraid.


So any spi transfer goes through these steps:

setup bitorder, data mode, speed, maybe more (once)
turn the spi module on (once or before every tx session)

for every byte to transfer
- fetch the next byte from a meaningful place
- write the next byte to SPDR
- wait until tx has completed
- read the answer byte from SPDR (yes the same register!)
- store the answer byte in a meaningful place
repeat until no bytes are left to transmit.

c!@spi will do one transfer: it sends the lower byte of the top
of stack element to spi and places the result byte on the stack
afterwards. It handles the body of the loop outlined above.

!@spi will transfer 2 bytes == 1 word instead.

it is "!" store "@" fetch spi, every transmit ("!") will provide
an answer ("@").

That is why you want "!@spi" and "c!@spi" compiled into your
AmForth.

The example at

http://amforth.sourceforge.net/TG/recipes/SPI.html

might be a bit terse, however, it does point you to

trunk/avr8/lib/hardware/spi.frt
which defines words and constants for all the details.

trunk/avr8/lib/hardware/mmc.frt and
trunk/common/lib/hardware/mmc-test.frt
create an elaborate example, how to use the spi interface.


As others have said: the datasheet is your friend, and once you
understand, how to configure a certain piece of the controller
for your project, setting the appropriate bits in its Control
Register are not a big deal any more. The big deal is to find
out, which bits to set. The C libraries do all of this for you,
but you need to read the source and the datasheet to understand,
why it is working. Once you understand this for SPI you will
find that all the other parts of the controller are operated
similarly: there is one or a few control registers, a set of
data registers, a few flag bits here and there, and possibly a
connection to one or few interrupts, to make all of this work.


Also, the amforth source is full of examples and use cases. If
you are on Linux, grep and find are your friends to find
relevant places. If you are on MacOS or Windows, there are other
tools to search file names or content, I'm sure.


So, don't give up too soon. We have all been through this stage.

Cheers,
Erich



What to do with

\ check SPI device datasheet for mode settings
: spi.setmode ( spi-mode -- )
  spi.mode pin!
;

With kindly regards,

Jan





Op 8 jun. 2019, om 20:45 heeft Matthias Trute 
mailto:mtr...@web.de>> het volgende geschreven:

Hi,

You can also use the following words to avoid c!@spi, which is
missing from the preassembled package for the Arduino:


\ send a byte, ignore received byte
: c!spi ( c -- )
SPDR c! ( c addr -- )
;

  \ receive a byte, send a dummy one
: c@spi ( -- c)
0 SPDR c! 1 ms SPDR c@
;

SPDR is a constant holding the address of the SPI data register (&78)

Thanks, I've added 

Re: [Amforth] Need some help with the SPI

2019-06-09 Thread Erich Wälde
Dear Jan,

allow me to observe the following things:

> // enable SPI.Master
>   SPI.setDataMode(SPI_MODE0);
>   SPI.setBitOrder(MSBFIRST);
>   SPI.setClockDivider(SPI_CLOCK_DIV4);
>   SPI.begin();

The words and the concepts behind them are documented in great
detail in the datasheet of your controller. You mentioned
"arduino" at the beginning of this thread, so I *guess*
you are using a "atmega328p" controller.

> http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf

yes I know, this is a big thing with >600 pages. And no, noone
expects you (or anyone else) to learn all of this by heart.
However, I do expect you to read the relevant sections.

The table of contents will suggest you look at chapter 19. SPI
--- Serial Peripheral Interface.

SPI is a piece of hardware, which will do the clocking and byte
transfers for you, no need to bit bang (i.e. setting pins high
and low) it yourself. The price for this nicety is that you need
to configure it properly.

- is the first bit in transfer the *most* or *least* significant
  bit?
- is the data valid at rising of falling edges of the clock?
  (19.4 Data Modes)
- which speed should the interface be clocked with?
- is a transfer currently ongoing or can I write the next Byte
  to register SPDR
and so on.

I can give you my routines, but I guess you will be unable to
use them if you do not understand these details, I'm afraid.


So any spi transfer goes through these steps:

setup bitorder, data mode, speed, maybe more (once)
turn the spi module on (once or before every tx session)

for every byte to transfer
- fetch the next byte from a meaningful place
- write the next byte to SPDR
- wait until tx has completed
- read the answer byte from SPDR (yes the same register!)
- store the answer byte in a meaningful place
repeat until no bytes are left to transmit.

c!@spi will do one transfer: it sends the lower byte of the top
of stack element to spi and places the result byte on the stack
afterwards. It handles the body of the loop outlined above.

!@spi will transfer 2 bytes == 1 word instead.

it is "!" store "@" fetch spi, every transmit ("!") will provide
an answer ("@").

That is why you want "!@spi" and "c!@spi" compiled into your
AmForth.

The example at
> http://amforth.sourceforge.net/TG/recipes/SPI.html
might be a bit terse, however, it does point you to

trunk/avr8/lib/hardware/spi.frt
which defines words and constants for all the details.

trunk/avr8/lib/hardware/mmc.frt and
trunk/common/lib/hardware/mmc-test.frt
create an elaborate example, how to use the spi interface.


As others have said: the datasheet is your friend, and once you
understand, how to configure a certain piece of the controller
for your project, setting the appropriate bits in its Control
Register are not a big deal any more. The big deal is to find
out, which bits to set. The C libraries do all of this for you,
but you need to read the source and the datasheet to understand,
why it is working. Once you understand this for SPI you will
find that all the other parts of the controller are operated
similarly: there is one or a few control registers, a set of
data registers, a few flag bits here and there, and possibly a
connection to one or few interrupts, to make all of this work.


Also, the amforth source is full of examples and use cases. If
you are on Linux, grep and find are your friends to find
relevant places. If you are on MacOS or Windows, there are other
tools to search file names or content, I'm sure.


So, don't give up too soon. We have all been through this stage.

Cheers,
Erich


>
> What to do with
>
> \ check SPI device datasheet for mode settings
> : spi.setmode ( spi-mode -- )
>  spi.mode pin!
> ;
>
> With kindly regards,
>
> Jan
>
>
>
>
>
> Op 8 jun. 2019, om 20:45 heeft Matthias Trute 
> mailto:mtr...@web.de>> het volgende geschreven:
>
> Hi,
>
> You can also use the following words to avoid c!@spi, which is
> missing from the preassembled package for the Arduino:
>
>
> \ send a byte, ignore received byte
> : c!spi ( c -- )
>SPDR c! ( c addr -- )
> ;
>
>  \ receive a byte, send a dummy one
> : c@spi ( -- c)
>0 SPDR c! 1 ms SPDR c@
> ;
>
> SPDR is a constant holding the address of the SPI data register (&78)
>
> Thanks, I've added some comments to the spi.frt file.
>
> Matthias
>
>
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel
>
>
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel


--
May the Forth be with you ...


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lis

Re: [Amforth] Need some help with the SPI

2019-06-09 Thread Peter C. Hauser
Dear Jan,

spi.setmode is used to set one of the 4 SPI modes 0, 1, 2, or 3, e.g. "1 
spi.setmode".

The mode to use depends on the device you want to connect to, and you will find 
it in the datasheet (perhaps not explicitely stated, but the necessary 
information will be there).  Most common is 0.

Peter

> On 9 Jun 2019, at 20:52, Jan Kromhout  wrote:
> 
> Dear Peter
> 
> This is the code I need to model in amForth
> 
> // enable SPI.Master
>  SPI.setDataMode(SPI_MODE0);
>  SPI.setBitOrder(MSBFIRST);
>  SPI.setClockDivider(SPI_CLOCK_DIV4);
>  SPI.begin();
> 
> What to do with
> 
> \ check SPI device datasheet for mode settings
> : spi.setmode ( spi-mode -- )
> spi.mode pin!
> ;
> 
> With kindly regards,
> 
> Jan
> 
> 
> 
> 
> 
> Op 8 jun. 2019, om 20:45 heeft Matthias Trute 
> mailto:mtr...@web.de>> het volgende geschreven:
> 
> Hi,
> 
> You can also use the following words to avoid c!@spi, which is
> missing from the preassembled package for the Arduino:
> 
> 
> \ send a byte, ignore received byte
> : c!spi ( c -- )
>   SPDR c! ( c addr -- )
> ;
> 
> \ receive a byte, send a dummy one
> : c@spi ( -- c)
>   0 SPDR c! 1 ms SPDR c@
> ;
> 
> SPDR is a constant holding the address of the SPI data register (&78)
> 
> Thanks, I've added some comments to the spi.frt file.
> 
> Matthias
> 
> 
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel
> 
> 
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel



___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


Re: [Amforth] Need some help with the SPI

2019-06-09 Thread Jan Kromhout
Dear Peter

This is the code I need to model in amForth

// enable SPI.Master
  SPI.setDataMode(SPI_MODE0);
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV4);
  SPI.begin();

What to do with

\ check SPI device datasheet for mode settings
: spi.setmode ( spi-mode -- )
 spi.mode pin!
;

With kindly regards,

Jan





Op 8 jun. 2019, om 20:45 heeft Matthias Trute 
mailto:mtr...@web.de>> het volgende geschreven:

Hi,

You can also use the following words to avoid c!@spi, which is
missing from the preassembled package for the Arduino:


\ send a byte, ignore received byte
: c!spi ( c -- )
   SPDR c! ( c addr -- )
;

 \ receive a byte, send a dummy one
: c@spi ( -- c)
   0 SPDR c! 1 ms SPDR c@
;

SPDR is a constant holding the address of the SPI data register (&78)

Thanks, I've added some comments to the spi.frt file.

Matthias


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


Re: [Amforth] Need some help with the SPI

2019-06-08 Thread Matthias Trute
Hi,

> You can also use the following words to avoid c!@spi, which is
> missing from the preassembled package for the Arduino:
> 
> 
> \ send a byte, ignore received byte
> : c!spi ( c -- )
> SPDR c! ( c addr -- )
> ;
> 
>   \ receive a byte, send a dummy one
> : c@spi ( -- c)
> 0 SPDR c! 1 ms SPDR c@
> ;
> 
> SPDR is a constant holding the address of the SPI data register (&78)

Thanks, I've added some comments to the spi.frt file.

Matthias


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


Re: [Amforth] Need some help with the SPI

2019-06-08 Thread Peter C. Hauser
Jan,

You can also use the following words to avoid c!@spi, which is missing from the 
preassembled package for the Arduino:


\ send a byte, ignore received byte
: c!spi ( c -- )
SPDR c! ( c addr -- )
;

  \ receive a byte, send a dummy one
: c@spi ( -- c)
0 SPDR c! 1 ms SPDR c@
;

SPDR is a constant holding the address of the SPI data register (&78)

Peter

Below the complete package, which we have been using successfully (turn on and 
off SPI before reading or writing via SPI with +SPI and -SPI):

\ basic SPI operations for a single device
\ after Trute, but not using the assembly word c!@spi, 
\ which is not available preloaded for Arduino Uno
\ and did not work when included in a newly assembled package

-spiwords
marker -spiwords

\ SPI
&78 constant SPDR \ SPI Data Register
&77 constant SPSR \ SPI Status Register
  $80 constant SPSR_SPIF  \ SPI Interrupt Flag
  $40 constant SPSR_WCOL  \ Write Collision Flag
  $01 constant SPSR_SPI2X \ Double SPI Speed Bit
&76 constant SPCR \ SPI Control Register
  $80 constant SPCR_SPIE  \ SPI Interrupt Enable
  $40 constant SPCR_SPE   \ SPI Enable
  $20 constant SPCR_DORD  \ Data Order
  $10 constant SPCR_MSTR  \ Master/Slave Select
  $08 constant SPCR_CPOL  \ Clock polarity
  $04 constant SPCR_CPHA  \ Clock Phase
  $03 constant SPCR_SPR   \ SPI Clock Rate Selects


\ SPI hardware pins
  PORTB 5 portpin: spi.clk  
  PORTB 3 portpin: spi.mosi
  PORTB 4 portpin: spi.miso
  PORTB 2 portpin: spi.ss   \ default

SPSR 0 portpin: spi.2x

SPCR 6 portpin: spi.enable
SPCR 5 portpin: spi.dord
SPCR 4 portpin: spi.master
SPCR %1100 bitmask: spi.mode
SPCR %0011 bitmask: spi.speed

$0 constant spi.mode0  \ sample rising/--
$4 constant spi.mode1  \ --/sample falling
$8 constant spi.mode2  \ sample falling/--
$c constant spi.mode3  \ --/sample rising

0 constant spi.f/4
1 constant spi.f/16
2 constant spi.f/64
3 constant spi.f/128

\ check SPI device datasheet for mode settings
: spi.setmode ( spi-mode -- )
  spi.mode pin!
;

\ speed relative to f_cpu, constants see above
: spi.setspeed ( spi.speed -- )
  spi.speed pin!
;


: +spi
   \ Slave select *must* be *always* at a controlled level when SPI is 
activated.
   \ Changing a pin into output mode change its level to low. that makes a SPI 
think
   \ a communication has started which is not the case when this word is called.
   spi.ss high   \ deselect slave
   spi.ss pin_output \ possibly short low pulse
   spi.ss high   \ 
   
   spi.f/64 spi.setspeed

   spi.clk pin_output
   spi.mosi pin_output
   spi.miso pin_input
   spi.miso pin_pullup_on

   \ now its save to turn on the SPI module
   spi.master high
   spi.enable high
;

: -spi spi.ss high ;


\ send a byte, ignore received byte
: c!spi ( c -- )
SPDR c! ( c addr -- )
;

  \ receive a byte, send a dummy one
: c@spi ( -- c)
0 SPDR c! 1 ms SPDR c@
;



> On 7 Jun 2019, at 20:16, Jan Kromhout via Amforth-devel 
>  wrote:
> 
> Hello Tristan,Erich
> 
> This is far over my knowledge, but will give it a try.
> 
> But when I try to load the spi.frt I get an error here
> 
> |C|   97|\ send a byte, ignore recieved byte
> |S|   98|: c!spi ( c -- )
> |S|   99|c!@spi drop
> |E= ?? -13 6 
> 
> Is this also a assembler word?
> 
> Kindly regards,
> 
> Jan
> 
> 
> 
> 
>> Op 7 jun. 2019, om 19:50 heeft Erich Wälde  het 
>> volgende geschreven:
>> 
>> Hello Jan,
>> 
>> 
>> Jan Kromhout writes:
>> 
>>> Hi Tristan,
>>> 
>>> What to load in the right sequence to fellow the examples in 
>>> http://amforth.sourceforge.net/TG/recipes/SPI.html ?
>>> If I have the right sequence of loading the screens I will start as you 
>>> mentiod.
>>> 
>>> Kind regards,
>>> 
>>> Jan
>>> 
>>> 
>>> 
>>> Op 7 jun. 2019, om 19:25 heeft Tristan Williams 
>>> mailto:h...@tjnw.co.uk>> het volgende geschreven:
>>> 
>>> Hi Jan,
>>> 
>>> No don’t have. Why?
>>> 
>>> Because words/spirw.asm provides c!@spi which makes using the
>>> hardware spi easier, and it is used in the recipes
>> 
>> you see the filename? "words/spirw.asm"? Please note: .asm
>> suffix. This means that in your project directory, you need to
>> add one line to the file "dict_appl.inc". Then you need to
>> reassemble the project and load the resulting .hex files to your
>> controller. I strongly recommend learning this workflow, if you
>> didn't already.
>> 
>> Cheers,
>> Erich
>> 
>> 
>>> 
>>> http://amforth.sourceforge.net/TG/recipes/SPI.html
>>> 
>>> Separately, if you haven't read it already
>>> 
>>> https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
>>> 
>>> will help a lot, as will starting with a simple SPI device (e.g. io
>>> expander, digital potentiometer) first.
>>> 
>>> Kind regards,
>>> 
>>> Tristan
>>> 
>>> 
>>> Verstuurd vanaf mijn iPad
>>> 
>>> Op 7 jun. 2019 om 17:25 heeft Tristan Williams 
>>> mailto:h...@tjnw.co.uk>> het volgende geschreven:
>>> 
>>> Hello Jan,
>>> 
>>> A quick question first.
>>> 
>>> You have built your AmForth hex files with words/spirw.asm ?
>>> 
>>> 

Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Jan Kromhout via Amforth-devel
Hello Tristan,

That’s nice. Please can you explain how to do it?
I know that there are some article thats describe also how to compile forth 
under windows. It had a simple guideline. 
I have that uses for playing with the fp packages. And that was working fine.
But I have removed is from my computer !!

Please someone can help me out with this.

With kindly regards,


Jan




> Op 8 jun. 2019, om 00:29 heeft Tristan Williams  het 
> volgende geschreven:
> 
> Hello Jan,
> 
> Erich puts the case for being able to build AmForth very well.
> 
> I build AmForth on OS X if that is of any help.
> 
> Kind regards,
> 
> Tristan
> 
> 
> On 07Jun19 21:37, Erich Wälde wrote:
>> Hello Jan,
>> 
>> Jan Kromhout via Amforth-devel writes:
>> 
>>> Hello Tristan,Erich
>>> 
>>> This is far over my knowledge, but will give it a try.
>>> 
>>> But when I try to load the spi.frt I get an error here
>>> 
>>> |C|   97|\ send a byte, ignore recieved byte
>>> |S|   98|: c!spi ( c -- )
>>> |S|   99|c!@spi drop
>>> |E=3D ?? -13 6
>> 
>> In avr8/words you will find 3 files:
>>> 2spirw.asm  n-spi.asm  spirw.asm
>> which in turn will define 4 words:
>>> !@spi  n@spi n!spi  c!@spi
>> all of these come to life if you include their .asm files and
>> reassemble.
>> 
>> Rebuilding your project: yes, it might look intimidating the
>> first time. However, think about the gains:
>> 
>> - you can chose another board with a different controller
>> 
>> - you can change the clock crystal to another frequency, e.g. I
>>  strongly prefer baud rate crystals, e.g. 11059200 Hz.
>> 
>> - you can change the baud rate of the serial interface (within
>>  limits).
>> 
>> - you can extend your AmForth system with a large number or words
>>  to fit your project.
>> 
>> - you are not locked to use somehow prebuild .hex files
>> 
>> The sky is the limit! So: Don't give up too soon, please!
>> 
>> This might help if you are linux based:
>> http://amforth.sourceforge.net/UG/linux.html
>> A very long time ago I wrote this:
>> http://amforth.sourceforge.net/pr/Fosdem2011-proceedings-amforth.pdf
>> 
>> If you are Windows based, have a look at=20
>> http://amforth.sourceforge.net/UG/windows.html
>> 
>> Cheers,
>> Erich
>> 
>>> 
>>> Is this also a assembler word?
>>> 
>>> Kindly regards,
>>> 
>>> Jan
>>> 
>>> 
>>> 
>>> 
 Op 7 jun. 2019, om 19:50 heeft Erich Wälde  het 
 volgende geschreven:
 
 Hello Jan,
 
 
 Jan Kromhout writes:
 
> Hi Tristan,
> 
> What to load in the right sequence to fellow the examples in 
> http://amforth.sourceforge.net/TG/recipes/SPI.html ?
> If I have the right sequence of loading the screens I will start as you 
> mentiod.
> 
> Kind regards,
> 
> Jan
> 
> 
> 
> Op 7 jun. 2019, om 19:25 heeft Tristan Williams 
> mailto:h...@tjnw.co.uk>> het volgende geschreven:
> 
> Hi Jan,
> 
> No don’t have. Why?
> 
> Because words/spirw.asm provides c!@spi which makes using the
> hardware spi easier, and it is used in the recipes
 
 you see the filename? "words/spirw.asm"? Please note: .asm
 suffix. This means that in your project directory, you need to
 add one line to the file "dict_appl.inc". Then you need to
 reassemble the project and load the resulting .hex files to your
 controller. I strongly recommend learning this workflow, if you
 didn't already.
 
 Cheers,
 Erich
 
 
> 
> http://amforth.sourceforge.net/TG/recipes/SPI.html
> 
> Separately, if you haven't read it already
> 
> https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
> 
> will help a lot, as will starting with a simple SPI device (e.g. io
> expander, digital potentiometer) first.
> 
> Kind regards,
> 
> Tristan
> 
> 
> Verstuurd vanaf mijn iPad
> 
> Op 7 jun. 2019 om 17:25 heeft Tristan Williams 
> mailto:h...@tjnw.co.uk>> het volgende geschreven:
> 
> Hello Jan,
> 
> A quick question first.
> 
> You have built your AmForth hex files with words/spirw.asm ?
> 
> Kind regards,
> 
> Tristan
> 
> On 07Jun19 17:06, Jan Kromhout via Amforth-devel wrote:
> Hello
> 
> I have take a close look into SPI routines.
> I really not understand them.
> 
> I need simple make a connection withe the arduino in amForth.
> The basics I understand how to make a pin high or low etc.
> But I don’t know how to start to initialize the SPI etc.
> Can someone help me with this or give a simple example?
> The interface is using the standard pins for the SPI.
> 
> I mark the part of the code with <===? where I have trouble to 
> convert to amForth.
> 
> Thanks for any help.
> 
> Cheers,
> 
> Jan
> 
> 
> #include "SPI.h"
> 
> #define SCK_PIN   13
> #define MISO_PIN  12
> #define MOSI_PIN  11
> #define SS_PIN

Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Tristan Williams
Hello Jan,

Erich puts the case for being able to build AmForth very well.

I build AmForth on OS X if that is of any help.

Kind regards,

Tristan


On 07Jun19 21:37, Erich Wälde wrote:
> Hello Jan,
> 
> Jan Kromhout via Amforth-devel writes:
> 
> > Hello Tristan,Erich
> >
> > This is far over my knowledge, but will give it a try.
> >
> > But when I try to load the spi.frt I get an error here
> >
> > |C|   97|\ send a byte, ignore recieved byte
> > |S|   98|: c!spi ( c -- )
> > |S|   99|c!@spi drop
> > |E=3D ?? -13 6
> 
> In avr8/words you will find 3 files:
> > 2spirw.asm  n-spi.asm  spirw.asm
> which in turn will define 4 words:
> > !@spi  n@spi n!spi  c!@spi
> all of these come to life if you include their .asm files and
> reassemble.
> 
> Rebuilding your project: yes, it might look intimidating the
> first time. However, think about the gains:
> 
> - you can chose another board with a different controller
> 
> - you can change the clock crystal to another frequency, e.g. I
>   strongly prefer baud rate crystals, e.g. 11059200 Hz.
> 
> - you can change the baud rate of the serial interface (within
>   limits).
> 
> - you can extend your AmForth system with a large number or words
>   to fit your project.
> 
> - you are not locked to use somehow prebuild .hex files
> 
> The sky is the limit! So: Don't give up too soon, please!
> 
> This might help if you are linux based:
> http://amforth.sourceforge.net/UG/linux.html
> A very long time ago I wrote this:
> http://amforth.sourceforge.net/pr/Fosdem2011-proceedings-amforth.pdf
> 
> If you are Windows based, have a look at=20
> http://amforth.sourceforge.net/UG/windows.html
> 
> Cheers,
> Erich
> 
> >
> > Is this also a assembler word?
> >
> > Kindly regards,
> >
> > Jan
> >
> >
> >
> >
> >> Op 7 jun. 2019, om 19:50 heeft Erich Wälde  het 
> >> volgende geschreven:
> >> 
> >> Hello Jan,
> >> 
> >> 
> >> Jan Kromhout writes:
> >> 
> >>> Hi Tristan,
> >>> 
> >>> What to load in the right sequence to fellow the examples in 
> >>> http://amforth.sourceforge.net/TG/recipes/SPI.html ?
> >>> If I have the right sequence of loading the screens I will start as you 
> >>> mentiod.
> >>> 
> >>> Kind regards,
> >>> 
> >>> Jan
> >>> 
> >>> 
> >>> 
> >>> Op 7 jun. 2019, om 19:25 heeft Tristan Williams 
> >>> mailto:h...@tjnw.co.uk>> het volgende geschreven:
> >>> 
> >>> Hi Jan,
> >>> 
> >>> No don’t have. Why?
> >>> 
> >>> Because words/spirw.asm provides c!@spi which makes using the
> >>> hardware spi easier, and it is used in the recipes
> >> 
> >> you see the filename? "words/spirw.asm"? Please note: .asm
> >> suffix. This means that in your project directory, you need to
> >> add one line to the file "dict_appl.inc". Then you need to
> >> reassemble the project and load the resulting .hex files to your
> >> controller. I strongly recommend learning this workflow, if you
> >> didn't already.
> >> 
> >> Cheers,
> >> Erich
> >> 
> >> 
> >>> 
> >>> http://amforth.sourceforge.net/TG/recipes/SPI.html
> >>> 
> >>> Separately, if you haven't read it already
> >>> 
> >>> https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
> >>> 
> >>> will help a lot, as will starting with a simple SPI device (e.g. io
> >>> expander, digital potentiometer) first.
> >>> 
> >>> Kind regards,
> >>> 
> >>> Tristan
> >>> 
> >>> 
> >>> Verstuurd vanaf mijn iPad
> >>> 
> >>> Op 7 jun. 2019 om 17:25 heeft Tristan Williams 
> >>> mailto:h...@tjnw.co.uk>> het volgende geschreven:
> >>> 
> >>> Hello Jan,
> >>> 
> >>> A quick question first.
> >>> 
> >>> You have built your AmForth hex files with words/spirw.asm ?
> >>> 
> >>> Kind regards,
> >>> 
> >>> Tristan
> >>> 
> >>> On 07Jun19 17:06, Jan Kromhout via Amforth-devel wrote:
> >>> Hello
> >>> 
> >>> I have take a close look into SPI routines.
> >>> I really not understand them.
> >>> 
> >>> I need simple make a connection withe the arduino in amForth.
> >>> The basics I understand how to make a pin high or low etc.
> >>> But I don’t know how to start to initialize the SPI etc.
> >>> Can someone help me with this or give a simple example?
> >>> The interface is using the standard pins for the SPI.
> >>> 
> >>> I mark the part of the code with <===? where I have trouble to 
> >>> convert to amForth.
> >>> 
> >>> Thanks for any help.
> >>> 
> >>> Cheers,
> >>> 
> >>> Jan
> >>> 
> >>> 
> >>> #include "SPI.h"
> >>> 
> >>> #define SCK_PIN   13
> >>> #define MISO_PIN  12
> >>> #define MOSI_PIN  11
> >>> #define SS_PIN10
> >>> 
> >>> void umFPU_begin(void)
> >>> {
> >>>  digitalWrite(SS_PIN, HIGH);
> >>>  pinMode(SS_PIN, OUTPUT);
> >>>  umFPU_reset();
> >>> }
> >>> 
> >>> //--- reset 
> >>> -
> >>> 
> >>> void umFPU_reset()
> >>> {
> >>> digitalWrite(SS_PIN, LOW);
> >>> 
> >>> // disable SPI.Master
> >>> SPI.end();   <===?
> >>> 
> >>> // reset the FPU
> >>> digitalWrite(MOSI_PIN, HIGH);
> >>> for (byte i = 0; i < 80; i++)
> >>> {
> >>>  digitalWrite(SCK_PIN, HIGH);

Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Erich Wälde
Hello Jan,

Jan Kromhout via Amforth-devel writes:

> Hello Tristan,Erich
>
> This is far over my knowledge, but will give it a try.
>
> But when I try to load the spi.frt I get an error here
>
> |C|   97|\ send a byte, ignore recieved byte
> |S|   98|: c!spi ( c -- )
> |S|   99|c!@spi drop
> |E=3D ?? -13 6

In avr8/words you will find 3 files:
> 2spirw.asm  n-spi.asm  spirw.asm
which in turn will define 4 words:
> !@spi  n@spi n!spi  c!@spi
all of these come to life if you include their .asm files and
reassemble.

Rebuilding your project: yes, it might look intimidating the
first time. However, think about the gains:

- you can chose another board with a different controller

- you can change the clock crystal to another frequency, e.g. I
  strongly prefer baud rate crystals, e.g. 11059200 Hz.

- you can change the baud rate of the serial interface (within
  limits).

- you can extend your AmForth system with a large number or words
  to fit your project.

- you are not locked to use somehow prebuild .hex files

The sky is the limit! So: Don't give up too soon, please!

This might help if you are linux based:
http://amforth.sourceforge.net/UG/linux.html
A very long time ago I wrote this:
http://amforth.sourceforge.net/pr/Fosdem2011-proceedings-amforth.pdf

If you are Windows based, have a look at=20
http://amforth.sourceforge.net/UG/windows.html

Cheers,
Erich

>
> Is this also a assembler word?
>
> Kindly regards,
>
> Jan
>
>
>
>
>> Op 7 jun. 2019, om 19:50 heeft Erich Wälde  het 
>> volgende geschreven:
>> 
>> Hello Jan,
>> 
>> 
>> Jan Kromhout writes:
>> 
>>> Hi Tristan,
>>> 
>>> What to load in the right sequence to fellow the examples in 
>>> http://amforth.sourceforge.net/TG/recipes/SPI.html ?
>>> If I have the right sequence of loading the screens I will start as you 
>>> mentiod.
>>> 
>>> Kind regards,
>>> 
>>> Jan
>>> 
>>> 
>>> 
>>> Op 7 jun. 2019, om 19:25 heeft Tristan Williams 
>>> mailto:h...@tjnw.co.uk>> het volgende geschreven:
>>> 
>>> Hi Jan,
>>> 
>>> No don’t have. Why?
>>> 
>>> Because words/spirw.asm provides c!@spi which makes using the
>>> hardware spi easier, and it is used in the recipes
>> 
>> you see the filename? "words/spirw.asm"? Please note: .asm
>> suffix. This means that in your project directory, you need to
>> add one line to the file "dict_appl.inc". Then you need to
>> reassemble the project and load the resulting .hex files to your
>> controller. I strongly recommend learning this workflow, if you
>> didn't already.
>> 
>> Cheers,
>> Erich
>> 
>> 
>>> 
>>> http://amforth.sourceforge.net/TG/recipes/SPI.html
>>> 
>>> Separately, if you haven't read it already
>>> 
>>> https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
>>> 
>>> will help a lot, as will starting with a simple SPI device (e.g. io
>>> expander, digital potentiometer) first.
>>> 
>>> Kind regards,
>>> 
>>> Tristan
>>> 
>>> 
>>> Verstuurd vanaf mijn iPad
>>> 
>>> Op 7 jun. 2019 om 17:25 heeft Tristan Williams 
>>> mailto:h...@tjnw.co.uk>> het volgende geschreven:
>>> 
>>> Hello Jan,
>>> 
>>> A quick question first.
>>> 
>>> You have built your AmForth hex files with words/spirw.asm ?
>>> 
>>> Kind regards,
>>> 
>>> Tristan
>>> 
>>> On 07Jun19 17:06, Jan Kromhout via Amforth-devel wrote:
>>> Hello
>>> 
>>> I have take a close look into SPI routines.
>>> I really not understand them.
>>> 
>>> I need simple make a connection withe the arduino in amForth.
>>> The basics I understand how to make a pin high or low etc.
>>> But I don’t know how to start to initialize the SPI etc.
>>> Can someone help me with this or give a simple example?
>>> The interface is using the standard pins for the SPI.
>>> 
>>> I mark the part of the code with <===? where I have trouble to 
>>> convert to amForth.
>>> 
>>> Thanks for any help.
>>> 
>>> Cheers,
>>> 
>>> Jan
>>> 
>>> 
>>> #include "SPI.h"
>>> 
>>> #define SCK_PIN   13
>>> #define MISO_PIN  12
>>> #define MOSI_PIN  11
>>> #define SS_PIN10
>>> 
>>> void umFPU_begin(void)
>>> {
>>>  digitalWrite(SS_PIN, HIGH);
>>>  pinMode(SS_PIN, OUTPUT);
>>>  umFPU_reset();
>>> }
>>> 
>>> //--- reset 
>>> -
>>> 
>>> void umFPU_reset()
>>> {
>>> digitalWrite(SS_PIN, LOW);
>>> 
>>> // disable SPI.Master
>>> SPI.end();   <===?
>>> 
>>> // reset the FPU
>>> digitalWrite(MOSI_PIN, HIGH);
>>> for (byte i = 0; i < 80; i++)
>>> {
>>>  digitalWrite(SCK_PIN, HIGH);
>>>  digitalWrite(SCK_PIN, LOW);
>>> }
>>> digitalWrite(MOSI_PIN, LOW);
>>> 
>>> delay(10);
>>> 
>>> // enable SPI.Master
>>> SPI.setDataMode(SPI_MODE0);
>>> SPI.setBitOrder(MSBFIRST);
>>> SPI.setClockDivider(SPI_CLOCK_DIV4);
>>> SPI.begin();  <===?
>>> 
>>> digitalWrite(SS_PIN, HIGH);
>>> }
>>> 
>>> byte umFPU_read(void)
>>> {
>>> byte bval;
>>> digitalWrite(SS_PIN, LOW);
>>> umFPU_readDelay();
>>> bval = SPI.transfer(0); <===?
>>> digitalWrite(SS_PIN, HIGH);
>>> return bval;
>>> }
>>> 
>>> void umFPU_write_1(byte b1)
>>> {
>>> digi

Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Jan Kromhout via Amforth-devel
Hello Tristan,Erich

This is far over my knowledge, but will give it a try.

But when I try to load the spi.frt I get an error here

|C|   97|\ send a byte, ignore recieved byte
|S|   98|: c!spi ( c -- )
|S|   99|c!@spi drop
|E= ?? -13 6 

Is this also a assembler word?

Kindly regards,

Jan




> Op 7 jun. 2019, om 19:50 heeft Erich Wälde  het volgende 
> geschreven:
> 
> Hello Jan,
> 
> 
> Jan Kromhout writes:
> 
>> Hi Tristan,
>> 
>> What to load in the right sequence to fellow the examples in 
>> http://amforth.sourceforge.net/TG/recipes/SPI.html ?
>> If I have the right sequence of loading the screens I will start as you 
>> mentiod.
>> 
>> Kind regards,
>> 
>> Jan
>> 
>> 
>> 
>> Op 7 jun. 2019, om 19:25 heeft Tristan Williams 
>> mailto:h...@tjnw.co.uk>> het volgende geschreven:
>> 
>> Hi Jan,
>> 
>> No don’t have. Why?
>> 
>> Because words/spirw.asm provides c!@spi which makes using the
>> hardware spi easier, and it is used in the recipes
> 
> you see the filename? "words/spirw.asm"? Please note: .asm
> suffix. This means that in your project directory, you need to
> add one line to the file "dict_appl.inc". Then you need to
> reassemble the project and load the resulting .hex files to your
> controller. I strongly recommend learning this workflow, if you
> didn't already.
> 
> Cheers,
> Erich
> 
> 
>> 
>> http://amforth.sourceforge.net/TG/recipes/SPI.html
>> 
>> Separately, if you haven't read it already
>> 
>> https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
>> 
>> will help a lot, as will starting with a simple SPI device (e.g. io
>> expander, digital potentiometer) first.
>> 
>> Kind regards,
>> 
>> Tristan
>> 
>> 
>> Verstuurd vanaf mijn iPad
>> 
>> Op 7 jun. 2019 om 17:25 heeft Tristan Williams 
>> mailto:h...@tjnw.co.uk>> het volgende geschreven:
>> 
>> Hello Jan,
>> 
>> A quick question first.
>> 
>> You have built your AmForth hex files with words/spirw.asm ?
>> 
>> Kind regards,
>> 
>> Tristan
>> 
>> On 07Jun19 17:06, Jan Kromhout via Amforth-devel wrote:
>> Hello
>> 
>> I have take a close look into SPI routines.
>> I really not understand them.
>> 
>> I need simple make a connection withe the arduino in amForth.
>> The basics I understand how to make a pin high or low etc.
>> But I don’t know how to start to initialize the SPI etc.
>> Can someone help me with this or give a simple example?
>> The interface is using the standard pins for the SPI.
>> 
>> I mark the part of the code with <===? where I have trouble to 
>> convert to amForth.
>> 
>> Thanks for any help.
>> 
>> Cheers,
>> 
>> Jan
>> 
>> 
>> #include "SPI.h"
>> 
>> #define SCK_PIN   13
>> #define MISO_PIN  12
>> #define MOSI_PIN  11
>> #define SS_PIN10
>> 
>> void umFPU_begin(void)
>> {
>>  digitalWrite(SS_PIN, HIGH);
>>  pinMode(SS_PIN, OUTPUT);
>>  umFPU_reset();
>> }
>> 
>> //--- reset -
>> 
>> void umFPU_reset()
>> {
>> digitalWrite(SS_PIN, LOW);
>> 
>> // disable SPI.Master
>> SPI.end();   <===?
>> 
>> // reset the FPU
>> digitalWrite(MOSI_PIN, HIGH);
>> for (byte i = 0; i < 80; i++)
>> {
>>  digitalWrite(SCK_PIN, HIGH);
>>  digitalWrite(SCK_PIN, LOW);
>> }
>> digitalWrite(MOSI_PIN, LOW);
>> 
>> delay(10);
>> 
>> // enable SPI.Master
>> SPI.setDataMode(SPI_MODE0);
>> SPI.setBitOrder(MSBFIRST);
>> SPI.setClockDivider(SPI_CLOCK_DIV4);
>> SPI.begin();  <===?
>> 
>> digitalWrite(SS_PIN, HIGH);
>> }
>> 
>> byte umFPU_read(void)
>> {
>> byte bval;
>> digitalWrite(SS_PIN, LOW);
>> umFPU_readDelay();
>> bval = SPI.transfer(0); <===?
>> digitalWrite(SS_PIN, HIGH);
>> return bval;
>> }
>> 
>> void umFPU_write_1(byte b1)
>> {
>> digitalWrite(SS_PIN, LOW);
>> SPI.transfer(b1);  <===?
>> digitalWrite(SS_PIN, HIGH);
>> }
>> 
>> ___
>> Amforth-devel mailing list for http://amforth.sf.net/
>> Amforth-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/amforth-devel
>> 
>> 
>> ___
>> Amforth-devel mailing list for http://amforth.sf.net/
>> Amforth-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/amforth-devel
>> 
>> 
>> 
>> ___
>> Amforth-devel mailing list for http://amforth.sf.net/
>> Amforth-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/amforth-devel
>> 
>> 
>> ___
>> Amforth-devel mailing list for http://amforth.sf.net/
>> Amforth-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/amforth-devel
>> 
>> 
>> ___
>> Amforth-devel mailing list for http://amforth.sf.net/
>> Amforth-devel@lists.sourceforge.net
>> https://lists.sou

Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Erich Wälde
Hello Jan,


Jan Kromhout writes:

> Hi Tristan,
>
> What to load in the right sequence to fellow the examples in 
> http://amforth.sourceforge.net/TG/recipes/SPI.html ?
> If I have the right sequence of loading the screens I will start as you 
> mentiod.
>
> Kind regards,
>
> Jan
>
>
>
> Op 7 jun. 2019, om 19:25 heeft Tristan Williams 
> mailto:h...@tjnw.co.uk>> het volgende geschreven:
>
> Hi Jan,
>
> No don’t have. Why?
>
> Because words/spirw.asm provides c!@spi which makes using the
> hardware spi easier, and it is used in the recipes

you see the filename? "words/spirw.asm"? Please note: .asm
suffix. This means that in your project directory, you need to
add one line to the file "dict_appl.inc". Then you need to
reassemble the project and load the resulting .hex files to your
controller. I strongly recommend learning this workflow, if you
didn't already.

Cheers,
Erich


>
> http://amforth.sourceforge.net/TG/recipes/SPI.html
>
> Separately, if you haven't read it already
>
> https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
>
> will help a lot, as will starting with a simple SPI device (e.g. io
> expander, digital potentiometer) first.
>
> Kind regards,
>
> Tristan
>
>
> Verstuurd vanaf mijn iPad
>
> Op 7 jun. 2019 om 17:25 heeft Tristan Williams 
> mailto:h...@tjnw.co.uk>> het volgende geschreven:
>
> Hello Jan,
>
> A quick question first.
>
> You have built your AmForth hex files with words/spirw.asm ?
>
> Kind regards,
>
> Tristan
>
> On 07Jun19 17:06, Jan Kromhout via Amforth-devel wrote:
> Hello
>
> I have take a close look into SPI routines.
> I really not understand them.
>
> I need simple make a connection withe the arduino in amForth.
> The basics I understand how to make a pin high or low etc.
> But I don’t know how to start to initialize the SPI etc.
> Can someone help me with this or give a simple example?
> The interface is using the standard pins for the SPI.
>
> I mark the part of the code with <===? where I have trouble to 
> convert to amForth.
>
> Thanks for any help.
>
> Cheers,
>
> Jan
>
>
> #include "SPI.h"
>
> #define SCK_PIN   13
> #define MISO_PIN  12
> #define MOSI_PIN  11
> #define SS_PIN10
>
> void umFPU_begin(void)
> {
>   digitalWrite(SS_PIN, HIGH);
>   pinMode(SS_PIN, OUTPUT);
>   umFPU_reset();
> }
>
> //--- reset -
>
> void umFPU_reset()
> {
> digitalWrite(SS_PIN, LOW);
>
> // disable SPI.Master
> SPI.end();   <===?
>
> // reset the FPU
> digitalWrite(MOSI_PIN, HIGH);
> for (byte i = 0; i < 80; i++)
> {
>   digitalWrite(SCK_PIN, HIGH);
>   digitalWrite(SCK_PIN, LOW);
> }
> digitalWrite(MOSI_PIN, LOW);
>
> delay(10);
>
> // enable SPI.Master
> SPI.setDataMode(SPI_MODE0);
> SPI.setBitOrder(MSBFIRST);
> SPI.setClockDivider(SPI_CLOCK_DIV4);
> SPI.begin();  <===?
>
> digitalWrite(SS_PIN, HIGH);
> }
>
> byte umFPU_read(void)
> {
> byte bval;
> digitalWrite(SS_PIN, LOW);
> umFPU_readDelay();
> bval = SPI.transfer(0); <===?
> digitalWrite(SS_PIN, HIGH);
> return bval;
> }
>
> void umFPU_write_1(byte b1)
> {
> digitalWrite(SS_PIN, LOW);
> SPI.transfer(b1);  <===?
> digitalWrite(SS_PIN, HIGH);
> }
>
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel
>
>
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel
>
>
>
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel
>
>
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel
>
>
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel


-- 
May the Forth be with you ...


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Jan Kromhout
Hi Tristan,

What to load in the right sequence to fellow the examples in 
http://amforth.sourceforge.net/TG/recipes/SPI.html ?
If I have the right sequence of loading the screens I will start as you mentiod.

Kind regards,

Jan



Op 7 jun. 2019, om 19:25 heeft Tristan Williams 
mailto:h...@tjnw.co.uk>> het volgende geschreven:

Hi Jan,

No don’t have. Why?

Because words/spirw.asm provides c!@spi which makes using the
hardware spi easier, and it is used in the recipes

http://amforth.sourceforge.net/TG/recipes/SPI.html

Separately, if you haven't read it already

https://en.wikipedia.org/wiki/Serial_Peripheral_Interface

will help a lot, as will starting with a simple SPI device (e.g. io
expander, digital potentiometer) first.

Kind regards,

Tristan


Verstuurd vanaf mijn iPad

Op 7 jun. 2019 om 17:25 heeft Tristan Williams 
mailto:h...@tjnw.co.uk>> het volgende geschreven:

Hello Jan,

A quick question first.

You have built your AmForth hex files with words/spirw.asm ?

Kind regards,

Tristan

On 07Jun19 17:06, Jan Kromhout via Amforth-devel wrote:
Hello

I have take a close look into SPI routines.
I really not understand them.

I need simple make a connection withe the arduino in amForth.
The basics I understand how to make a pin high or low etc.
But I don’t know how to start to initialize the SPI etc.
Can someone help me with this or give a simple example?
The interface is using the standard pins for the SPI.

I mark the part of the code with <===? where I have trouble to convert 
to amForth.

Thanks for any help.

Cheers,

Jan


#include "SPI.h"

#define SCK_PIN   13
#define MISO_PIN  12
#define MOSI_PIN  11
#define SS_PIN10

void umFPU_begin(void)
{
  digitalWrite(SS_PIN, HIGH);
  pinMode(SS_PIN, OUTPUT);
  umFPU_reset();
}

//--- reset -

void umFPU_reset()
{
digitalWrite(SS_PIN, LOW);

// disable SPI.Master
SPI.end();   <===?

// reset the FPU
digitalWrite(MOSI_PIN, HIGH);
for (byte i = 0; i < 80; i++)
{
  digitalWrite(SCK_PIN, HIGH);
  digitalWrite(SCK_PIN, LOW);
}
digitalWrite(MOSI_PIN, LOW);

delay(10);

// enable SPI.Master
SPI.setDataMode(SPI_MODE0);
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV4);
SPI.begin();  <===?

digitalWrite(SS_PIN, HIGH);
}

byte umFPU_read(void)
{
byte bval;
digitalWrite(SS_PIN, LOW);
umFPU_readDelay();
bval = SPI.transfer(0); <===?
digitalWrite(SS_PIN, HIGH);
return bval;
}

void umFPU_write_1(byte b1)
{
digitalWrite(SS_PIN, LOW);
SPI.transfer(b1);  <===?
digitalWrite(SS_PIN, HIGH);
}

___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel



___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Tristan Williams
Hi Jan,

> No don’t have. Why?

Because words/spirw.asm provides c!@spi which makes using the 
hardware spi easier, and it is used in the recipes

http://amforth.sourceforge.net/TG/recipes/SPI.html

Separately, if you haven't read it already

https://en.wikipedia.org/wiki/Serial_Peripheral_Interface

will help a lot, as will starting with a simple SPI device (e.g. io
expander, digital potentiometer) first.

Kind regards,

Tristan

> 
> Verstuurd vanaf mijn iPad
> 
> > Op 7 jun. 2019 om 17:25 heeft Tristan Williams  het 
> > volgende geschreven:
> > 
> > Hello Jan,
> > 
> > A quick question first.
> > 
> > You have built your AmForth hex files with words/spirw.asm ?
> > 
> > Kind regards,
> > 
> > Tristan
> > 
> >> On 07Jun19 17:06, Jan Kromhout via Amforth-devel wrote:
> >> Hello
> >> 
> >> I have take a close look into SPI routines.
> >> I really not understand them.
> >> 
> >> I need simple make a connection withe the arduino in amForth.
> >> The basics I understand how to make a pin high or low etc.
> >> But I don’t know how to start to initialize the SPI etc.
> >> Can someone help me with this or give a simple example?
> >> The interface is using the standard pins for the SPI.
> >> 
> >> I mark the part of the code with <===? where I have trouble to 
> >> convert to amForth.
> >> 
> >> Thanks for any help.
> >> 
> >> Cheers,
> >> 
> >> Jan
> >> 
> >> 
> >> #include "SPI.h"
> >> 
> >> #define SCK_PIN   13
> >> #define MISO_PIN  12
> >> #define MOSI_PIN  11
> >> #define SS_PIN10
> >> 
> >> void umFPU_begin(void)
> >> {
> >>digitalWrite(SS_PIN, HIGH);
> >>pinMode(SS_PIN, OUTPUT);
> >>umFPU_reset();
> >> }
> >> 
> >> //--- reset 
> >> -
> >> 
> >> void umFPU_reset()
> >> {
> >>  digitalWrite(SS_PIN, LOW);
> >> 
> >>  // disable SPI.Master
> >>  SPI.end();   <===?
> >> 
> >>  // reset the FPU
> >>  digitalWrite(MOSI_PIN, HIGH);
> >>  for (byte i = 0; i < 80; i++)
> >>  {
> >>digitalWrite(SCK_PIN, HIGH);
> >>digitalWrite(SCK_PIN, LOW);
> >>  }
> >>  digitalWrite(MOSI_PIN, LOW);
> >> 
> >>  delay(10);
> >> 
> >>  // enable SPI.Master
> >>  SPI.setDataMode(SPI_MODE0);
> >>  SPI.setBitOrder(MSBFIRST);
> >>  SPI.setClockDivider(SPI_CLOCK_DIV4);
> >>  SPI.begin();  <===?
> >> 
> >>  digitalWrite(SS_PIN, HIGH);
> >> }
> >> 
> >> byte umFPU_read(void)
> >> {
> >>  byte bval;
> >>  digitalWrite(SS_PIN, LOW);
> >>  umFPU_readDelay();
> >>  bval = SPI.transfer(0); <===?
> >>  digitalWrite(SS_PIN, HIGH);
> >>  return bval;
> >> }
> >> 
> >> void umFPU_write_1(byte b1)
> >> {
> >>  digitalWrite(SS_PIN, LOW);
> >>  SPI.transfer(b1);  <===?
> >>  digitalWrite(SS_PIN, HIGH);
> >> }
> >> 
> >> ___
> >> Amforth-devel mailing list for http://amforth.sf.net/
> >> Amforth-devel@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/amforth-devel
> > 
> > 
> > ___
> > Amforth-devel mailing list for http://amforth.sf.net/
> > Amforth-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/amforth-devel
> 
> 
> 
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Jan Kromhout via Amforth-devel
Hello Tristan,

No don’t have. Why?

Verstuurd vanaf mijn iPad

> Op 7 jun. 2019 om 17:25 heeft Tristan Williams  het volgende 
> geschreven:
> 
> Hello Jan,
> 
> A quick question first.
> 
> You have built your AmForth hex files with words/spirw.asm ?
> 
> Kind regards,
> 
> Tristan
> 
>> On 07Jun19 17:06, Jan Kromhout via Amforth-devel wrote:
>> Hello
>> 
>> I have take a close look into SPI routines.
>> I really not understand them.
>> 
>> I need simple make a connection withe the arduino in amForth.
>> The basics I understand how to make a pin high or low etc.
>> But I don’t know how to start to initialize the SPI etc.
>> Can someone help me with this or give a simple example?
>> The interface is using the standard pins for the SPI.
>> 
>> I mark the part of the code with <===? where I have trouble to 
>> convert to amForth.
>> 
>> Thanks for any help.
>> 
>> Cheers,
>> 
>> Jan
>> 
>> 
>> #include "SPI.h"
>> 
>> #define SCK_PIN   13
>> #define MISO_PIN  12
>> #define MOSI_PIN  11
>> #define SS_PIN10
>> 
>> void umFPU_begin(void)
>> {
>>digitalWrite(SS_PIN, HIGH);
>>pinMode(SS_PIN, OUTPUT);
>>umFPU_reset();
>> }
>> 
>> //--- reset -
>> 
>> void umFPU_reset()
>> {
>>  digitalWrite(SS_PIN, LOW);
>> 
>>  // disable SPI.Master
>>  SPI.end();   <===?
>> 
>>  // reset the FPU
>>  digitalWrite(MOSI_PIN, HIGH);
>>  for (byte i = 0; i < 80; i++)
>>  {
>>digitalWrite(SCK_PIN, HIGH);
>>digitalWrite(SCK_PIN, LOW);
>>  }
>>  digitalWrite(MOSI_PIN, LOW);
>> 
>>  delay(10);
>> 
>>  // enable SPI.Master
>>  SPI.setDataMode(SPI_MODE0);
>>  SPI.setBitOrder(MSBFIRST);
>>  SPI.setClockDivider(SPI_CLOCK_DIV4);
>>  SPI.begin();  <===?
>> 
>>  digitalWrite(SS_PIN, HIGH);
>> }
>> 
>> byte umFPU_read(void)
>> {
>>  byte bval;
>>  digitalWrite(SS_PIN, LOW);
>>  umFPU_readDelay();
>>  bval = SPI.transfer(0); <===?
>>  digitalWrite(SS_PIN, HIGH);
>>  return bval;
>> }
>> 
>> void umFPU_write_1(byte b1)
>> {
>>  digitalWrite(SS_PIN, LOW);
>>  SPI.transfer(b1);  <===?
>>  digitalWrite(SS_PIN, HIGH);
>> }
>> 
>> ___
>> Amforth-devel mailing list for http://amforth.sf.net/
>> Amforth-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/amforth-devel
> 
> 
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel



___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Tristan Williams
Hello Jan,

A quick question first.

You have built your AmForth hex files with words/spirw.asm ?

Kind regards,

Tristan

On 07Jun19 17:06, Jan Kromhout via Amforth-devel wrote:
> Hello
> 
> I have take a close look into SPI routines.
> I really not understand them.
> 
> I need simple make a connection withe the arduino in amForth.
> The basics I understand how to make a pin high or low etc.
> But I don’t know how to start to initialize the SPI etc.
> Can someone help me with this or give a simple example?
> The interface is using the standard pins for the SPI.
> 
> I mark the part of the code with <===? where I have trouble to 
> convert to amForth.
> 
> Thanks for any help.
> 
> Cheers,
> 
> Jan
> 
> 
> #include "SPI.h"
> 
> #define SCK_PIN   13
> #define MISO_PIN  12
> #define MOSI_PIN  11
> #define SS_PIN10
> 
> void umFPU_begin(void)
> {
> digitalWrite(SS_PIN, HIGH);
> pinMode(SS_PIN, OUTPUT);
> umFPU_reset();
> }
> 
> //--- reset -
> 
> void umFPU_reset()
> {
>   digitalWrite(SS_PIN, LOW);
> 
>   // disable SPI.Master
>   SPI.end();   <===?
> 
>   // reset the FPU
>   digitalWrite(MOSI_PIN, HIGH);
>   for (byte i = 0; i < 80; i++)
>   {
> digitalWrite(SCK_PIN, HIGH);
> digitalWrite(SCK_PIN, LOW);
>   }
>   digitalWrite(MOSI_PIN, LOW);
> 
>   delay(10);
> 
>   // enable SPI.Master
>   SPI.setDataMode(SPI_MODE0);
>   SPI.setBitOrder(MSBFIRST);
>   SPI.setClockDivider(SPI_CLOCK_DIV4);
>   SPI.begin();  <===?
> 
>   digitalWrite(SS_PIN, HIGH);
> }
> 
> byte umFPU_read(void)
> {
>   byte bval;
>   digitalWrite(SS_PIN, LOW);
>   umFPU_readDelay();
>   bval = SPI.transfer(0); <===?
>   digitalWrite(SS_PIN, HIGH);
>   return bval;
> }
> 
> void umFPU_write_1(byte b1)
> {
>   digitalWrite(SS_PIN, LOW);
>   SPI.transfer(b1);  <===?
>   digitalWrite(SS_PIN, HIGH);
> }
> 
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel


___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


Re: [Amforth] Need some help with the SPI

2019-06-07 Thread Peter C. Hauser
Jan,

Can I suggest that in order to get to grips with it, rather than starting with 
the Arduino example, study the data book for the microcontroller to learn how 
SPI is controlled with the related registers, and then study the SPI words 
provided with the AmForth package.  

C/C++/Arduino language examples often are based on libraries which are not 
transparent, and thus a direct translation to Forth is not possible.

Peter



 

> On 7 Jun 2019, at 17:06, Jan Kromhout via Amforth-devel 
>  wrote:
> 
> Hello
> 
> I have take a close look into SPI routines.
> I really not understand them.
> 
> I need simple make a connection withe the arduino in amForth.
> The basics I understand how to make a pin high or low etc.
> But I don’t know how to start to initialize the SPI etc.
> Can someone help me with this or give a simple example?
> The interface is using the standard pins for the SPI.
> 
> I mark the part of the code with <===? where I have trouble to 
> convert to amForth.
> 
> Thanks for any help.
> 
> Cheers,
> 
> Jan
> 
> 
> #include "SPI.h"
> 
> #define SCK_PIN   13
> #define MISO_PIN  12
> #define MOSI_PIN  11
> #define SS_PIN10
> 
> void umFPU_begin(void)
> {
>digitalWrite(SS_PIN, HIGH);
>pinMode(SS_PIN, OUTPUT);
>umFPU_reset();
> }
> 
> //--- reset -
> 
> void umFPU_reset()
> {
>  digitalWrite(SS_PIN, LOW);
> 
>  // disable SPI.Master
>  SPI.end();   <===?
> 
>  // reset the FPU
>  digitalWrite(MOSI_PIN, HIGH);
>  for (byte i = 0; i < 80; i++)
>  {
>digitalWrite(SCK_PIN, HIGH);
>digitalWrite(SCK_PIN, LOW);
>  }
>  digitalWrite(MOSI_PIN, LOW);
> 
>  delay(10);
> 
>  // enable SPI.Master
>  SPI.setDataMode(SPI_MODE0);
>  SPI.setBitOrder(MSBFIRST);
>  SPI.setClockDivider(SPI_CLOCK_DIV4);
>  SPI.begin();  <===?
> 
>  digitalWrite(SS_PIN, HIGH);
> }
> 
> byte umFPU_read(void)
> {
>  byte bval;
>  digitalWrite(SS_PIN, LOW);
>  umFPU_readDelay();
>  bval = SPI.transfer(0); <===?
>  digitalWrite(SS_PIN, HIGH);
>  return bval;
> }
> 
> void umFPU_write_1(byte b1)
> {
>  digitalWrite(SS_PIN, LOW);
>  SPI.transfer(b1);  <===?
>  digitalWrite(SS_PIN, HIGH);
> }
> 
> ___
> Amforth-devel mailing list for http://amforth.sf.net/
> Amforth-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amforth-devel



___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel


[Amforth] Need some help with the SPI

2019-06-07 Thread Jan Kromhout via Amforth-devel
Hello

I have take a close look into SPI routines.
I really not understand them.

I need simple make a connection withe the arduino in amForth.
The basics I understand how to make a pin high or low etc.
But I don’t know how to start to initialize the SPI etc.
Can someone help me with this or give a simple example?
The interface is using the standard pins for the SPI.

I mark the part of the code with <===? where I have trouble to convert 
to amForth.

Thanks for any help.

Cheers,

Jan


#include "SPI.h"

#define SCK_PIN   13
#define MISO_PIN  12
#define MOSI_PIN  11
#define SS_PIN10

void umFPU_begin(void)
{
digitalWrite(SS_PIN, HIGH);
pinMode(SS_PIN, OUTPUT);
umFPU_reset();
}

//--- reset -

void umFPU_reset()
{
  digitalWrite(SS_PIN, LOW);

  // disable SPI.Master
  SPI.end();   <===?

  // reset the FPU
  digitalWrite(MOSI_PIN, HIGH);
  for (byte i = 0; i < 80; i++)
  {
digitalWrite(SCK_PIN, HIGH);
digitalWrite(SCK_PIN, LOW);
  }
  digitalWrite(MOSI_PIN, LOW);

  delay(10);

  // enable SPI.Master
  SPI.setDataMode(SPI_MODE0);
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV4);
  SPI.begin();  <===?

  digitalWrite(SS_PIN, HIGH);
}

byte umFPU_read(void)
{
  byte bval;
  digitalWrite(SS_PIN, LOW);
  umFPU_readDelay();
  bval = SPI.transfer(0); <===?
  digitalWrite(SS_PIN, HIGH);
  return bval;
}

void umFPU_write_1(byte b1)
{
  digitalWrite(SS_PIN, LOW);
  SPI.transfer(b1);  <===?
  digitalWrite(SS_PIN, HIGH);
}

___
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel