I'm trying to work out whether the code below is accurately producing 0-255 values for the ADCIN command which I'm then using in conjunction with Darrel's SPWM_Int.bas, but I can't tell because my Scott Edwards Electronics ILM-216 serial LCD just shows gobbledy-gook. I've jumpered pins 6 & 8 on the LCD to get 9600bps but it's no better than the default 2600 baud.
Can anyone help me out? I bought this serial LCD as my previous one was a parallel one which uses too many pins but it's not much good to me if it can't help me debug.
Scott Edwards Electronics data sheet for the ILM-216 can be seen here.
Code:
' ***************************************************************
' Pin Connections
' ***************************************************************
' RA0 -> Middle arm of trim pot
' RC0 -> LED1
' RC1 -> LED2
' RC2 -> LED3
' RC4 -> Serial LCD output
DEFINE OSC 16 ; Set oscillator 16Mhz
;DEFINE OSC 4 ; Set oscillator 4Mhz
DEFINE ADC_BITS 8 ; Set number of bits in result
DEFINE ADC_SAMPLEUS 5 ; Set sampling time in uS
DEFINE ADC_CLOCK 3 ; Set clock source (3=rc)
' ***************************************************************
' Device Fuses
' ***************************************************************
#CONFIG
__config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF
__config _CONFIG2, _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LVP_OFF
#ENDCONFIG
#DEFINE USE_LCD_FOR_DEBUG ; comment out for non-debug use
' ***************************************************************
' Initialization
' ***************************************************************
OSCCON = %01111000 ' 16MHz internal osc
;OSCCON = %01101000 ' 4MHz internal osc
pause 100
; Use PortA.0 (AN0) for ADCIN (trim pot reading)
ANSELA = %00000001 ; Analog on PORTA.0 (AN0) only
TRISA = %00000001 ; Input on PORTA.0 (AN0) only
;ADCON1 = %01110000 ; Left-justified results in 8-bits; Fosc/8 (2uS @ 4Mhz)
ADCON1.7 = 0 ; Left-justified results in 8-bits; Fosc/8 (2uS @ 4Mhz)
ANSELC = 0 ; Diginal only for all PortC pins
TRISC = %00000000 ; Make all PORTC pins output
#DEFINE USE_LCD_FOR_DEBUG ; comment out for non-debug use
#IFDEF USE_LCD_FOR_DEBUG
LCD_PIN VAR PORTC.4 ' Alias PORTC.4 as "LCD_PIN"
LCD_INST CON 254 ' instruction
LCD_CLR CON 1 ' Clear screen
LCD_L1 CON 128 ' LCD line 1
LCD_L2 CON 192 ' LCD line 2
; LCD_BAUD CON 16780 ' Baud rate/mode 2600bps for ILM-216 2x16 character display
LCD_BAUD CON 16468 ' Baud rate/mode 9600bps for ILM-216 2x16 character display
LCD_PACE CON 1 ' Optional pace value
#ENDIF
' ***************************************************************
' Includes
' ***************************************************************
INCLUDE "DT_INTS-14.bas" ; Base Interrupt System
INCLUDE "SPWM_INT.bas" ; Software PWM module
DEFINE SPWM_FREQ 200 ; SPWM Frequency
DEFINE SPWM_RES 256 ; SPWM Resolution
DutyVars VAR BYTE[3] ; DutyCycle Variables
DutyVar1 VAR DutyVars[0] ; group them in an array for easy access
DutyVar2 VAR DutyVars[1] ; with FOR loops etc.
DutyVar3 VAR DutyVars[2]
ASM
SPWM_LIST macro ; Define Pin's to use for SPWM
SPWM_PIN PORTC, 0, _DutyVar1 ; and the associated DutyCycle variables
SPWM_PIN PORTC, 1, _DutyVar2 ; Notice the underscore before variables
SPWM_PIN PORTC, 2, _DutyVar3
endm
SPWM_INIT SPWM_LIST ; Initialize the Pins
ENDASM
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR1_INT, SPWMhandler, ASM, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
@ INT_ENABLE TMR1_INT ; enable Timer 1 interrupts
adval VAR WORD ; stores ADCIN results
oldDutyVar1 VAR WORD
;_____________________________________________________________________________
DutyVar1 = 0
DutyVar2 = 25
DutyVar3 = 255
#IFDEF USE_LCD_FOR_DEBUG
serout2 LCD_PIN, LCD_BAUD, LCD_PACE, [LCD_INST, LCD_CLR] ; clear screen
pause 5
serout2 LCD_PIN, LCD_BAUD, LCD_PACE, ["DutyVar1:", DEC DutyVar1, " "]
#ENDIF
Main:
ADCIN 0, adval
if adval <> oldDutyVar1 then
oldDutyVar1 = adval
DutyVar1 = adval
#IFDEF USE_LCD_FOR_DEBUG
serout2 LCD_PIN, LCD_BAUD, LCD_PACE, [LCD_INST, LCD_CLR] ; clear screen
pause 5
serout2 LCD_PIN, LCD_BAUD, LCD_PACE, ["DutyVar1:", DEC DutyVar1, " "]
#ENDIF
EndIf
Pause 100
Goto Main
Bookmarks