Oscilloscope Circuit
Finally, putting everything together completed the oscilloscope circuit. The parts required were:
- MC6802 MPU
- OKI 28C16A ROM
- (3) LS373 Latch
- LS183 Decoder
- 0804 ADC
- LCD Display
And combining the ADC circuit with the LCD circuit yielded the following flow chart:
Before wiring everything up, I needed to decide what addresses would map to what peripherals. So I created an address map:
With this finished, the schematic diagram was not too difficult to create:
Unfortunately, as I mentioned above, I couldn’t get the LCD to function properly. no matter what program I used, it seemed to output garbage. Regardless, here’s the final code I used (although it still didn’t operate the LCD properly).
;===============================================+
; Albert Gural |
; 05/31/11 |
; Analog to Digital to LCD Display Output |
; To Create a Simple Oscilloscope |
;===============================================+
ADC = $$4000 ; Analog to Digital Convertor
LCDC = $$8000 ; LCD Control Pins (Data: {0: D/I, 1: CS1, 2: CS2})
LCDD = $$8100 ; LCD Data Pins (Data: {x: x})
LCDG = $$0100 ; LCD to latches (enact latches on LCD)
.area MAIN (ABS)
.org $$0100
main: ; Start of Program
LDS #$$007F ; Set start address of the stack
init: ; Set up the LCD
; Turn On Monitor
LDAB #$$02 ; load 0000,0010
LDAA #$$3F ; load 0011,1111
STAB LCDC ; set lcd to data/CS1
STAA LCDD ; store in data latch
; Display Start Line
LDAA #$$C0 ; load 1100,0000
STAA LCDD ; set lcd data
; Set Page (X)
LDAA #$$B8 ; load 1011,1000
STAA LCDD ; set page 0
; Set Address (Y)
LDAA #$$40 ; load 0100,0000
STAA LCDD ; set address 0
; Reset data
LDAA #$$00 ;
STAA LCDD ; set data to 0
; Set LCD in write mode
LDAA #$$03 ; load 0000,0011
STAA LCDC ; turn LCD to write mode
loop: ; Continuously put ADC into LCD
LDAA #$$40 ; load 64
loop2: LDAB #$$AA;ADC ; Take data from the ADC
STAB LCDD ; Store it in the LCD's Data
BSR pause ; pause for a small amount of time
DECA ;
BEQ endloop ;
BRA loop ; loop
endloop: LDAA #$$00 ; generic operation
BRA endloop ; infinite loop end
pause: LDAB #$$FF ; Count down from FF
p2: DECB ;
BEQ p3 ; If == 0, branch to return
BRA p2 ; else loop
p3: RTS ;
Conclusion
I was successful in getting many peripherals working with the MPU, but the LCD didn’t seem to want to cooperate. Maybe if I’d had a bit more time, I could have gotten it working.
In any case, I need to thank several people for their help on this project. My partner was Sarah, who helped with a lot of documentation as well as circuit wiring. Nick and Ned were two students in the class who knew way too much about electronics. Their suggestions and help were invaluable. Finally, thanks to Mr. Montgomery and Mr. Bell, the two lab directors/teachers for this course.
Also, this was a class project, so an associated presentation exists:


