Hallo,
ik wil een ADC uitlezen (TLC1549) daarvoor gebruik ik portb (CS 0p b.7 Clk op b.6 en data op b.5).
Als ik met een scoop de uitgang van ADC bekijk zij ik precies wat ik wil zien (namelijk de gedigitaliseerde waarde van de analoge ingang
), ik heb dan de datalijn niet aan gesloten op de pic. Als ik dit wel doe in ik kijk op mijn scoop dat zie ik hooguit wat gerommel in de marge maar de eenen en nullen van zo net zijn weg.
TRISB heeft als waarde $20 dus alle bits zijn een output behalve bit 5 dat is een input verder heb ik option_reg.7 de waarde 1 gegeven. Ik heb al gebropeerd andere ingangen te gerbuiken (wel allemaal op portb) maar helaas zonder het beoogde resultaat. Heeft iemand een idee wat er mis kan zijn (Ik gebruik micropascal om de piuc te proggen i.c.m. wat asm als het snel moet of beter kan
)
procedure interrupt;
begin
_word_pos:=word_pos;
_teller:=teller;
if Pir1.TMR1IF=1 then
begin
Pir1.TMR1IF:=0;
TMR1H:=$E0; // preload timer1 met $EBFE
TMR1L:=$FE;
if status_byte.flag =1 then
begin
asm //read ADC
bcf portb,adc_ld
nop
nop
nop
nop
nop
nop
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_clk
nop
bcf portb,adc_clk
nop
bsf portb,adc_ld
movlw 40
movwf _teller
L1:
decfsz _teller ,f
goto L1
bcf portb,adc_ld
nop
nop
nop
nop
nop
nop
nop
clrf _word_pos
clrf _word_pos+1
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos+1,1
bcf portb,adc_clk
nop
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos+1,0
bcf portb,adc_clk
nop
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos,7
bcf portb,adc_clk
nop
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos,6
bcf portb,adc_clk
nop
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos,5
bcf portb,adc_clk
nop
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos,4
bcf portb,adc_clk
nop
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos,3
bcf portb,adc_clk
nop
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos,2
bcf portb,adc_clk
nop
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos,1
bcf portb,adc_clk
nop
bsf portb,adc_clk
btfsc portb,adc_dta
bsf _word_pos,0
bcf portb,adc_clk
bsf portb,adc_ld
end;
//zet de waarde van de ADC op de PWM uitgang
CCP1CON.4:=word_pos.0;
CCP1CON.5:=word_pos.1;
CCPR1L:=word_pos shr 2;
end;
status_byte.flag:=status_byte.flag xor 1;
portb.1:=portb.1 xor 1; //altijd een ledje laten knipperen
end;
end;
//Main prog
begin
TRISA := $01;
ADCON1 := 6;
TRISB := $20;
Option_reg.7:=1;
PIE1.0:= 1; // 'enable TMR1 interupts
INTCON.6 := 1; // 'enable all unmasked interrupts
INTCON.7 := 1; // 'enable Global interrupts
PIR1.0 := 0; // 'reset interupt flag
T1CON.0 := 0; // 'stop the timer
TMR1H := $E0; // 640 Hz
TMR1L := $FE;
T2CON := %00000101;
CCP1CON:=%00001100;
pr2 := 255; //PWM = 7.82 KHz 10 Bits
T1CON.0 := 1;//start timer1
while true do
begin
end;
end.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik ken micropascal niet, maar moet je niet eerst de goede registerbank kiezen voordat je TRISA,B zet? (bank 1)