Як зробити зчитувач коду iButton DS1990
Ви переглядаєте архів форуму.
Автор: Roma () Дата: 16/11/2003 19:37
Доброго часу доби всім! Я чайник. Позавчора в мене замиготіли перші світлодіоди, а сьогодні у мене виникло бажання зробити зчитувач серійного номера iButton DS1990 на PIC18F452 (такий вже процесор я вибрав для експериментів, не знаю правильно чи ні. ) З електричною частиною проблем немає. А ось простий приклад програми для зчитування серійника я не знайшов, всі якісь громіздкі, і я не в змозі через свою глибоку чайнікуватості виділити з них блок коду, що відповідає за алгоритм зчитування. Може хто підкаже, чи заслання кине? Потрібно вважати серійник і помістити його куди- нибудь.Заранее всім дякую.
Автор: GRR () Дата: 17/11/2003 08:22
Сходи на www.elin.ru. Там є опис, посилання.
Автор: [email protected] () Дата: 19/11/2003 05:30
Вихідник прикладу на Сі я вже викладав у цій конференції, шукай.
Автор: Roma () Дата: 19/11/2003 13:01
Дякую. Начебто вже розібрався. Там виявляється не так складно. Поки щоправда не працює. Але це, на мою думку, питання часу.
Автор: Alexander () Дата: 19/11/2003 13:45
"Запрошеної Вами сторінки /search/read.php?f=2&i=26032&t=846 не існує" - Ось це я отримав після пошуку. Чи не можна отримати вихідний код по е-мейлу [email protected]. Заздалегідь дякую.
Автор: Roma () Дата: 19/11/2003 16:58
Якщо питання до мене, то я не скористався вихідником. Я не знаю Сі, тому пишу з нуля в асемблері. Поки не працює. Половина ключів не відповідають.
Автор: Roma () Дата: 19/11/2003 17:01
До речі,пошук тут підглючує. Сторінку не знайдено, якщо шукати по верхній кнопці (пошук сайтом). А по нижній (пошук по конфі) все знаходить.
Автор: Zemfir () Дата: 19/11/2003 17:29
> До речі, пошук тут підглючує. Сторінка не знайдена, > якщо шукати по
> верхній кнопці (пошук сайтом). А по нижній (пошук по конфі) > все знаходить. >
Це різні пошуки, який зверху шукає по сайту, як я розумію по хтмлках, а нижній тільки по конфе:)))
Автор: Roma () Дата: 19/11/2003 21:29
Зчитувач iButton підключений за стандартною схемою (4,7к резистор до плюсу) до ноги 6 процесора PIC18F452 (RA4 – відкритий колектор). Публікую вихідний текст. Заздалегідь вибачаюсь, як чайник, за якісь незрозумілі гуру дурні ходи, мій стаж програмування PICів близько тижня. У всьому, крім алгоритму підрахунку контрольної суми (її я взяв тут: http://icmicro.narod.ru/source/index.htm), довелося розбиратися самому. Але головне – запрацювало! Програма зчитує таблетку та, у разі вдалого зчитування, запускає підпрограму DysplayIT. Лічені байти зберігаються у відповідних змінних.
Може комусь знадобиться.
Автор: Alexander () Дата: 20/11/2003 02:25
Подивився на творчість "чайника" і вирішив помістити "аналогічний витвір" - отже. займаюся АСМ-мом 2 години, а вже чого накрапав.
; XDCR.ASM ; ; Ці routine постійно executes ranging cycles в the ; following order: ; ; 1) Timers and Flags є cleared ; 2) Ranging Cycle Executes ; 3) Distance is Calculated (to 0.5 inch) ; 4) HW is re-initialized for next cycle ; ; Проектор використовує 4MHzосцилятор, тому всі синхронізації ; розрахунки посилаються на це. Розрахований ; відстань є 16-бітним результатом у регістрах ACCbHI:ACCbLO. ; ; Програма: XDCR.ASM ; Дата перегляду: ; 1-22-97 Сумісність з MPASMWIN 1.40 ; ;
СПИСОК P=16C74 ; НОЛІСТ ВКЛЮЧАТИ
TEMP equ 0x30 ;Тимчасове місце зберігання TEMP1 equ 0x31 ;Тимчасове місце зберігання TEMP2 equ 0x32 ;Тимчасове місце зберігання TEMP3 equ 0x33 ;Тимчасове місце зберігання COUNT1 equ 0x34 ;Тимчасовий реєстр підрахунку COUNT2 equ 0x35 ;Тимчасовий реєстр підрахунку ; #DEFINE XDCR ; Прапор для умовної збірки тестового коду ; у файлі DBL_DIVF.ASM. Директива END ПОВИННА бути ; закоментовано у файлі DBL_DIVF.ASM ; ;**************************************************** ************************ СПИСОК
;******************** ; Банк 0 Реєстри ;******************** ; ; TMR1 вимкнено, Prescaler — 1 для тайм-ауту захоплення 65 мс clrf T1CON ; Налаштуйте зйомку на кожному передньому краї movlw 0x05 movwf CCP1CON ; Очистіть порти clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE ; ;******************** ; Банк 1 Реєстри ;******************** ; bsf STATUS,RP0 ; Встановити RP0 ; Порт A цифровий, порт E цифровий movlw 0x07 movwf ADCON1 ; Налаштуйте CCP1 (RC2) як вхід і всі інші порти ; як виходи, (RE0 = INIT, RE1 = BINH) clrf TRISA clrf TRISB movlw 0x04 movwf TRISC clrf TRISD clrf ТРІСЕ bcf STATUS,RP0 ; Очистити RP0 Xdcr ; ; Ініціалізація таймерів і прапорів ; bcf T1CON,0 ; Вимкнути TMR1 clrf PIR1 ; Очистити прапор переповнення Timer1 & Таймер1Прапор захоплення clrf TMR1L ; Очистити TMR1L clrf TMR1H ; Очистити TMR1H clrf CCPR1L ; Очистити CCPR1L clrf CCPR1H ; Очистити CCPR1H bsf PORTE,0 ; Встановіть INIT High на модулі діапазону bsf T1CON,0 ; Увімкнути TMR1 виклик DEL_9 ; Затримка 0,9 мс для стабілізації датчика bsf PORTE,1 ; Увімкнути датчик для отримання (BINH) chk_t1 btfsc PIR1,2 ; Перевірте захоплення goto chk_done ; Стрибок, якщо захоплення btfss PIR1,0 ; Перевірте переповнення TMR1 goto chk_t1 ; Цикл, якщо нічого не сталося bcf T1CON,0 ; Вимкніть TMR1 goto ovr_flo ; Подія захоплення не відбулася chk_done ; ; Обчисліть відстань до роздільної здатності 0,5 дюйма ; bcf T1CON,0 ; Вимкніть TMR1 movf CCPR1L,W ; Перемістіть LSB у W movwf ACCbLO ; Перемістіть LSB в ACCbLO movf CCPR1H,W ; Перемістіть MSB у W movwf ACCbHI ; Перемістіть MSB в ACCbHI movlw 0x4A ; Перемістіть 75 мкс/0,50 дюйма в W movwf ACCaLO ; Перемістіть LSB в ACCaLO clrf ACCaHI ; Очистити MSB (ACCaHI) викликати D_divF ; Виклик 16-бітної/8-бітної процедури ; яка описана в ; Примітка до програми 544 movlw 0x25; Перевірте залишок, щоб побачити, чи є subwf ACCcLO,W ; ми повинні округлити. btfsc STATUS,C ; Якщо залишок < (0,5 * дільник), пропуск incf ACCbLO,F ; Округлити btfsc STATUS,Z ; Перевірте молодший байт для обертання incf ACCbHI,F ; Якщо LSB загорнутий, збільшити старший байт btfss STATUS,Z ; Перевірте старший байт для обертання goto done ; Старший байт не перенесено ovr_flo clrf ACCbLO clrf ACCbHI зроблено виклик DEL_100 ; Зачекайте 100 мсек перед очищенням HW. bcf PORTE,0 ; Вимкнути INIT bcf PORTE,1 ; Вимкнути BINH виклик DEL_100 ; Зачекайте 100 мс, перш ніж увімкнути HW. перейти до Xdcr
НОЛІСТ ВКЛЮЧИТИ "DBL_DIVF.ASM" СПИСОК
DEL_9 movlw 0x02; встановитиCount2 for 0.9 msec delay movwf COUNT2 movlw 0xE0; Set Count1 for 0.9 msec delay movwf COUNT1 del_binh incfsz COUNT1, F goto del_binh decfsz COUNT2, F goto del_binh nop return
DEL_100 movlw 0x82 movwf COUNT2 clrf COUNT1 del_low incfsz COUNT1, F goto del_low decfsz COUNT2, F goto del_low nop return