To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.robotics.handyboardOpen lugnet.robotics.handyboard in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 Robotics / Handy Board / 1611
1610  |  1612
Subject: 
Re: Vector2x SPI interrupt driven code
Newsgroups: 
lugnet.robotics.handyboard
Date: 
Wed, 5 Mar 1997 04:53:52 GMT
Original-From: 
Adam <ADAM@RING.ZENOXspamless.COM>
Viewed: 
2359 times
  
Not sure who you are?  tomb?

Anyways, I noticed mention of a compass....  I once looked into the
idea of using a flux gate compass to obtain heading info.  After finding
that the inexpensive (affordable) models would only obtain info at a
resolution of 45 degrees, I gave up on it.  I read all of the mail on
the HB list, but I don't recall transmisions on the compass idea.
Maybe I should ask what the Vector2x is???

Please feed me info on this compass stuff.  I'm extremely interested.

Thanks.



On Tue, 4 Mar 1997 tomb@netperceptions.com wrote:


Well it works.  A couple people have asked for it.  Turns out the
stupid V2X docs are wrong again!  Like the product, but bad docs will
kill it!

Even if you don't have a V2X, I have seen enough traffic asking about
using the SPI for things on the HB, and this proves it can be done.

The EOC level is wrong, it is HI not LO like the timing diagrams
show.  I kinda saw it on the scope, but I ignored it, figuring I was
doing something wrong (the docs are right aren't they :-P).  Tonight,
I decided not to ignore it, and I built an inverter using a NPN
transistor, on the EOC output.

I noticed also, that I changed the CPOL, and it works, I didn't fix
this to match the docs, I may, if I notice any trouble.  It could be
that the docs are wrong there also (surprise surprise).

It outputs the heading directly, I didn't actually write a cute C
routine, I should have, but something like:

main()
{
  comp_init(1);
  for(;;)
printf("heading %d\n", head_word);
}

should give you a really nice compass.  Notice that the interrupt
routine double buffers things, so this *SHOULD* provide accurate
results most of the time.

The heading does 0-359 and is pretty darn stable (I did a lot of !! on
the command line of IC).

I'll clean it up, I think I have to steal one of the motor control
lines (like the poloroid thing did), but I think I'll steal motor 3 or
4 reverse, that will allow control of the compass P/C line.  This will
still motor 3 forward with compass, and only a minor problem with
motor 3 reverse (maybe).

To use this, you will have to run a jumper from ground (tab of
regulator works great), to the P/C line of the compass *AFTER*
powering things up.  P/C has to be high at reset or powerup, float
works, otherwise you get lockups.

Fred, after I clean this up, and put some more stuff with it, you want
to package it up?

*
* icb file: "compspi.asm"
*
* Tom Brusehaver  02/16/96 working 03/04/97
*
* Run the V2X in master mode, this keeps collecting the "current"
* heading, resulting in having almost real-time, constant input from
* the compass.
*
*       Pin Connections
*     V2X            HC11
*   pin    desc   pin   desc    Notes
*    13     EOC  invert! SS      Sync bit counters between master and slave
*     2     SDO          MOSI    Data coming in
*     3     SDI          MISO    Data going out
*     1     SCLK         CLK     Bit clock
*     5     P/C         gnd after startup
*
* NOTE: I had to invert the EOC pin.  I used a NPN transistor, Base
*      connected to EOC pin, Collector connected to SS(HC11), and
*      pulled up with a 390 ohm resistor. Emitter connected to ground.
*      pretty simple really.
*


#include <6811regs.asm>

ORG MAIN_START

subroutine_initialize_module:
#include <ldxibase.asm>
* X now has base pointer to interrupt vectors

* get current vector; poke such that when we finish we go there
LDD SPIINT,X         ; SPI Interrupt
STD interrupt_code_exit+1   ; fix $0000 at end.

* install ourself as a new vector
LDD #interrupt_code_start
STD SPIINT,X
rts

* variables

variable_temp_word: FDB 0    ; read each byte and store here
variable_head_word: FDB 0    ; after reading 2 bytes move them here
variable_byte_count: FDB 0 ; read first or second byte?
variable_debug_vec:     FDB 0    ; --for now--

subroutine_comp_init:
* put SPI in slave mode
LDAA #%00000100
STAA DDRD
LDAA SPDR        ; read it
* LDAA #$CC ; SPIE, SPE !DWOM, !MSTR, CPOL, CPHA, E/2
LDAA #$C8 ; SPIE, SPE !DWOM, !MSTR, !CPOL, CPHA, E/2
STAA SPCR

LDAA SPSR ; clear SPIF
LDAA SPDR ;

ldaa    #$0f
sta     variable_debug_vec      ; --fornow--debug

CLI
RTS

* interrupt program begins here
interrupt_code_start:
ldaa    #$4f
sta     variable_debug_vec      ; --fornow--debug

LDAA SPDR   ; get our byte
LDAB variable_byte_count
CMPB #0                    ; wouldn't have to
BNE byte2_output
STAA variable_temp_word    ; just save the current byte away
INCB   ; increment byte count
STAB    variable_byte_count
BRA end_out
byte2_output:
STAA variable_temp_word+1  ; save the current byte, and move to
STAA variable_head_word+1
    LDAA    variable_temp_word    ; valid data holding location
STAA    variable_head_word    ;
LDAB #$0
STAB    variable_byte_count
end_out:
LDAA SPSR ; clear SPIF (maybe?)
LDAA SPDR ;

CLI

* end of interrupt program.
interrupt_code_exit:
JMP $0000 ; this gets fixed above







Message has 2 Replies:
  Re: Vector2x SPI interrupt driven code
 
(...) Tom Brusehaver, formerly tgb@bnr.com. (...) 45degrees sounds more like a dinsmore device (compass mechanism, and 4 hall effect transistors). I have them, and they are useful for some things. (...) The vector2x is a compass made by Precision (...) (28 years ago, 5-Mar-97, to lugnet.robotics.handyboard)
  Re: Vector2x SPI interrupt driven code
 
Hey Tom How close is too close? How far away do you have it? Any problems with just pieces of metal, like casters or maybe a gel cel holder. (hint hint) Sounds like a pretty nifty little device. Just wondering if my setup would allow me to use it (...) (28 years ago, 5-Mar-97, to lugnet.robotics.handyboard)

Message is in Reply To:
  Vector2x SPI interrupt driven code
 
Well it works. A couple people have asked for it. Turns out the stupid V2X docs are wrong again! Like the product, but bad docs will kill it! Even if you don't have a V2X, I have seen enough traffic asking about using the SPI for things on the HB, (...) (28 years ago, 5-Mar-97, to lugnet.robotics.handyboard)

6 Messages in This Thread:



Entire Thread on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact

This Message and its Replies on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact
    

Custom Search

©2005 LUGNET. All rights reserved. - hosted by steinbruch.info GbR