Informazioni sulla programmazione dell'interfaccia QuickScan versione 1 Seguono alcune prove che ho effettuato con l'interfaccia versione 1, in streaming video direttamente dalla camera allo schermo del C64. Modo SCPU C64 base ------------------------------------------------------------------ 80x50 4 Livelli di grigio 20-30 FPS?? 160x100 4 Livelli di grigio 5.5 FPS 1.5 FPS 320x200 F-S 16 Livelli di grigio 1 FPS 17 sec/frame 320x200 MCMLace 16 Livelli di grigio 1 FPS 18 sec/frame svanisce ;-( La camera fornisce sempre immagini a 16 livelli di grigio, fino a quando non gli dico di passare al modo grigio del 64, che comunque non reputo necessario. Non è possibile registrare il video direttamente su disco, a meno che si disponga di un driver personalizzato che eviti l'uso dei seguenti: CIA #1 Timer A CIA #2 Timer A CIA #1 hardware Serial Port CIA #2 hardware Serial Port CIA #2 Port A, bits 2 (PA2) e 3 (Serial /ATN) CIA #2 Port B (tutti i bits) L'interfaccia ha bisogno di tutte le linee di controllo che può avere, cioè la linea Serial ATN e le due Porte hardware Shift-Register Seriali, oltre alle altre già indicate. Le due porte seriali sono impostate come semplice linea di controllo ad un bit. I timers associati (CIA #1 e #2 Timer A) sono impostati a 4 cicli per rendere il tempo di risposta delle linee il più veloce possibile. Sono sempre entrambe ad uno stato alto oppure basso, non usate quindi per l'invio di dati seriali. Serial Port #1 è usata come linea di Camera /Reset, e si mantiene alta durante l'operatività normale. Essa passa da basso ad alto 2 volte all'avvio del mio codice, per resettare la camera. PA3 deve essere basso per assicurare un chiaro reset. Serial Port #2 è usata come linea di bus select. Quando è alta, imposta il 4066 analog switch per avere il 4-bit video bus della Camera nella porta, per leggere il dato video ed i parametri command/register via Port B bits 3-0. Essa è mantenuta bassa quando vengono inviati comandi via Port B (tutti 8 bits). La linea PA2 è una linea di "sense" che proviene dalla camera, e traccia il segnale di handshake "Cam_Rdy1" della camera. La linea PA3 (Serial /ATN) è usata per dire alla camera che un byte è pronto per essere letto dalle linee della Port-B, cambiando lo stato della linea "PC_Ack". Il metodo two-stage handshake della Camera è quello che rende necessario l'uso di due linee software-controllate per avere l'handshake del segnale. Questo spiega il perchè tutto gira lentamente con l'interfaccia versione 1. Occorre inviare 7 comandi alla camera per inizializzarla: Auto Calibrate Black Level, Set Exposure Time, Set Contrast, Set Frame Top Edge, Set Frame Left edge, Set Frame Height, e set Frame Width. Fatto questo, rimane solo da inviare il comando Video Frame e leggere il dato immagine per ottenere ogni nuovo fotogramma del video. Tutte le impostazioni possono cambiare in qualsiasi momento - causa gli utili comandi Contrast e Exposure. Il Black level è utile in condizioni di bassa luminosità per avere dettagli non accessibili dalle sole impostazioni di Luminosità e Contrasto. Inviare un comando e parametro ------------------------------- 1) Impostare la QuickScan in Write Mode (settare SP2 basso scrivendo uno zero nello shift register in CIA #2) 2) Mettere il byte comando nella Port B 3) Settare PA3 alto 4) Aspettare che PA2 diventi alto 5) Settare PA3 basso 6) Attendere che PA2 vada basso. 7) Mettere il byte del parametro di comando nella Port B 8) Settare PA3 alto 9) Attendere che PA2 diventi alto 10) Settare PA3 basso 11) Attendere che PA3 diventi basso 12) Fine. The camera offers an echo byte for every byte send when in Write Mode, via it's 4-bit video bus. I ignore these offerings, as they require way too much bandwidth and don't serve any useful purpose. Getting a frame of video data ----------------------------- 1) Inviare il comando "Send Video Frame" ed il suo parametro associato alla camera utilizzando la procedura soprastante. La camera esporrà un frame nella sua matrice CCD per una quantità di tempo impostata da comando Exposure. L'immagine verrà quindi immagazzinata in un frame buffer in perdita, dando al computer 5 secondi circa per leggere l'intero frame (dopo questo tempo l'immagine inizia a svanire). 2) Impostare il Read Mode (Pilotare SP2 alto scrivendo #$FF nello shift register) 3) Iniziare un loop: attendere che PA2 diventi basso 4) Leggere il nybble presente nella Port B bits 3-0 e salvarlo 5) Settare PA3 alto 6) Attendere che PA2 diventi alto 7) Leggere il nybble presente nella Port B bits 3-0, e salvarlo 8) Settare PA3 basso 9) Ripetere il loop fino a quando l'intero frame è stato letto 10) Settare PA3 alto 11) Attendere almeno 4 microsecondi 12) Settare PA3 basso 13) Fine