Sử dụng PIC10F220 ADC

M

max0412

Guest
Tôi muốn sử dụng ADC của 10F220 để thiết lập chiều dài của một sự chậm trễ.Tôi có thể sử dụng ngang nhau để xác định phạm vi cụ thể của các đầu vào ADC cho một số đó sẽ được chèn vào các chương trình con chậm trễ.Hoặc tôi nên sử dụng liên tục hay là tất cả các sai lầm này và tôi nên làm điều đó bằng cách khác.

Pseudo mã
Mã số:Sense ADC

NẾU ADC <= 1 THEN K = 10

NẾU ADC> 1 <= 2 THEN K = 20

 
Tôi sẽ không sử dụng ADC để tạo ra sự chậm trễ.Trì hoãn có thể dễ dàng được tạo ra trong SW, mà không cần thời gian và mạng bên ngoài và ADC.

Bạn có thể sử dụng TMR0 hay đơn giản là vòng phần mềm để tạo ra bất kỳ sự chậm trễ mà bạn muốn.

 
VVV đã viết:

Trì hoãn có thể dễ dàng được tạo ra trong SW, mà không cần thời gian và mạng bên ngoài và ADC.
 
Nếu bạn cần phải sử dụng một nồi để thiết lập thời gian sau đó ADC là một cách hay để.Bạn có thể sử dụng một hình thức đơn giản, chẳng hạn như một nắp bị tính bởi một kháng biến, do đó, khi chi phí cap đủ, nó gây nên các cổng đầu vào.Nếu bạn có một vài phụ tùng nhập cảng, bạn có thể dùng một switch dil, một cách 4 ta có thể cung cấp cho bạn từ 1-15 giây vv ví dụ.

 
Những gì tôi nhớ là đã có (xem đoạn dưới đây) được sử dụng cho người dùng chọn giá trị của ADC, chuyển đổi con số này vào và chèn nó vào thói quen trì hoãn dưới đây.Người dùng có thể điều chỉnh POT từ bên ngoài bao vây POT sẽ được đánh dấu ở khoảng s tương ứng với độ dài trì hoãn, in trên các bao vây.Giá trị này cần được thông qua với số lần qua delay2 hiện nó s đặt ở 4.

đoạn

Mã số:trì hoãn

movlw 0,4; Số lần thông qua delay2 (Loop Số lượt truy cập)

movwf DC4delay2

movlw 0,180; Offtime

movwf DC3

dly3

decfsz DC3, f

goto dly3dly4

decfsz DC4, f

goto delay2

goto con

 
OK, bây giờ tôi hiểu những gì bạn cần làm.
Tôi nghĩ cách dễ nhất là đây: ADC của bạn sẽ cung cấp một số 0-255, tùy thuộc vào vị trí của nồi.Đó là 256 bước.
Bạn cần một số lượng nhất định các bước, nói 8 hoặc 16.Rất hay để giữ cho họ quyền hạn của hai.Giả sử bạn cần 16 bước.
Vì vậy, bạn tạo ra một sự chậm trễ thường trình cung cấp cho bạn các bước chậm trễ, nói 5ms.Gọi nó Dly_5ms.Tất cả bạn cần là một truy cập mà đếm bao nhiêu 5ms sự chậm trễ để chèn và tải bạn rằng với một số lượng truy cập dựa trên vị trí nồi.

Vì vậy, đi đọc ADC, chia theo 16 và bạn nhận được một số 0-15.nói cách khác, nếu đọc ADC là từ 0 đến 15 kết quả là 0, nếu nó từ 16 đến 31 kết quả là 1, và như vậy.

Thêm vào đó một số không đổi, phụ thuộc vào wha các trì hoãn tối thiểu phải là.Ví dụ, nếu bạn cần một phút chậm trễ của 5ms, thêm 1, nếu chậm trễ tối thiểu phải được 25ms, sau đó thêm 5.Kiểm tra kết quả Ngoài ra để đảm bảo tối đa không được vượt quá.Ví dụ, nếu chậm trễ tối đa là nghĩa vụ phải được 50ms, thì chắc chắn rằng số lượng không lớn hơn 10.

Nếu bạn cần một số bước, chỉ cần chia đọc ADC bởi cái gì khác.Nếu bạn giữ số bước, quyền hạn của hai sau đó bạn có thể chia cho hướng dẫn rrf (Đừng quên để xóa cờ C trước khi rrf mỗi).Trong mã này tôi đã sử dụng một mẹo để chia cho 16 nhanh hơn, nhưng đó là một câu chuyện.

Nếu bạn đặt MAX được nhỏ hơn max # của các bước sẽ cho phép, sau đó bạn giảm số lượng các bước sau, nhưng phần cuối của nồi sẽ không được sử dụng được.Nhìn thấy trong đoạn code dưới đây mà MAX được thiết lập là 10.Cung cấp cho bạn chỉ có 10 bước, nhưng họ vẫn sẽ được vắt ở phần dưới của nồi, không lây lan ra đồng đều.
MIN cũng ngày càng tăng sẽ làm giảm # các bước, để lại nhiều hơn các phần trên của nồi không sử dụng được.

Từ kinh nghiệm của tôi với 10F220 Tôi có thể nói bạn có thể an toàn có 64 bước với cách tiếp cận này.Bất cứ thứ gì thêm sẽ dễ bị lỗi do ADC tiếng ồn.
Tôi khuyên bạn nên sử dụng một nồi 10K kết nối trực tiếp từ VDD đến GND và một quyền 0.1uF mũ trên đầu vào ADC.
Mã số:MIN EQU 1

MAX EQU 10swapf ADDRESS, W; nhận ADC đọc, với Nibbles đổi chỗ;

andlw 0x0F; rõ ràng là 4 bit trên; các hướng dẫn có hiệu quả 2 chia cho 16

movwf Số lượt truy cập; lưu giá trị trong việc truy cập chậm trễ

movlw MIN;

addwf Số lượt truy cập, F; đảm bảo Số lượt truy cập có giá trị tối thiểu lớn hơn 0

movlw MAX; nay là việc kiểm tra

subwf Số lượt truy cập, W; kiểm tra xem Số lượt truy cập lớn hơn MAX

btfsc STATUS, C; nếu không, chúng tôi là OK

goto Del; và đi làm trễmovlw MAX; khác lực Số lượt truy cập vào MAX

movwf Số lượt truy cậpDel: Dly_5ms gọi; chậm trễ 5ms

decfsz Số lượt truy cập, F; thực hiện?

goto Del, nếu không giữ điThực hiện: .........; ở đây làm những gì bạn cần sau khi trễ lập trình
 
Cảm ơn đã chỉ dẫn chi tiết.Đó chính là điều tôi đã được tìm kiếm.

Cuối cùng tôi đã tìm thấy một số ví dụ (Google) tương tự như những gì tôi muốn làm bằng cách sử dụng tìm kiếm bàn, nhưng tôi nghĩ rằng cách bạn đã thể hiện được nhiều hiệu quả hơn.

Những PIC ít's là tuyệt vời!Một chút 6-SỐT-23 PIC loại bỏ được rất nhiều thành phần bổ sung.

 
Trích:Tôi nghĩ khi bạn sử dụng mã số thẻ định dạng là vụ phải được giữ lại.
Xin lỗi đó là một chút lộn xộn
 
Tôi đang gặp khó khăn khi cố gắng để lấy giá trị được lưu giữ trong "Số lượt truy cập" để sử dụng trong các thói quen chậm trễ của tôi.Tôi chạy một số mô phỏng trong PIC10F sim và nó lấy địa chỉ không phải là giá trị được lưu trữ tại địa chỉ?Nó đặt địa chỉ vào W đăng ký không phải là giá trị được lưu giữ tại đó.Xem "HERE !!!!!! Dưới đây.

Tôi đang làm gì sai.Chỉnh sửa - Nevermind I figured it out.VVV the code you gave me for the ADC part works perfectly .Thank You

Tôi đã sử dụng COMAND movfw
VVV ma bạn đã cho tôi cho phần ADC tác phẩm hoàn hảo..
Cảm ơn bạnMã số:danh sách p = 10F220; danh sách các chỉ thị để xác định xử lý

# include <p10F220.inc>; xử lý cụ thể định nghĩa biến__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _MCPU_OFF & _IOFSCS_4MHZ;***** VARIABLE DEFINITIONS

TEMP_VAR UDATA

count1 res 1

count2 res 1

count3 res 1

count4 res 1

count5 res 1

count6 res 1

count7 res 1

count8 res 1

count9 res 1

Số lượt truy cập res 1

cont1 res 1

cont2 res 1

MIN EQU 01h

MAX EQU 0Ah;************************************************* *********************

RESET_VECTOR MÃ 0xFF; đặt lại bộ xử lý vector; Nội RC giá trị hiệu chuẩn được đặt ở vị trí 0xFF bởi Microchip

; Như là một k movlw, với k là một giá trị văn chương.CHÍNH MÃ 0x000

movwf OSCCAL; cập nhật đăng ký với nhà máy sản xuất giá trị calories;******* JUMPgoto CHÍNH

;********* Delay 20msdelay20

movwf cont1; giá trị được lưu trữ tại truy cập được thông qua ở đây

movlw 0,65

movwf count5

movlw 0,237

movwf count6dloop1

btfss GPIO, 0; Test for GP0 cao?

goto SENSE; Không giữ thử nghiệm

btfss GPIO, 3; Test for cao trên GP3?

goto SENSE; Không giữ thử nghiệm

decfsz count6, f; vẫn còn cao, tiếp tục với sự chậm trễ

goto dloop1

decfsz count5, f

goto dloop1

decfsz cont1, f; số lần thông qua sự chậm trễ 20ms

goto dloop1

retlw 0x00;------ Chậm trễ lúc 4 mS 500 MHz"

'

'

;****************** Delay 10us

'

'

;***** Bắt đầu ở đây

; Phần này AN1 cho cấu hình tương tự.
Chiết xuất một giá trị dựa trên anolog đọc và chèn giá trị này vào "Số lượt truy cập".
Giá trị đã được lưu giữ trong "Số lượt truy cập được sử dụng trong các sự chậm trễ 20ms sau đó.CHÍNHmovlw b'10000101 '; CONFIG adc: AN1 Analog đầu vào

movwf ADCON0

movlw 0,20

Gọi Delay10uS

BSF ADCON0, 1; bắt đầu chuyển đổiloop0

NOP

BTFSC ADCON0, 1; chờ HOÀN

GOTO loop0swapf ADDRESS, W; nhận ADC đọc, với Nibbles đổi chỗ;

andlw 0x0F; rõ ràng là 4 bit trên; có hiệu quả chia cho 16

movwf Số lượt truy cập; lưu giá trị trong việc truy cập chậm trễ

movlw MIN;

addwf Số lượt truy cập, F; đảm bảo Số lượt truy cập có giá trị tối thiểu lớn hơn 0

movlw Số lượt truy cập; nay là việc kiểm tra

subwf MAX, W; kiểm tra xem Số lượt truy cập lớn hơn MAX

TÌNH TRẠNG btfss, C, nếu không, chúng tôi là OK

goto start; và đi làm trễmovlw MAX; khác lực Số lượt truy cập vào MAX

movwf Số lượt truy cập;**** Tắt ADC Config GP2 cho tôi / 0 đầu ra

bắt đầu

Clrf ADCON0; ADC OFF

movlw b'11011111 '; rõ ràng tocs

OPTION

BCF OSCCAL, FOSC4; GP2 như I / O!movlw b'1011 '; gp2 như đầu ra

Tris GPIO

Clrf GPIO; bắt đầu GP2 LOW

movlw b'0000 ';*********** Giác quan này là một phần GP0 và GP3 cao nếu cả hai cao, nó vượt qua giá trị được lưu giữ tại "Số lượt truy cập" để 20ms giá trị delay.The được lưu trữ tại "Số lượt truy cập là vụ phải đặt số tiền của lần chậm trễ 20ms được thực hiện.SENSE

btfss GPIO, 0; Test for GP0 cao?

goto SENSE; Không giữ thử nghiệm

goto $ 1

goto $ 1

btfss GPIO, 3; Test for cao trên GP3?

goto SENSE; Không giữ thử nghiệm

movlw Số lượt truy cập; ĐÂY !!!!!!!!!!!

Gọi delay20; tín hiệu cao trên cả sự chậm trễ đầu vào goto

movlw 0,10; Số xung truy cập

movwf count8;***** GP0 và GP3 Cả hai cao cho thời gian bắt đầu dealy outputing 10 xung ở 1Hz.ON

bsf GPIO, 2; GP2 CAO bắt đầu outputing xung 1Hz 10

movlw 0,1; W x 500ms trễ

Gọi Delay500mS;********** Off xung thời gian

Khỏi

bcf GPIO, 2; Gp2 thấp

movlw 0,1

Gọi Delay500mSdecfsz count8, f; xung truy cập

goto ON; không thực hiện giữ đập

movlw 0,1

Gọi Delay500mS; cung cấp chậm trễ cho ổn định.

goto SENSE; thực hiện trở lại và bắt đầu quaEND; Chỉ thị 'cuối của chương trình'

 

Welcome to EDABoard.com

Sponsor

Back
Top