CNMAT Flashback

A look back at some items in our archives.

Archive Browser

Browse CNMAT content by type
Book page

Hardware PWM

Enables 2-channel hardware pulse-width modulation control on pins C1 and C2. This can be used to control brightness of LEDs or digital-to-analog conversion.

Book page

SPI

The SPI module is mostly written but still untested. This is some preliminary documentation.

--------

**/spi/enable**

Turn on/off.

------

**/spi/rate**:

Configure clock rate. Fosc /4, /16, /64.

-------

**/spi/mode**:

Configure the transmission waveform. See spec sheet.

- Mode 0: Clock default low, falling edge on data transmit.
- Mode 1: Clock default high, rising edge on data.
- Mode 2: Clock default low, rising edge on transmit
- Mode 3: Clock default low, falling edge on transmit

Book page

Developer Tools

- General Utilities:
- [w:Subversion] repository client.
Recommendation: svnX for Mac OS/X, TortiseSVN for Windows
- catserial.py -- utility for dumping serial port output (in the repository)
- slipserial.py -- utility for dumping a serial slip stream (in the repository)
- A Windoze machine (optional, for some hardware tools)
- USB Analyzer: [cnmat:node/5964]

Book page

uOSC.PIC Source Code Overview

# system/typedefs.h

Defines byte, word, LSB, MSB, etc.

# autofiles/usbcfg.h

Select which variant target to build for (CUI, Bitwacker, etc)

# autofiles/usbdsc.*

Contains the USB descriptor table

# io_cfg.h

Defines pins, pin counts, enable individual modules

# main.c

Starts the program when USB enumeration is completed

# user.c

Contains the main loop of program and i

Book page

PIC18F Hardware

- 5V supply
- Tosc = 48 Mhz clock, Fosc = Tosc / 4 = 12 Mhz instruction rate.
- Program memory: Up to about 16k ROM.
- RAM: 2048 bytes:
- 256 bytes for stack
- 512 bytes for micro-OSC buffers and other data
- 512 bytes for USB endpoint buffers
- 768 bytes for heap
- 16 digital I/O
- 13 analog in
- 4 hardware timers (internal clock, interrupts)
- 2 PWM out / CCP in
- 1 T

Book page

Module Development

Read the source code! Read it again. This is a very concise overview...

1. Make a MODULE\_ENABLE macro flag (io\_cfg.h) -- all of your code should be #ifdef conditional on this flag.
2. Make a file for low-level functions, e.g. user/mything.c
3. Make a file for handling the OSC dispatch, e.g. user/osc\_node_mything.c
4. Define the OSC schema (osc\_schema.c)
5.

Book page

OSC Message Handling

# Unpacking

This can be done in a node dispatch routine. Variables of note:

- osc\_message\_in\_argc : how many arguments in the typetag section
- osc\_message\_in\_len : total message length
- p\_osc_message\_in : pointer to start of message
- p\_osc_message\_in\_tt : pointer to start of typetags (after magic comma)
- p\_osc_message\_in\_data : pointer to start of data section

For figuring out which method was matched in a large tree of nodes:

Book page

SLIP Encoding and Decoding

# SLIP special characters:

#define SLIP_END 0300 // indicates end of packet -- decimal 192
#define SLIP_ESC 0333 // indicates byte stuffing -- decimal 219
#define SLIP_ESC_END 0334 // ESC ESC_END means END data byte -- 220
#define SLIP_ESC_ESC 0335 // ESC ESC_ESC means ESC data byte -- 221

# Double-EN

Book page

Tuesday

+ Tuesday: Gestural Control
- Guest: Keith McMillan (Zeta Music, Octav, TrioMetrik, Beam Foundation, ...)
- Controller museum
+ Gestural Control: CNMAT's online database of controllers
+ History, Benefits and the Present
+ Connectivity
- MIDI
- USB
- OpenSoundControl
- Analog signals
- Audio-

Book page

Wednesday

+ Wednesday: Modularity
- Guest: David Zicarelli (Cycling 74)
- Abstractions/Encapsulation
- Arguments and Attributes
- poly~
+ Building Interfaces
- bpatcher
- pvar
- presentation mode
- jsui
- Big Patch: probablistic, harmonic cloud maker

+ From Tuesday...
+ Audio Analysis
+ Real-time Analysis Tools
- fidd

Book page

Build Configuration

- In MPLAB, select Configure > Select Device, then choose the appropriate processor
- Edit 18fxxxx.lkr and change FILES line to appropriate target processor library
- Edit autofiles/usbcfg.h and change the #define to point to the new target platform (Bitwacker, CUI etc).

Book page

I2C

Implements synchronous master-mode I2C control at 100khz or 400khz (default). Optional "nunchuck" mode automatically polls and decodes data from an attached Wii Nunchuck.

The I2C clock is pin AN10 / B1. I2C data is pin AN12 / B0.

**NOTE:** I2C "open-drain" requires a pull-up resistor placed between the SCL and V+, SDA and V+ (typically, 1-4k ohms).

Pages