| |
nickcam.pwp
//
// PicoWeb Project File for "NickCam"
//
// A Web camera bases on Mattel Nickelodeon/Barbie digital cameras.
//
// The August 2000 Circuit Cellar Magazine article which describes
// this PicoWeb project, titled "Look Ma, No PC! A $55 Webcam"
// can be found in PDF format at...
//
// http://www.chipcenter.com/circuitcellar/august00/pdf-0800/c0800blpdf.pdf
//
#define NET_CONFIG_IP /* allow IP address reconfiguration via net */
#define ENABLE_WATCHDOG /* use Atmel watchdog timer hardware */
#undef DEBUGGER /* no debugger firmware */
#define CLOCK 7372000 /* need this clock rate to get 57600 baud rate! */
#define BAUD_RATE 57600 /* serial port baud rate */
// HTML and Java class file
nickcam.htm // default page
nickcam.class
readcam.htm application/octet-stream
resetcam.htm application/octet-stream
grabcam.htm application/octet-stream
// public CGI routines
reset_image.cgi
grab_image.cgi
upload_image.cgi
//------------------ included AVR assembly language follows ---------------
#avr_reset
#avr_slow
#define putchar_serial pmovbi putc_b,0
#define putchar_net pmovbi putc_b,1
#define serial_binary pser_mode 1
#define serial_normal pser_mode 0
;
; keep camera power on my sending ETX about one per second
;
pbegin
putchar_serial ; switch putchar to serial port
serial_binary ; put serial port in binary mode
pputc 0x03 ; send ETX to camera to keep it on
pend
#avr_fast
#avr_asm
.data
SD_CHAR: .skip 1
SD_TEMP: .skip 2
SD_TMO: .skip 2
#define SER_TMO 15000 /* about one second with pcode in .cseg */
.section seeprom
;
; reset_image
;
; reset camera image counter
;
reset_image:
putchar_serial ; switch putchar to serial port
serial_binary ; put serial port in binary mode
pputc 0x02 ; send STX
pputc 'A' ; send reset image counter
pputc 0 ; reset to image 0
pputc 0x03 ; send ETX
get_response:
pmovwi SD_TMO,SER_TMO ; select the timeout period
putchar_net ; switch putchar back to net
pcall serdev_copynet ; copy serial port input to net
pret
;
; grab_image
;
; command camera to grab image (i.e., take photo)
;
grab_image:
putchar_serial ; switch putchar to serial port
serial_binary ; put serial port in binary mode
pputc 0x02 ; send STX
pputc 'G' ; send grab image
pputc 0 ; must be null
pputc 0x03 ; send ETX
pjump get_response
;
; upload image
;
; upload image from camera
;
upload_image:
putchar_serial ; switch putchar to serial port
serial_binary ; put serial port in binary mode
pputc 0x02 ; send STX
pputc 'U' ; send upload image
pputc 0 ; must be null
pputc 0x03 ; send ETX
pjump get_response
;
; serdev_copynet
;
; loop reading chars from the serial buffer and writing to net until
; timeout
;
; SD_TMO (word) = timeout loop count.
;
.text
serdev_nextchar:
pser_getc SD_CHAR ; get a char into buf
pjumpeq serdev_empty ; no more chars!
#if 1
pputcb SD_CHAR ; put char to the net
#else
phexbi [SD_CHAR] ; put hex char value to the net
pputc ' '
#endif
serdev_copynet:
pmovwi SD_TEMP,[SD_TMO] ; reset timeout
pwdr ; reset hardware watchdog timer too
pjump serdev_nextchar ; go get another one
serdev_empty:
psubwi SD_TEMP,1 ; decrement timeout
pjumpne serdev_nextchar ; not yet timed out
serdev_copydone:
pret
Back
|
|
|