I am way over my head here. Pic 16F877A sending data to a dual DAC. Any ideas or referrals to information will be appreciated.
I need a 10 bit signal, first 2 bits select the pot, 00, or 01. The next 8 are data bits.
[a1][a0][d7][d6][d5][d4][d3][d2][d1][d0]
The first two bit select pot 1 or 2. Here is the code. Keep in mind that I am a novice.
DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 10
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTC 'defines
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 0
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 100
DEFINE OSC 20
DEFINE BUTTON_PAUSE 250
DEFINE CHAR_PACING 1000
SSPCON = 5
INCLUDE "MODEDEFS.BAS"
'symbols
SYMBOL UP = PORTD.1:SYMBOL DOWN = PORTD.3:SYMBOL CS = PORTD.4
SYMBOL RS = PORTD.6:SYMBOL SDO = PORTC.5:SYMBOL SHDN = PORTD.5
'VARIABLES
B0 VAR BYTE:ADJ1 VAR BYTE
ADJ1 = 0
HIGH SHDN
HIGH RS
LOOP:
BUTTON UP,1,250,250,b0,1, PLUSVOLTS
BUTTON DOWN,1,250,250,b0,1, MINUSVOLTS
GOTO MON
MON:
LCDOUT $FE, 1
lcdout $FE, 2
lcdout DEC ADJ1
PAUSE 25
GOTO LOOP
POTCHANGE: 'CHANGES POT SETTING
LOW CS
SEROUT SDO, 0, [01, ADJ1]
HIGH CS
GOTO LOOP
PLUSVOLTS:
adj1 = adj1 + 1
IF ADJ1 > 255 THEN ADJ1 = 255
GOTO POTCHANGE
MINUSVOLTS:
adj1 = adj1 - 1
IF ADJ1 < 1 THEN ADJ1 = 0
GOTO POTCHANGE
END
Bookmarks