PIC16F676 a jeho A/D převodník

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
bohuš

PIC16F676 a jeho A/D převodník

#1 Příspěvek od bohuš »

Mám opět problém s tímto procesorem a to s nastavením A/D převodníku. Podle datasheetu jsou nastaveny registry správně, ale bohužel stále A/D nefunguje. Analogový vstup je na PA0, referenční napětí je jako Vdd. Prosím o radu s odhalením problému. Děkuji
Přílohy
PIC16F676.JPG
(29.42 KiB) Staženo 210 x
jankop

#2 Příspěvek od jankop »

Pro interní referenci je v příkladu chybně nastaven bit ADCON0 <6> VCFG
Pro spuštění A/D převodu je třeba aktivovat bit ADCON0 <1> GO/DONE (bsf ADCON0,GO), který je pak vhodné testovat na ukončení převodu.
bohuš

#3 Příspěvek od bohuš »

Nastaveno, ale neúspěšně. Stále nechce převádět. Už jsem to vyzkoušel na dvou kusech PICů, tak předpokládám stále chybu někde v programu :cry:
jankop

#4 Příspěvek od jankop »

> Podle datasheetu jsou nastaveny registry správně< Tohle je vcelku dobrý vtip.
Jinak ti nemohu pomoci, protože když pošleš obrázek kousku programu, kde není ani start převodu, ani test jeho dokončení, tak s tím nic nenadělám. Mimochodem, kde ses naučil prezentovat assembler formou JPG? To je fakt hodně ujetý.
bohuš

#5 Příspěvek od bohuš »

No tak sorry za pěknej obrázek. Takhle to bude tedy asi lepší. Převod je odstartován a čeká se na dokončení. Po převodu by se měla hodnota registrů ADRESH a ADRESL dále zpracovávat.

#define GO_AD ADCON0,1

INIT
bcf STATUS,RP0
movlw 0x01
movwf PORTA ; přednastavení PORTu A
movlw 0x07 ; nastaveni PA 0-2 jako I/O
movwf CMCON
clrf PORTC ; přednastavení PORTu B

; ------------------------
bsf STATUS,RP0 ; nastavení BANKY 1
movlw b'000101' ; portA 2-0, 2vstupy, 1vystupy
movwf TRISA
movlw b'000001' ; PA0 jako analog
movwf ANSEL
movlw b'000000' ; portB 7-0, 0vstupy, 8vystupy
movwf TRISC

movlw b'11010000' ; PULL-UPy OFF, preddelic=1:32 pripojen k TMR0
movwf OPTION_REG ; f:4 :64 :156 = 100,1Hz (100us)

movlw b'00010000'
movwf ADCON1

bcf STATUS,RP0 ; nastavení BANKY 0
; ------------------------
movlw b'10000001' ;
movwf ADCON0


Převod :

bsf GO_AD
btfsc GO_AD
goto $-1
movf ADRESH,F
andlw 0xFF ; zamaskování bitů
movwf op_A+1
bsf STATUS,RP0
movf ADRESL,F
bcf STATUS,RP0
jankop

#6 Příspěvek od jankop »

#define GO_AD ADCON0,1 ; použij raději #include <P16F676.INC> processor specific variable definitions
Použitím standardních parametrů si budeme lépe rozumnět.



bsf GO_AD
btfsc GO_AD
goto $-1
movf ADRESH,F ; Tak tohle asi ne ??? !!!
andlw 0xFF ; zamaskování bitů
movwf op_A+1
bsf STATUS,RP0
movf ADRESL,F ; A tohle taky ne !!!
bcf STATUS,RP0
Uživatelský avatar
tatous
Příspěvky: 122
Registrován: 06 zář 2004, 00:00
Bydliště: Střední Čechy

#7 Příspěvek od tatous »

prevod by Ti mel takle chodit

; ADC Start
ADC
BSF GO_AD ; ADC start
ADCgo
BTFSC GO_AD ; je 0?
GOTO ADCgo ; ne zpět
movfw ADRESH ; ano načti a
movwf op_A+1 ; ulož do reg
bsf STATUS,RP0 ; Bank1
movfw ADRESL ; načti a
bcf STATUS,RP0 ; Bank0
movwf op_A+2 ; ulož do reg
return
jankop

#8 Příspěvek od jankop »

>movfw ADRESH ; ano načti a<
Tož tohle můj assembler nezná
bohuš

#9 Příspěvek od bohuš »

No super, už to vidím <movf ADRESH,F>, to je ale ptákovina. Děkuji všem za příspěvky, už to chodí. Tak dlouho jsem hledal chybu v nastavení registrů ADCON0, ADCON1 a ANSEL až jsem úplně přehlídl takovou "MALIČKOST"
Uživatelský avatar
tatous
Příspěvky: 122
Registrován: 06 zář 2004, 00:00
Bydliště: Střední Čechy

#10 Příspěvek od tatous »

pro jankop :
patrně používáš jiný překladač, MPLab přeložit pseudoinstrukce umí. >movfw ADRESH<
je pseudoinstrukce k
>movf ADRESH,w <
Velmi dobře je to popsáno v KTE 8/2002 v "Miniškole programování PIC"
do pana M. Hrona.
jankop

#11 Příspěvek od jankop »

Ano, máš pravdu, tato pseudoinstrukce je v základním souboru MPLABu.
Nevěděl jsem to.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“