|
[ На главную ] -- [ Список участников ] -- [ Правила форума ] -- [ Зарегистрироваться ] |
On-line: |
Gauss2k - gauss gun у тебя дома / Электроника и Электротехника / Микроконтроллеры, LCD и все, что с ними связано. |
Страницы: << Prev 1 2 3 4 5 6 Next>> |
Автор | Сообщение | |
aves Группа: Участники Сообщений: 2 |
Добавлено: 08-07-2009 18:46 | |
Добрый день. Собрал хроноограф, работает нормально. Оптопары скорость более 400 уже не засекают. самое максимальное зафиксированое значение 373 м/с. Правда я даже не знаю какие ИК приемники поставил. Выдрал из старого дисковода. Спасибо за конструкцию. |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 08-07-2009 21:57 | |
С этого надо было начинать. Документацию почитать, выбрать что побыстрее из того, что есть в продаже... |
||
aves Группа: Участники Сообщений: 2 |
Добавлено: 09-07-2009 06:48 | |
руки сильно чесались, хотелось попробовать. Сейчас неторопясь доделаю. Ну и в продаже встретил в основном фотодиоды и фоторезисторы, фототранзисторов нет в наличии, а с пересылкой долго заморачиватся, ну и воткнул, что было под рукой. |
||
max частый гость Группа: Участники Сообщений: 29 |
Добавлено: 29-07-2009 15:28 | |
на аиргане появился хронолайт с ЖКИ есть и прошивка и плата,себе уже сделал все ОК,сохраняет вроде 60замеров в прошивке можно менять базу ссылка http://airgun.org.ru/forum/viewtopic.php?f=35&t=14100&start=950 |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 31-07-2009 20:51 | |
Качнул прошивку ту. Исходников нет я так понял, хотя не читал все 40 страниц.. не осилил пока, начал с конца т.к. времени нет и до компа еле добираюсь. Кстати, эту прошивочку могу дизасемблировать в читабельный вариант для дальнейшего переделывания и компилирования мплабом. Лан, спасиб за ссылку, ещё почитаю там. А вообще я смотрю на аиргане эта тема весьма популярна, только непонятно почему там сразу не пошли путем LCD а заморочались на лидах... З.Ы. Чтобы кинуть комменты, спецом регится на том форуме не буду. Прокомментирую пару постов тут, а вам, уважаемые читатели, самим делать выводы! kimad
Не в исходниках дело! Эти исходники легко получить из готовой прошивки, но могу вам несколько облегчить жисть и выложу их в конце поста. Дрочите наздоровье на них Без обид только. Проект не комерческий, в отличии от некоторых я не пытаюсь на этом сколотить состояние. Так вот, я просто раньше уже эту тему поднимал на форуме (я насчет исходников) и никто ничего не предложил конкретного по усовершенствованию кода и заморачивался самостоятельно читая книжки. Короче та тема так и похерилась... кажись была на старом форуме. Вот в новой теме я не стал заморачиваться особо текстами т.к. вижу, что народ не испытал интерес. julbu
Уважаемый, извините, но по ходу это все панты без аргументов. Схватывание в данном случае будет напрямую зависить от ваших оптодатчиков, а программа хватает нормально, что подтвердилось протеусом и полевыми испытаниями из разных пуколок (правда больше 600 м/с я не стрелял т.к. то уже жесткий огнертрел и требует определенной конструкции датчиков). Так вот эти комменты я считаю просто очередным пиаром хронолойта! Не стоит обсирать то, чего не пробовал. Хотите помочь, указывайте на ошибки и варианты их исправления т.к. проект народный, а хотите денег, то оставте свои комменты при себе. Прошифко: ;; Хронограф с выводом результата на LCD дисплей (8х2 в одну строку) и COM порт. ;; Распиновка микросхемы ;; PIN I/O FROM TO ;;---------------------------------------------------------------------- ;; A0 O E LCD E ;; A1 O RS LCD RS ;; A2 I BIT 2 SENSOR_1 ;; A3 I BIT 3 SENSOR_2 ;; A4 O ;; A5 O ;; A6 O ;; A7 O ;; ;; B0 0 ;; B1 I RS232 RX PC RX ;; B2 O RS232 TX PC TX ;; B3 O ;; B4 O BIT 4 LCD BIT 4 ;; B5 O BIT 5 LCD BIT 5 ;; B6 O BIT 6 LCD BIT 6 ;; B7 O BIT 7 LCD BIT 7 ;;---------------------------------------------------------------------- list p=16F628A #include <P16F628A.INC> #include <shorts.inc> __CONFIG _LVP_OFF & _MCLRE_OFF & _XT_OSC & _BODEN_OFF & _CP_OFF & _WDT_OFF & _PWRTE_ON ERRORLEVEL -302 #DEFINE E PORTA, 0 ;; OUTPUT TO LCD #DEFINE RS PORTA, 1 ;; OUTPUT TO LCD #DEFINE SENSOR_1 PORTA, 2 ;; INPUT #DEFINE SENSOR_2 PORTA, 3 ;; INPUT CBLOCK 0X20 CNTJ ;; FOR MS_DELAY ; BIT8, CNT1, CNT2, TEMP_MUL, HI16, LO16 ;; FOR MUL_BY_1000 MS_TIME, MS_TIME_TEMP LO_BYTE, HI_BYTE ;; FOR LCD DRIVER CHAR ;; FOR DATA CONVERTION TEN_K, THOU, HUND, TENS, ONES DIVIDEND1, DIVIDEND2, DIVIDEND3, DIVISOR1, DIVISOR2 DVDEND_HI, DVDEND_LO TIME_HI, TIME_LO, NUMH, NUML IF_ERROR ;; Признак ошибки ENDC ACC EQU 0x5C ; Most significant Byte SIGN EQU 0x62 ; save location for sign in MSB TEMP EQU 0x68 ; temporary storage DIVIDEND EQU 0x5C ; Most significant Byte DIVISOR EQU 0x65 ; Most significant Byte REMAIN EQU 0x60 ; Most significant Byte LOOPCOUNT EQU 0x63 ; loop counter ORG 0x000 CALL init_pic GOTO MAIN ORG 0x004 GOTO int_t init_pic ;----------------------------PORT I/O CONFIGURATION/SETUP------------------------------- BANK0 MOVLW 0X07 MOVWF CMCON ;; DISABLE CAPTURE/COMPARE MODULES. BANK1 LOADF TRISA, B'00101100' LOADF TRISB, B'00000110' ;; SET BITS 1, 2 FOR USART. BSF OPTION_REG, NOT_RBPU ;; BCF/BSF = ENABLE/DISABLE PULL-UP. ;------------------POWER ON RESET CONFIGURATION/SETUP-------------------------- BSF PCON, OSCF ;BCF/BSF = 37KHZ/4MHZ INTRC OR ER OSCILLATOR SPEED. ;--------------------------INTERRUPT CONFIGURATION/SETUP------------------------------- ; BANK1 ; BCF INTCON, GIE ;BCF/BSF = DIS/ENABLE GLOBAL INTERRUPT. ; BCF INTCON, PEIE ;BCF/BSF = DIS/ENABLE Разрешение прерываний от переферийных модулей ; BCF INTCON, T0IE ;BCF/BSF = DIS/ENABLE Разрешение прерывания по переполнению TMR0 ; BCF INTCON, INTE ;BCF/BSF = DIS/ENABLE RB0 INTERRUPT. ; BCF INTCON, RBIE ;BCF/BSF = DIS/ENABLE RB7-4 INTERRUPT. BSF PIE1, TMR1IE ;BCF/BSF = DIS/ENABLE Разрешение прерывания по переполнению TMR1 ;-------------------------------------------------------------------------------------- ;-------------------------USART CONFIGURATION/SETUP------------------------------------ BANK1 BCF PIE1, TXIE ;BCF/BSF = DIS/ENABLE TX INTERRUPT. BSF TXSTA, CSRC ;BCF/BSF = EXT/INTERNAL GENERATOR. BCF TXSTA, TX9 ;BCF/BSF = 8-BIT/9-BIT TRANSMISSION. BSF TXSTA, TXEN ;BCF/BSF = DIS/ENABLE TRANSMISSION. BCF TXSTA, SYNC ;BCF/BSF = A/SYNCHRONOUS MODE. BSF TXSTA, BRGH ;BCF/BSF = LO/HI SPEED BAUD RATE SELECT. LOADF SPBRG, .12 ;SET BAUD RATE TO 19.2 KBPS. BANK0 BSF RCSTA, SPEN ;BCF/BSF = DIS/ENABLE SERIAL PORT. BCF RCSTA, RX9 ;BCF/BSF = 8-BIT/9-BIT TRANSMISSION. BSF RCSTA, SREN ;BCF/BSF = DIS/ENABLE SINGLE RECEIVE. BCF RCSTA, CREN ;BCF/BSF = DIS/ENABLE CONTINUOS RECEIVE. BSF RCSTA, SPEN ;BCF/BSF = DIS/ENABLE SERIAL PORT. ;-------------------------------------------------------------------------------------- RETURN ;*********************MAIN*********************** MAIN: CALL INIT_LCD ERR_TEST: CALL CLEAR CALL GET_ERROR BTFSC IF_ERROR, 7 GOTO ERR_TEST CALL CLEAR CALL LCD_1 GET: CALL GET_VELOCITY CALL SEND_USART CALL LCD_UPDATE GOTO GET ;*****************END 0F MAIN****************** int_t BCF T1CON, TMR1ON ;BCF/BSF = DISABLE/ENABLE TIMER1 ON. BCF PIE1, TMR1IF ;BCF/BSF = DISABLE/ENABLE Разрешение прерывания по переполнению TMR1 CLRF TMR1L ;; THEN, START TIMING. CLRF TMR1H MOVF_F TMR1L, TIME_LO ;; FINALY, COPY TIMER1 INTO LO/HI BYTES. MOVF_F TMR1H, TIME_HI GOTO ERR_TEST ;Проверяем датчики GET_ERROR: ;; DUAL SENSOR DETECTION. BCF IF_ERROR, 7 LOADF CHAR, 0X00 CALL SET_ADDRESS BTFSS SENSOR_1 GOTO $ + 3 CALL D1_ER GOTO $ + 2 CALL D1_OK LOADF CHAR, 0X40 CALL SET_ADDRESS BTFSS SENSOR_2 GOTO $ + 3 CALL D2_ER GOTO $ + 2 CALL D2_OK LOADF MS_TIME, .250 ;; 1.5 SEC DELAY. CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY RETURN D1_OK: CHR_LCD_OUT 'D' CHR_LCD_OUT '1' CHR_LCD_OUT '-' CHR_LCD_OUT 'O' CHR_LCD_OUT 'K' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' RETURN D1_ER: CHR_LCD_OUT 'D' CHR_LCD_OUT '1' CHR_LCD_OUT '-' CHR_LCD_OUT 'E' CHR_LCD_OUT 'R' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' BSF IF_ERROR, 7 RETURN D2_OK: CHR_LCD_OUT 'D' CHR_LCD_OUT '2' CHR_LCD_OUT '-' CHR_LCD_OUT 'O' CHR_LCD_OUT 'K' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' RETURN D2_ER: CHR_LCD_OUT 'D' CHR_LCD_OUT '2' CHR_LCD_OUT '-' CHR_LCD_OUT 'E' CHR_LCD_OUT 'R' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' BSF IF_ERROR, 7 RETURN ;--------------------------------------- ;Первоначальная надпись на LCD LCD_1: LOADF CHAR, 0X00 CALL SET_ADDRESS CHR_LCD_OUT 'A' CHR_LCD_OUT 'W' CHR_LCD_OUT 'A' CHR_LCD_OUT 'I' CHR_LCD_OUT 'T' CHR_LCD_OUT ' ' CHR_LCD_OUT '-' CHR_LCD_OUT ' ' LOADF CHAR, 0X40 CALL SET_ADDRESS CHR_LCD_OUT 'S' CHR_LCD_OUT 'H' CHR_LCD_OUT 'O' CHR_LCD_OUT 'O' CHR_LCD_OUT 'T' CHR_LCD_OUT '!' CHR_LCD_OUT '!' CHR_LCD_OUT '!' RETURN ;--------------------------------------- ;DETECTION AND TIMING OF PROJECTILE GET_VELOCITY: ;; DUAL SENSOR DETECTION. CLRF TMR1L ;; THEN, START TIMING. CLRF TMR1H BSF INTCON, GIE ;BCF/BSF = DISABLE/ENABLE Глобальное разрешение прерываний BSF INTCON, PEIE ;BCF/BSF = DIS/ENABLE Разрешение прерываний от переферийных модулей BTFSS SENSOR_1 ;; AWAIT DETECTION: ACTIVE HI. GOTO $ - 1 BSF T1CON, TMR1ON ;BCF/BSF = DISABLE/ENABLE TIMER1 ON. BTFSS SENSOR_2 ;; NEXT, AWAIT DETECTION: ACTIVE HI. GOTO $ - 1 BCF T1CON, TMR1ON ;BCF/BSF = DISABLE/ENABLE TIMER1 ON. BCF INTCON, GIE ;BCF/BSF = DISABLE/ENABLE Глобальное разрешение прерываний BCF INTCON, PEIE ;BCF/BSF = DIS/ENABLE Разрешение прерываний от переферийных модулей MOVF_F TMR1L, TIME_LO ;; FINALY, COPY TIMER1 INTO LO/HI BYTES. MOVF_F TMR1H, TIME_HI LOADF MS_TIME, .250 ;; 1 SEC DELAY BEFORE NEXT MEASUREMENT. CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY RETURN ;--------------------------------------- ;Отсылаем данные в RS232 SEND_USART: CALL TXWAIT MOVF_F TIME_HI, TXREG CALL TXWAIT MOVF_F TIME_LO, TXREG CALL TXWAIT RETURN ;--------------------------------------- ;Использовать эту задержку перед отправкой данных TXREG. TXWAIT: BANK1 BTFSS TXSTA, TRMT ;; IF TX IS COMPLETED, GOTO $ - 1 ;; ELSE, WAIT BANK0 ;; THEN, CONTINUE. LOADF MS_TIME, .1 CALL MS_DELAY RETURN ;-------------------------------------- ;Вычисление скорости и вывод на LCD LCD_UPDATE: CALL CLEAR MOVF_F TIME_HI, HI_BYTE MOVF_F TIME_LO, LO_BYTE CALL HEX16_TO_DEC5 ;; CONVERT HEX TO DECIMAL, CALL DEC_TO_LCD ;; THEN DECIMAL TO LCD DISPLAY. MEM_LCD_OUT TEN_K MEM_LCD_OUT THOU CHR_LCD_OUT '.' MEM_LCD_OUT HUND MEM_LCD_OUT TENS MEM_LCD_OUT ONES CHR_LCD_OUT 'm' CHR_LCD_OUT 's' ; CALL LCD_TO_DEC ;; CALCULATIONS TO METERS PER SECOND. ; LOADF BIT8, .40 ;; DETECTOR DISTANCE = 40 MILLI-METERS ; CALL MUL_BY_1000 ;; MULTIPLY DISTANCE MILLI-METERS BY 1000 ; ; MOVF_F HI16, DIVIDEND1 ;; DIVIDE MILLI-METERS BY TIMING ; MOVF_F LO16, DIVIDEND2 ;; 40,000 / TIME_HI:TIME_LO LOADF DIVIDEND1, 0x9C ;; Для дистанции 40мм LOADF DIVIDEND2, 0x40 ;; 40,000 / TIME_HI:TIME_LO MOVF_F TIME_HI, DIVISOR1 MOVF_F TIME_LO, DIVISOR2 CALL DIVIDE_16_16 ;; RETURNS DIVIDEND+0:DIVIDEND+1 MOVF_F DIVIDEND+0, HI_BYTE ;; VELOCITY RESULT COPY MOVF_F DIVIDEND+1, LO_BYTE ;; VELOCITY RESULT COPY CALL HEX16_TO_DEC5 CALL DEC_TO_LCD LOADF CHAR, 0X40 ;; GOTO LCD SECOND LINE. CALL SET_ADDRESS CHR_LCD_OUT ' ' MEM_LCD_OUT THOU ;; DISPLAY "XXXXX M/S" MEM_LCD_OUT HUND MEM_LCD_OUT TENS MEM_LCD_OUT ONES CHR_LCD_OUT 'm' CHR_LCD_OUT '/' CHR_LCD_OUT 's' ; CALL LCD_TO_DEC RETURN ;--------------------------------------- ;BORROWED FROM MICROCHIP APP NOTES. EXTENSIVELY ;MODIFIED TO SUPPORT 16F628. ;DIVIDE 16BIT BY 16BIT ;INPUT : DVDEND_HI, DVDEND_LO, DVSOR_HI, DVSOR_LO ;OUTPUT: DIVIDEND+0, DIVIDEND+1 ;----Define divide register variables--- ; ACC EQU 0x5C ; Most significant Byte ; SIGN EQU 0x62 ; save location for sign in MSB ; TEMP EQU 0x68 ; temporary storage ; DIVIDEND EQU 0x5C ; Most significant Byte ; DIVISOR EQU 0x65 ; Most significant Byte ; REMAIN EQU 0x60 ; Most significant Byte ; LOOPCOUNT EQU 0x63 ; loop counter ;--------------------------------------- DIVIDE_16_16: MOVF_F DIVIDEND1, DIVIDEND+0 MOVF_F DIVIDEND2, DIVIDEND+1 MOVF_F DIVISOR1, DIVISOR+0 MOVF_F DIVISOR2, DIVISOR+1 CLRF REMAIN+0 CLRF REMAIN+1 MOVLW .16 MOVWF LOOPCOUNT LOOP1616: RLF ACC+0, W RLF REMAIN+1, F RLF REMAIN+0, F MOVF DIVISOR+1, W SUBWF REMAIN+1, F MOVF DIVISOR+0, W BTFSS STATUS, C INCFSZ DIVISOR+0, W SUBWF REMAIN+0, F BTFSC STATUS, C GOTO CONT1616 MOVF DIVISOR+1, W ADDWF REMAIN+1, F MOVF DIVISOR+0, W BTFSC STATUS, C INCFSZ DIVISOR+0, W ADDWF REMAIN+0, F BCF STATUS, C CONT1616: RLF ACC+1, F RLF ACC+0, F DECFSZ LOOPCOUNT, F GOTO LOOP1616 RETURN ;--------------------------------------- ;MULTIPY 8-BIT BY 1000 ;INPUT = BIT8, ;OUTPUT = HI16, LO16 ;MUL_BY_1000: ; CLRF HI16 ; CLRF LO16 ; MOVF_F BIT8, TEMP_MUL ; LOADF CNT1, .100 ; LOADF CNT2, .10 ;MUL1 ; MOVF TEMP_MUL, W ; ADDWF LO16, F ; BTFSS STATUS, C ;; IF CARRY IS SET, ; GOTO $ + 2 ;; ELSE: SKIP ; INCF HI16, F ;; THEN: PROCESS ; ; DECFSZ CNT1, F ; GOTO MUL1 ; LOADF CNT1, .100 ; DECFSZ CNT2, F ; GOTO MUL1 ; RETURN ;--------------------------------------- ;CONVER 16BIT HEX INTO 5 DIGIT BCD ;INPUT : HI_BYTE, LO_BYTE ;OUTPUTS: TEN_K, THOU, HUND, TENS, ONES HEX16_TO_DEC5: MOVF_F HI_BYTE, NUMH ;; MOVF f,d Пересылка регистра F MOVF_F LO_BYTE, NUML SWAPF NUMH,W ;; SWAPF f,d Обмен местами тетрад в f ANDLW 0X0F ;; ANDLW k Логическое "И" константы и W ADDLW 0XF0 ;; ADDLW k Сложение константы с W MOVWF THOU ;; MOVWF f Пересылка W в F ADDWF THOU,F ;; ADDWF f,d Сложение W с f ADDLW .226 ;; ADDLW k Сложение константы с W MOVWF HUND ;; MOVWF f Пересылка W в F ADDLW .50 ;; ADDLW k Сложение константы с W MOVWF ONES ;; MOVWF f Пересылка W в F MOVF NUMH,W ;; MOVF f,d Пересылка регистра F ANDLW 0X0F ;; ANDLW k Логическое "И" константы и W ADDWF HUND,F ;; ADDWF f,d Сложение W с f ADDWF HUND,F ;; ADDWF f,d Сложение W с f ADDWF ONES,F ;; ADDWF f,d Сложение W с f ADDLW .233 ;; ADDLW k Сложение константы с W MOVWF TENS ;; MOVWF f Пересылка W в F ADDWF TENS,F ;; ADDWF f,d Сложение W с f ADDWF TENS,F ;; ADDWF f,d Сложение W с f SWAPF NUML,W ;; SWAPF f,d Обмен местами тетрад в f ANDLW 0X0F ;; ANDLW k Логическое "И" константы и W ADDWF TENS,F ;; ADDWF f,d Сложение W с f ADDWF ONES,F ;; ADDWF f,d Сложение W с f RLF TENS,F ;; RLF f,d Вращение f влево через перенос RLF ONES,F ;; RLF f,d Вращение f влево через перенос COMF ONES,F ;; COMF f,d Инверсия регистра f RLF ONES,F ;; RLF f,d Вращение f влево через перенос MOVF NUML,W ;; MOVF f,d Пересылка регистра F ANDLW 0X0F ;; ANDLW k Логическое "И" константы и W ADDWF ONES,F ;; ADDWF f,d Сложение W с f RLF THOU,F ;; RLF f,d Вращение f влево через перенос MOVLW 0X07 ;; MOVLW k Пересылка константы в W MOVWF TEN_K ;; MOVWF f Пересылка W в F MOVLW .10 ;; MOVLW k Пересылка константы в W HD1: ADDWF ONES,F ;; ADDWF f,d Сложение W с f DECF TENS,F ;; DECF f,d Декремент регистра f BTFSS 3,0 ;; BTFSS f,b Пропустить команду, если бит b=1 GOTO HD1 ;; GOTO k Переход по адресу HD2: ADDWF TENS,F ;; ADDWF f,d Сложение W с f DECF HUND,F ;; DECF f,d Декремент регистра f BTFSS 3,0 ;; BTFSS f,b Пропустить команду, если бит b=1 GOTO HD2 ;; GOTO k Переход по адресу HD3: ADDWF HUND,F ;; ADDWF f,d Сложение W с f DECF THOU,F ;; DECF f,d Декремент регистра f BTFSS 3,0 ;; BTFSS f,b Пропустить команду, если бит b=1 GOTO HD3 ;; GOTO k Переход по адресу HD4: ADDWF THOU,F ;; ADDWF f,d Сложение W с f DECF TEN_K,F ;; DECF f,d Декремент регистра f BTFSS 3,0 ;; BTFSS f,b Пропустить команду, если бит b=1 GOTO HD4 ;; GOTO k Переход по адресу RETURN ;--------------------------------------- ;PREREQUISITE: LOAD THOU, HUND, TENS, ONES ; ;LCD_TO_DEC: ; MOVLW 0X30 ; SUBWF TEN_K, F ; SUBWF THOU, F ; SUBWF HUND, F ; SUBWF TENS, F ; SUBWF ONES, F ; RETURN ;--------------------------------------- ;PREREQUISITE: LOAD TEN_K, THOU, HUND, TENS, ONES ; DEC_TO_LCD: MOVLW 0X30 ADDWF TEN_K, F ADDWF THOU, F ADDWF HUND, F ADDWF TENS, F ADDWF ONES, F RETURN ;----------------------------------------------- ; LCD DRIVER AND COMMANDS FOR 4-BIT INTERFACE ;----------------------------------------------- ;PREREQUISITES: E, RS - OUTPUT ; PORTB 4-7 - OUTPUT ; MS_DELAY - SUBROUTINE INIT_LCD: LOADF MS_TIME, .40 CALL MS_DELAY ;; FUNCTION SET BCF RS ;; SET LCD TO COMMAND MODE LOADF PORTB, B'00100000' CALL PULSE_E LOADF PORTB, B'00100000' CALL PULSE_E LOADF PORTB, B'10000000' CALL PULSE_E LOADF MS_TIME, .1 ;; DISPLAY CONTROL CALL MS_DELAY LOADF PORTB, B'00000000' CALL PULSE_E LOADF PORTB, B'11110000' CALL PULSE_E LOADF MS_TIME, .1 ;; CLEAR DISPLAY CALL MS_DELAY LOADF PORTB, B'00000000' CALL PULSE_E LOADF PORTB, B'00010000' CALL PULSE_E LOADF MS_TIME, .1 ;; ENTRY MODE SET, .2 CALL MS_DELAY LOADF PORTB, B'00000000' CALL PULSE_E LOADF PORTB, B'01100000' CALL PULSE_E LOADF MS_TIME, .2 CALL MS_DELAY CALL BLINK_OFF CALL CURSOR_OFF RETURN PULSE_E: BSF E GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 BCF E LOADF MS_TIME, .1 CALL MS_DELAY RETURN ;------------------------------------------- ;INPUT : CHAR, 'X' ;OUTPUT: SENDS THE CHARACTER TO THE LCD ;SEND_CHAR: ; BSF RS ;; SET LCD TO CHARACTOR MODE ; MOVF CHAR, W ; MOVWF PORTB ; CALL PULSE_E ; SWAPF CHAR, W ; MOVWF PORTB ; CALL PULSE_E ; RETURN ;--------------------------------------- ;INPUT : CHAR, 'X' ;OUTPUT: SENDS THE COMMAND TO THE LCD SEND_CHAR: BSF RS ;; SET LCD TO CHARACTOR MODE GOTO $ + 2 SEND_COMM: BCF RS ;; SET LCD TO COMMAND MODE MOVF CHAR, W MOVWF PORTB CALL PULSE_E SWAPF CHAR, W MOVWF PORTB CALL PULSE_E RETURN ;--------------------------------------- CLEAR: LOADF CHAR, B'00000001' CALL SEND_COMM LOADF MS_TIME, .2 CALL MS_DELAY RETURN ;HOME: ; LOADF CHAR, B'00000010' ; CALL SEND_COMM ; LOADF MS_TIME, .2 ; CALL MS_DELAY ; RETURN SET_ADDRESS: BSF CHAR, 7 CALL SEND_COMM RETURN BLINK_OFF: LOADF CHAR, B'00001110' CALL SEND_COMM RETURN CURSOR_OFF: LOADF CHAR, B'00001100' CALL SEND_COMM RETURN ;--------------------------- |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 01-08-2009 10:42 | |
shorts.inc #DEFINE BANK0 BCF STATUS, RP0 #DEFINE BANK1 BSF STATUS, RP0 ;~~~~~~~~~~~~~MACROS~~~~~~~~~~~~~~~ LOADF MACRO F_VAR, LIT_NUM MOVLW LIT_NUM MOVWF F_VAR ENDM MOVF_F MACRO F_FROM, F_TO MOVF F_FROM, W MOVWF F_TO ENDM CHR_LCD_OUT MACRO LIT_NUM MOVLW LIT_NUM MOVWF CHAR CALL SEND_CHAR ENDM MEM_LCD_OUT MACRO LIT_NUM MOVF LIT_NUM, W MOVWF CHAR CALL SEND_CHAR ENDM ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
||
kimad частый гость Группа: Участники Сообщений: 11 |
Добавлено: 01-08-2009 22:38 | |
Исходник для хронолайта есть, правда не для версии с ЖКИ находится здесь, альтернативный софт для хронолайта, написанный одним из эирганеров. Версия на ЖКИ хоть и намного проще в изготовлении, но и дороже. В этом видимо одна из причин отсутствия долое время варианта с ЖКИ. Тем более что автором проекта исходники были утеряны. Мне кажется никто хронолайт не пиарит, просто разработка представленная здесь практически не известна огромному сообществу любителей пневматики и отзывы о gauss-хронографе не такие уж и плохие(пример приведенный выше не в счет). Я сам собрал этот хрон (gauss) и конструкцией доволен (со своей задачей изделие справляется на все 100), тем более что еще совсем недавно версии хронолайта на ЖКИ не существовало. Хотелось-бы и для вашей(jab) конструкции увидеть обновленное ПО и новые возможности. ....Вот в новой теме я не стал заморачиваться особо текстами т.к. вижу, что народ не испытал интерес. Направленность данного форума несколько иная, может поэтому конструкция не вызвала интереса? |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 01-08-2009 22:48 | |
Мне было проще найти б/у ЖКИ чем нужных размеров и конфигурации лиды. Да и не сильно оно там дороже... разница выйдет как раз на пару бутылок пива + таранька. Думаю можно себе позволить. А вот на заводской рамочник я так и не раскашелился... не знаю сколько сейчас, но несколько лет назад было по 60-100$. |
||
numer-11 Группа: Участники Сообщений: 2 |
Добавлено: 01-08-2009 22:54 | |
а подцепить этот дисплей можно к борт компу??? | ||
kimad частый гость Группа: Участники Сообщений: 11 |
Добавлено: 01-08-2009 22:55 | |
Для хронолайта выкладывали варианты рамочных датчиков. Один из вариантов здесь. Так что как ни-крути, а лишние 60-100$ (если они конечно лишние) всегда можно куда-нибудь пристроить | ||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 01-08-2009 23:00 | |
Странный вопрос... Даже и не знаю что сказать. Дисплей можно "подцепить" на саморезы куда угодно, хоть на заборе во дворе. А зачем спрашивается?
Я вот что подумал. Подобный вариант надо настраивать чтобы вот вот и срабатывал. Т.е. от внешней засветки много зависит однако. А если изначально понизить чувствительность, то может и не сработать потом на стандартный колпачек свинцовый (паинтбольные шарики не всчет). Как вариант, можно переменные резисторы вынести на боковую панель или ещё куда для подстройки, а можно встроить туда микроконтроллер, который сам будет регулировать уровень срабатывания (на грани фолла так сказать) на максимальную чувствительность подстраиваясь под внешнюю засветку. А вообще наверно более интересен рогатый вариант рамки!? |
||
numer-11 Группа: Участники Сообщений: 2 |
Добавлено: 01-08-2009 23:19 | |
неее я не про само резы и забор сейчас на БК стоит 2х строчный дисплей думал заменить на дисп3110 |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 01-08-2009 23:27 | |
Я так понял, речь про графический дисплей от мобильника? Если да, то бля БК придется писать новую прошивку или мудрить переходник на другом МК с выводом на графический ЖКИ. Связано это с тем, что обычные строчные знакогенераторы имеют в своей памяти таблицу знаков и конроллер, который получает внешние команды отобразить нужный знак из таблицы в нужном месте дисплея, а графический отображает все как есть, т.е. затемняет нужную точку по счету. И для генерации букв или рисунков надо самостоятельно послать какие точки затемнить на дисплее. |
||
kimad частый гость Группа: Участники Сообщений: 11 |
Добавлено: 02-08-2009 13:44 | |
А смысл цеплять дисплей от мобильника на данную конструкцию? | ||
Llevellyn гроссмейстер Группа: Участники Сообщений: 197 |
Добавлено: 03-08-2009 17:16 | |
Можно мне объяснить в двух словах, в чем сложность сборки хронографа, и какие подводные камни меня ожидают? Ато я тут тоже собираю |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 03-08-2009 17:59 | |
На микроконтроллере? Тебе обьяснить или ты хочешь обьяснить? to Llevellyn Куда пропал? И фото пропало. |
||
Llevellyn гроссмейстер Группа: Участники Сообщений: 197 |
Добавлено: 06-08-2009 14:09 | |
jab, это МНЕ надо объяснить :) . На фото ничего интересного Никуда я не пропадал, я на gauss.getbb.ru обитаю |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 06-08-2009 14:40 | |
Собственно сложностей нет. Если все собранно и запрограммировано нормально, то запускается без настройки. Единственное, что может потребоваться, это настройка оптопар. Можно собрать хоть на макетке прикрученной скотчем к трубке с датчиками. | ||
max частый гость Группа: Участники Сообщений: 29 |
Добавлено: 06-08-2009 23:01 | |
выкладываю разводку рамки совмещенной с хроном http://ifolder.ru/13434121 и разводку для рамки совмещенной с ЖКИ хронолайтом(после сборки необходимо задать базу-60ММ) http://ifolder.ru/13433169 за основу взята схема миронова с аиргуна http://airgun.org.ru/forum/viewtopic.php?f=35&t=26407&sid=762c27e877e2e53b8eaaeacce8cc49e7 номиналы деталей указаны на платах D1 - PIC D2 - lm393n D3 - lm358n платы приемников необходимо защитить от боковых засветок |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 18-08-2009 23:16 | |
Зачетное кино про станок 3Д. Эх.. свою поделку забросил что-то. Надо побороть лень и доделать. | ||
Mrak магистр Группа: Участники Сообщений: 340 |
Добавлено: 18-08-2009 23:44 | |
Хм... хороший аппарат)) | ||
max частый гость Группа: Участники Сообщений: 29 |
Добавлено: 21-08-2009 20:27 | |
В прошивке ЖКИ хронолайта был обнаружен баг не сливались данные из памяти в комп, вот пофиксеная версия прошивки http://airgun.org.ru/forum/download/file.php?id=41201 |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 03-09-2009 17:14 | |
Лазил недавно в нэте и наткнулся на интересный сайт. На котором есть не менее интересный форум. Ребята весьма приуспели в конструировании поделок на микроконтроллерах. Интересные штучки попадаются! Если не смущает английский язык, то советую посетить. | ||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 11-09-2009 23:01 | |
Чтот не врубился, что от меня хочет протеус: Мож кто поможет? В общем сообщение то высвечивает, но тем не менее на работу оно вроде как не влияет. |
||
skar магистр Группа: Модераторы Сообщений: 861 |
Добавлено: 12-09-2009 01:37 | |
это на счёт осциллографа хня | ||
jon007 Группа: Участники Сообщений: 2 |
Добавлено: 11-10-2009 00:06 | |
jab; имеется вопрос на тему прошлых лет, на основе хрона можно-ли изготовить некое устроество, для измерения скорости футбольного мяча, пишитн пожалуйста на почту. | ||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 16-10-2009 23:28 | |
Ну если ты будешь посылать этот мяч точно между датчиков, то запросто. | ||
jon007 Группа: Участники Сообщений: 2 |
Добавлено: 18-10-2009 11:31 | |
Я предпологаю, что посылать мяч необходимо именно между датчиками, только зона дейчтвия датчиков должна охватывать 1,2в высоту, 1,5в ширину, максимум, и соблысти расстояние мнжду ними по Вашим схемам 100,150,мм. что за датчики можно так настроить? может охранный датчик обьема можно както использовать? |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 18-10-2009 14:26 | |
Да любой оптодатчик. Скажем ложиш фототранзисторы на землю линзами в верх на определенном растоянии друг от друга и пинаешь мячик так, чтобы летел над датчиками и создавал на них тень есно. Лучше в полдень это делать или в комнате с лампочками сверху. Если одного датчика мало т.к. не проффесиональный футболист, то можно линейку датчиков положить подключенных последовательно. | ||
Kil369 Группа: Участники Сообщений: 3 |
Добавлено: 05-12-2009 18:28 | |
Если кто в курсе, помогите распознать принтер из которого «это» было снято. Знаю только что это роботрон. Извеяюсь за фотки, других ненашлось. |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 04-02-2010 09:58 | |
В общем решил я замутить простецкий частотомер. Нужен он мне для индукционной печки. Думал, гадал, что выводить на дисплейчик печки и пока пусть будет частота ГУНа. Думаю так будет удобней отлаживаться и проводить разные эксперименты. Мультиметр каждый раз харит вынимать + у него какая-то лажа с питанием... жрет много почему-то. Видно отремонтировал не доконца с прошлого раза и где-то поджирает лишние миллиамперы. Так вот! Полез в нэт в поисках готовых велосипедов т.е. частотомеров, чтоб не изобретать свой. Нашел сразу стопицот разных ссылок. Половина из них содрана друг у друга и с ошибками и не работает толком. Другая половина мне не понравилась по разным причинам. В общем нужно что-то написать свое. Вариантов алгоритмов реализации не очень много, но все же нужно выбрать один приемлемый. Самое тупое, это считать входящие импульсы "в лоб". Значит, это если процик нам больше не нужен не для чего, то так проканает. Смысл в том, что процик должен ждать изменения уровня сигнала на одном из входов и подсчитывать их за какой-то период времени. Т.е. понадобится ещё таймер и по прерыванию от него мы будем выводить сумму импульсов на экранчик. В общем мне не нравится такой вариант! Другой вариант, это когда импульсы будут приходить на специальный вход прерывания микроконтроллера и вызывать подпрограмму прерывания в которой будут накапливаться входные импульсы. В этом случае процик может заниматься своими вопросами и периодически прерываться, чтоб посмотреть сколько там импульсов набежало и выводить их на экранчик. В общем тоже не очень мне этот алгоритм. Очень много частотомеров реализовано на подсчете входных импульсов с помощью таймера. Некоторые используют нулевой таймер, а некоторые первый. В общем нулевой пока оставлю в покое и взял за основу первый таймер т.к. там проще считать данные из него и насчитать можно до FF FF. Ну а далее по прерыванию можно и дальше считать. В общем тут тоже ряд алгоритмов можно напридумывать. Значит все же надо начемто остановится. Набросал макетку в протеусе и занялся моделирование и кодописанием. Прародителем кода взял программку частотомера с радиокота. Она у меня не хотела работать в упор (может в железе у кого-то запускалось, но судя по коду это вряд ли) и я её несколько переписал. Правда ещё далеко не конечный вариант. Для генерации временных задержек используется внутренняя частота процика, а надо бы наверно запустить таймер от внешнего кварцевого генератора. В общем-то, кто разбирается, то поймет что и где правит, если что. Предварительно озвучу код: LIST P=16F628 INCLUDE "p16f628.inc" __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF & _BODEN_OFF & _MCLRE_OFF ; Define Information #DEFINE RS PORTA, 0 #DEFINE E PORTA, 1 ;~~~~~~~~~~~~~MACROS~~~~~~~~~~~~~~~ LOADF MACRO F_VAR, LIT_NUM MOVLW LIT_NUM MOVWF F_VAR ENDM MOVF_F MACRO F_FROM, F_TO MOVF F_FROM, W MOVWF F_TO ENDM CBLOCK 0x20 TTt Time1 Dlay ; 8 Bit Delay Variable Temp ; a temporary variable cntmsec LED1 LED2 LED3 LED4 LED5 NumH NumL Tens Ones Thou TenK Hund Temp1 Temp2 Temp3 Temp4 SelFr FrLow FrHig CNTJ, MS_TIME, MS_TIME_TEMP ENDC ORG 0x000 goto main ; ORG 0x004 ; goto int_up ;int_up: ; clrf TMR1H ; clrf TMR1L ; bcf PIR1,0 ; bsf T1CON,0 ; return ClearVar clrf LED1 clrf LED2 clrf LED3 clrf LED4 clrf LED5 clrf NumH clrf NumL clrf Tens clrf Ones clrf Thou clrf TenK clrf Hund clrf SelFr return ;----------------------------------------------------------------------; ; Initialize the ports and timer1 an ADC ; ;----------------------------------------------------------------------; init: clrf PORTA movlw 0x07 movwf CMCON bsf STATUS,RP0 movlw 0x00 ;порт А все выходы movwf TRISA movlw 0x40 ;порт В все выходы movwf TRISB bcf STATUS,RP0 clrf PORTA clrf PORTB movlw B'00000110' movwf T1CON bcf T1CON,0 return ;----------------------------------------------------------------------; ; Initialize the LCD ; ;----------------------------------------------------------------------; INIT_LCD: LOADF MS_TIME, .40 CALL MS_DELAY BCF RS LOADF PORTB, B'00000010' CALL PULSE_E LOADF PORTB, B'00000010' CALL PULSE_E LOADF PORTB, B'00001000' CALL PULSE_E LOADF MS_TIME, .1 ;; DISPLAY CONTROL CALL MS_DELAY LOADF PORTB, B'00000000' CALL PULSE_E LOADF PORTB, B'00001111' CALL PULSE_E LOADF MS_TIME, .1 ;; CLEAR DISPLAY CALL MS_DELAY LOADF PORTB, B'00000000' CALL PULSE_E LOADF PORTB, B'00000001' CALL PULSE_E LOADF MS_TIME, .1 ;; ENTRY MODE SET, .2 CALL MS_DELAY LOADF PORTB, B'00000000' CALL PULSE_E LOADF PORTB, B'00000110' CALL PULSE_E LOADF MS_TIME, .01 CALL MS_DELAY CALL BLINK_OFF CALL CURSOR_OFF return PULSE_E: BSF E GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 BCF E CALL USEC_100 RETURN ;------------------------------------------- ;------------------------------------------- CLEAR: movlw B'00000001' call SendINS LOADF MS_TIME, .2 CALL MS_DELAY RETURN HOME: movlw B'00000010' call SendINS LOADF MS_TIME, .2 CALL MS_DELAY RETURN BLINK_ON: movlw B'00001111' call SendINS LOADF MS_TIME, .2 CALL MS_DELAY RETURN BLINK_OFF: movlw B'00001110' call SendINS LOADF MS_TIME, .2 CALL MS_DELAY RETURN CURSOR_ON: movlw B'00001110' call SendINS LOADF MS_TIME, .2 CALL MS_DELAY RETURN CURSOR_OFF: movlw B'00001100' call SendINS LOADF MS_TIME, .2 CALL MS_DELAY RETURN ;SET_ADDRESS: ; BSF CHAR, 7 ; CALL SEND_COMM ; RETURN ;------------------------------------------- ;INPUT : CHAR, 'X' ;OUTPUT: SENDS THE CHARACTER TO THE LCD ;SEND_CHAR: ; MOVF_F CHAR, CHAR1 ; SWAPF CHAR, W ; MOVWF CHAR2 ; BSF RS ;; SET LCD TO CHARACTOR MODE ; MOVF_F CHAR1, PORTB ; CALL PULSE_E ; MOVF_F CHAR2, PORTB ; CALL PULSE_E ; RETURN ;--------------------------------------- ;INPUT : CHAR, 'X' ;OUTPUT: SENDS THE COMMAND TO THE LCD ;SEND_COMM: ; MOVF_F CHAR, CHAR1 ; SWAPF CHAR, W ; MOVWF CHAR2 ; BCF RS ;; SET LCD TO COMMAND MODE ; MOVF_F CHAR1, PORTB ; CALL PULSE_E ; MOVF_F CHAR2, PORTB ; CALL PULSE_E ; RETURN ;--------------------------------------- ;----------------------------------------------------------------------; ; Send the ch aracter in W out to the LCD ; ;----------------------------------------------------------------------; SendASCII movwf Temp ; Save the Temporary Value swapf Temp, w ; Send the High Nybble bsf RS ; RS = 1 call NybbleOut movf Temp, w ; Send the Low Nybble bsf RS call NybbleOut return ;----------------------------------------------------------------------; ; Send an instruction in W out to the LCD ; ;----------------------------------------------------------------------; SendINS ; Send the Instruction to the LCD movwf Temp ; Save the Temporary Value swapf Temp, w ; Send the High Nybble bcf RS ; RS = 0 call NybbleOut movf Temp, w ; Send the Low Nybble bcf RS call NybbleOut return ;----------------------------------------------------------------------; ; Send the nibble in W out to the LCD ; ;----------------------------------------------------------------------; NybbleOut ; Send a Nybble to the LCD andlw B'00001111' movwf PORTB CALL PULSE_E return ;MILLI SECOND DELAY ROUTINE ;DELAY = X MILLI-SECOND (4MHZ CLOCK). MS_DELAY: MOVF_F MS_TIME, MS_TIME_TEMP MS_LOOP: MOVLW 0XA4 MOVWF CNTJ DECFSZ CNTJ, F GOTO $ - 1 MOVLW 0XA4 MOVWF CNTJ DECFSZ CNTJ, F GOTO $ - 1 DECFSZ MS_TIME_TEMP, F ;; IF COUNTER ENDS, GOTO MS_LOOP ;; ELSE- REPEAT RETURN ;; THEN- EXIT LOOP USEC_10: GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 RETURN USEC_20: GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 NOP NOP RETURN USEC_100: CALL USEC_20 CALL USEC_20 CALL USEC_20 CALL USEC_20 GOTO $ + 1 GOTO $ + 1 GOTO $ + 1; GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 NOP NOP RETURN ;-----------------------------------------------------------------------; ; Out to LCD frequence xxxxx Hz ; ;-----------------------------------------------------------------------; FreqHz movf LED1,0 addlw "0" call SendASCII movf LED2,0 addlw "0" call SendASCII movf LED3,0 addlw "0" call SendASCII movf LED4,0 addlw "0" call SendASCII movf LED5,0 addlw "0" call SendASCII movlw " " call SendASCII movlw " " call SendASCII movlw "H" call SendASCII movlw "z" call SendASCII movlw " " call SendASCII return ;-----------------------------------------------------------------------; ; Out to LCD frequence xxx.xx kHz ; ;-----------------------------------------------------------------------; FreqkHz movf LED1,0 addlw "0" call SendASCII movf LED2,0 addlw "0" call SendASCII movf LED3,0 addlw "0" call SendASCII movlw "." call SendASCII movf LED4,0 addlw "0" call SendASCII movf LED5,0 addlw "0" call SendASCII movlw " " call SendASCII movlw "k" call SendASCII movlw "H" call SendASCII movlw "z" call SendASCII return ;-----------------------------------------------------------------------; ; Out to LCD frequence x.xxxx MHz ; ;-----------------------------------------------------------------------; FreqMHz1 movf LED1,0 addlw "0" call SendASCII movlw "." call SendASCII movf LED2,0 addlw "0" call SendASCII movf LED3,0 addlw "0" call SendASCII movf LED4,0 addlw "0" call SendASCII movf LED5,0 addlw "0" call SendASCII movlw " " call SendASCII movlw "M" call SendASCII movlw "H" call SendASCII movlw "z" call SendASCII return ;-----------------------------------------------------------------------; ; Out to LCD frequence xx.xxx MHz ; ;-----------------------------------------------------------------------; FreqMHz2 movf LED1,0 addlw "0" call SendASCII movf LED2,0 addlw "0" call SendASCII movlw "." call SendASCII movf LED3,0 addlw "0" call SendASCII movf LED4,0 addlw "0" call SendASCII movf LED5,0 addlw "0" call SendASCII movlw " " call SendASCII movlw "M" call SendASCII movlw "H" call SendASCII movlw "z" call SendASCII return ;----------------------------------------------------------------------; ; Text "Frq: " ; ;----------------------------------------------------------------------; Text1 movlw "F" call SendASCII movlw "r" call SendASCII movlw "q" call SendASCII movlw ":" call SendASCII movlw " " call SendASCII return ;----------------------------------------------------------------------; ; Convert two bute to dec ; ;----------------------------------------------------------------------; Convert movf NumH,0 swapf NumH,w andlw 0x0F addlw 0xF0 movwf Thou addwf Thou,f addlw 0xE2 movwf Hund addlw 0x32 movwf Ones movf NumH,w andlw 0x0F addwf Hund,f addwf Hund,f addwf Ones,f addlw 0xE9 movwf Tens addwf Tens,f addwf Tens,f swapf NumL,w andlw 0x0F addwf Tens,f addwf Ones,f rlf Tens,f rlf Ones,f comf Ones,f rlf Ones,f movf NumL,w andlw 0x0F addwf Ones,f rlf Thou,f movlw 0x07 movwf TenK movlw 0A Lb1: addwf Ones,f decf Tens,f btfss 3,0 goto Lb1 Lb2: addwf Tens,f decf Hund,f btfss 3,0 goto Lb2 Lb3: addwf Hund,f decf Thou,f btfss 3,0 goto Lb3 Lb4: addwf Thou,f decf TenK,f btfss 3,0 goto Lb4 retlw 00 ;----------------------------------------------------------------------; ; Get frequence to LED1...LED5 ; ;----------------------------------------------------------------------; OutFrDis movf FrHig,0 movwf NumH movf FrLow,0 movwf NumL call Convert movf TenK,0 movwf LED1 movf Thou,0 movwf LED2 movf Hund,0 movwf LED3 movf Tens,0 movwf LED4 movf Ones,0 movwf LED5 return ;----------------------------------------------------------------------; ; Timer1 count pulse in RC0 Hz ; ;----------------------------------------------------------------------; Count_Hz clrf FrLow clrf FrHig ; movlw .3 ;10 ; movwf TTt ; movlw .236 ;176 ; movwf Temp1 clrf TMR1H clrf TMR1L bcf PIR1,0 bsf T1CON,0 ;DelayT100 ; movlw .189 ; movwf Temp2 ; decfsz Temp2,1 ; goto $-1 ; decfsz Temp1,1 ; goto DelayT100 ; movlw .175 ; movwf Temp1 ; decfsz TTt,1 ; goto DelayT100 ; movlw .50 ; movwf Temp3 ; decfsz Temp3,1 ; goto $-1 LOADF MS_TIME, .425 CALL MS_DELAY CALL MS_DELAY bcf T1CON,0 movf TMR1H,0 movwf FrHig movf TMR1L,0 movwf FrLow clrf SelFr return ;----------------------------------------------------------------------; ; Timer1 count pulse in RC0 kHz ; ;----------------------------------------------------------------------; Count_kHz clrf FrLow clrf FrHig ; movlw .174 ; movwf Temp1 clrf TMR1H clrf TMR1L bcf PIR1,0 bsf T1CON,0 ;DelayT10 ; movlw .190 ; movwf Temp2 ; decfsz Temp2,1 ; goto $-1 ; decfsz Temp1,1 ; goto DelayT10 ; movlw .41 ; movwf Temp3 ; decfsz Temp3,1 ; goto $-1 LOADF MS_TIME, .18 CALL MS_DELAY CALL MS_DELAY bcf T1CON,0 movf TMR1H,0 movwf FrHig movf TMR1L,0 movwf FrLow movlw .1 movwf SelFr return ;----------------------------------------------------------------------; ; Timer1 count pulse in RC0 xMHz ; ;----------------------------------------------------------------------; Count_MHz1 clrf FrLow clrf FrHig movlw .86 movwf Temp1 clrf TMR1H clrf TMR1L bcf PIR1,0 bsf T1CON,0 DelayT1 movlw .36 movwf Temp2 decfsz Temp2,1 goto $-1 decfsz Temp1,1 goto DelayT1 movlw .122 movwf Temp3 decfsz Temp3,1 goto $-1 nop bcf T1CON,0 movf TMR1H,0 movwf FrHig movf TMR1L,0 movwf FrLow movlw .2 movwf SelFr return ;----------------------------------------------------------------------; ; Timer1 count pulse in RC0 xMHz ; ;----------------------------------------------------------------------; Count_MHz2 movlw B'00010110' movwf T1CON clrf FrLow clrf FrHig bcf PIR1,0 clrf TMR1H clrf TMR1L bsf T1CON,0 movlw .250 movwf Temp3 decfsz Temp3,1 goto $-1 movlw .250 movwf Temp3 decfsz Temp3,1 goto $-1 movlw .164 movwf Temp3 decfsz Temp3,1 goto $-1 nop nop nop nop bcf T1CON,0 movf TMR1H,0 movwf FrHig movf TMR1L,0 movwf FrLow movlw B'00000110' movwf T1CON movlw .3 movwf SelFr return ;----------------------------------------------------------------------; ; The Main routine ; ;----------------------------------------------------------------------; main: call ClearVar call init call INIT_LCD Restart call Count_Hz btfsc PIR1,0 call Count_kHz ; btfsc PIR1,0 ; call Count_MHz1 ; btfsc PIR1,0 ; call Count_MHz2 call OutFrDis call CLEAR call Text1 movlw .0 xorwf SelFr,0 btfsc STATUS,Z call FreqHz movlw .1 xorwf SelFr,0 btfsc STATUS,Z call FreqkHz ; movlw .2 ; xorwf SelFr,0 ; btfsc STATUS,Z ; call FreqMHz1 ; movlw .3 ; xorwf SelFr,0 ; btfsc STATUS,Z ; call FreqMHz2 goto Restart end В общем там с задержками ещё надо разобраться. На килогерцах, и уж темболее на мегогерцах, не смог толком отладить т.к. медленно это все моделиуется у меня. Включаю генератор килогерц эдак на 100 и иду гулять минут на 5-10 чтоб дождаться результатов. Надо в железе собрать и проверять результат в реальном времени. З.Ы. По ходу я затупил тут... Щас только дошло. Я в протеусе процику поставил частоту 4МГц! А нужно было 12? Соответственно с старым вариантом (оно закомментировано) задержек показывал частоту в 3 раза больше. Сегодня вечером поиграю ещё с этим делом. Потом отпишусь, что вышло. |
||
kimad частый гость Группа: Участники Сообщений: 11 |
Добавлено: 10-02-2010 01:30 | |
Наконец-то упаковал. Функций хоть и не много, но со своей основной задачей справляется хорошо. |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 10-02-2010 02:56 | |
kimad, искренне поздравляю! Хорошо получилось. Планируется модернизация или новый вариант? | ||
kimad частый гость Группа: Участники Сообщений: 11 |
Добавлено: 11-02-2010 00:45 | |
Вообще-то думал об этом, но для дальнейшего шага, на мой взгляд, требуется изменение прошивки, а с этим у меня пока-что туговато. | ||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 11-02-2010 11:01 | |
kimad, прошивку особо не проблема править. Были бы идеи в какую сторону править. Типа добавить кнопок разных и меню. Чтоб был в одном флаконе хрон и частотомер + память результатов выстрелов. Ну и ещё нужно прожку дописать на ПК для получения данных из хрона. Типа такого? | ||
kimad частый гость Группа: Участники Сообщений: 11 |
Добавлено: 11-02-2010 23:20 | |
Программа есть, и не плохая http://airgun.org.ru/forum/viewtopic.php?f=35&t=21286 . Можно попросить mironovа добавить поддержку гаусс-хронографа или попробовать переписать процедуру обмена данными с ПК аналогично хронолайту (исходник имеется). А насчет меню и кнопок: память, возможность изменения размера базы, наверное это для начала. На неделе займусь рамкой. | ||
kimad частый гость Группа: Участники Сообщений: 11 |
Добавлено: 13-02-2010 02:57 | |
To Jab, случайно нету-ли программы для связи с ПК с http://www.anothercoilgunsite.com/ ? Оттуда скачать не получается по причине отсутствия файла. | ||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 13-02-2010 14:13 | |
Есть. А накой она тебе здалась? Херня все. Написана на VBасике и особой ценности не представляет. Вам же замерять пневмострелы, а там заточка под катушки и конденсаторы. Могу почтой скинуть, если всеже любопытно. Намыль мне письмо, я в обратку кину. Я вот думаю, мож реально замутить преобразователь миниатюрный, чтоб питать от двух пальчиков... |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 24-02-2010 10:16 | |
Очень долго боролся ленью, но удалось её победить. Запаял до кучи тренировочный макет частотомера. В общем будет на чем отлаживаться. Поставил старые задержки, включил, работает. Както странно. В протеусе пишет одно, в железе другое. Где-то я туплю. Буду ещё дорабатывать и разбираться что и где. В общемто частоты показывает почти как и китаец, но есть отличие некоторое. Кто и насколько врет, пока не ясно. Нужен калиброванный генератор. Хотя может и не нужен, для моих целей. |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 26-02-2010 11:03 | |
Частотомер несколько подпачил. Значит текущая рабочая схема + код hex прошивки к нему. По идее должен замерять до 60МГц. Проверял на 4МГц. HEX
Входной сигнал амплитудой напряжения брал от 2В до 12В. Если планируется большее напряжение, то нужно увеличить R6, чтобы не привысить допустимый ток диодов D1, D2. Дисплей 16х1, можно 16х2, можно 16х4, главное чтоб строка была в 16символов. |
||
http поисковик затейник Группа: Модераторы Сообщений: 1045 |
Добавлено: 26-02-2010 23:48 | |
Ну прям брат близнец! www.cqham.ru/scllcd.htm |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 27-02-2010 17:27 | |
Почему близнец? Рядом не валялось. Схема другая и программа работает по другому. Решил попробовать частотомер на более высоких частотах. Подогнали мне тут по случаю генератор с разборки. Микруха CMX-309FB питание 3.3В генерит 25МГц. По идее калибровано. Подключил запустил и глухо. Ткнул осциллом на максимальном пределе, а он бедняга не тянет такие частоты и на экране пронаблюдал не совсем что хотел.. почти синус . В общем генератор работает. Подключил напрямую к 12 ноги контроллера и пошел процесс! Работает в общем. Значит придется доработать входной каскад. Попробовал найти на базаре пределитель... голяк! Хотел попробовать до гигагерца замерять. Потом придумаю что-то. |
||
http поисковик затейник Группа: Модераторы Сообщений: 1045 |
Добавлено: 27-02-2010 19:20 | |
Да с близнецом это я что то сглупил.А что не уж то прескалеры даже такие как U664B;SB3500;КР193ИЕ6 не купить? http://vrtp.ru/index.php?showtopic=9629 Первые два вроде как для бытавухи. | ||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 27-02-2010 20:36 | |
Я искал SAB6456, а других не знаю высокочастотных и мелких. Надо было подготовится перед поездкой за деталькой... не ожидал, затупил. А продавцы замену не подсказали и вообще не в курсе что такое прескалер или делитель. Лан, хрен с ним. Потом найду что-то. Вообще было бы интересно и пригодилось бы для лампогрелки индукционной. | ||
http поисковик затейник Группа: Модераторы Сообщений: 1045 |
Добавлено: 27-02-2010 21:51 | |
Есть вот такая штуковина. http://hem.passagen.se/communication/poorc.html http://www.cqham.ru/Count_LMX.htm Если память не изменяет то бывают на материнках старых и ещё у меня на платке от мобильника какого то стоит LMX2315 до 2.5Ghz. | ||
foton мастер Группа: Участники Сообщений: 76 |
Добавлено: 07-03-2010 21:56 | |
случайно нашел 16-сегментный led дисплей с драйвером uaa2022 ... не могу разобраться как им управлять ... может кто помочь? Здесь твой пост более уместен.http |
||
Mitko Группа: Участники Сообщений: 7 |
Добавлено: 17-03-2010 16:17 | |
----------------------- ;; Хронограф с выводом результата на LCD дисплей (8х2 в одну строку) и COM порт. ;; Распиновка микросхемы ;; PIN I/O FROM TO ;;---------------------------------------------------------------------- ;; A0 O E LCD E ;; A1 O RS LCD RS ;; A2 I BIT 2 SENSOR_1 ;; A3 I BIT 3 SENSOR_2 ;; A4 O ;; A5 O ;; A6 O ;; A7 O ;; ;; B0 0 ;; B1 I RS232 RX PC RX ;; B2 O RS232 TX PC TX ;; B3 O ;; B4 O BIT 4 LCD BIT 4 ;; B5 O BIT 5 LCD BIT 5 ;; B6 O BIT 6 LCD BIT 6 ;; B7 O BIT 7 LCD BIT 7 ;;---------------------------------------------------------------------- list p=16F628A #include <P16F628A.INC> #include <shorts.inc> __CONFIG _LVP_OFF & _MCLRE_OFF & _XT_OSC & _BODEN_OFF & _CP_OFF & _WDT_OFF & _PWRTE_ON ERRORLEVEL -302 #DEFINE E PORTA, 0 ;; OUTPUT TO LCD #DEFINE RS PORTA, 1 ;; OUTPUT TO LCD #DEFINE SENSOR_1 PORTA, 2 ;; INPUT #DEFINE SENSOR_2 PORTA, 3 ;; INPUT CBLOCK 0X20 CNTJ ;; FOR MS_DELAY ; BIT8, CNT1, CNT2, TEMP_MUL, HI16, LO16 ;; FOR MUL_BY_1000 MS_TIME, MS_TIME_TEMP LO_BYTE, HI_BYTE ;; FOR LCD DRIVER CHAR ;; FOR DATA CONVERTION TEN_K, THOU, HUND, TENS, ONES DIVIDEND1, DIVIDEND2, DIVIDEND3, DIVISOR1, DIVISOR2 DVDEND_HI, DVDEND_LO TIME_HI, TIME_LO, NUMH, NUML IF_ERROR ;; Признак ошибки ENDC ACC EQU 0x5C ; Most significant Byte SIGN EQU 0x62 ; save location for sign in MSB TEMP EQU 0x68 ; temporary storage DIVIDEND EQU 0x5C ; Most significant Byte DIVISOR EQU 0x65 ; Most significant Byte REMAIN EQU 0x60 ; Most significant Byte LOOPCOUNT EQU 0x63 ; loop counter ORG 0x000 CALL init_pic GOTO MAIN ORG 0x004 GOTO int_t init_pic ;----------------------------PORT I/O CONFIGURATION/SETUP------------------------------- BANK0 MOVLW 0X07 MOVWF CMCON ;; DISABLE CAPTURE/COMPARE MODULES. BANK1 LOADF TRISA, B'00101100' LOADF TRISB, B'00000110' ;; SET BITS 1, 2 FOR USART. BSF OPTION_REG, NOT_RBPU ;; BCF/BSF = ENABLE/DISABLE PULL-UP. ;------------------POWER ON RESET CONFIGURATION/SETUP-------------------------- BSF PCON, OSCF ;BCF/BSF = 37KHZ/4MHZ INTRC OR ER OSCILLATOR SPEED. ;--------------------------INTERRUPT CONFIGURATION/SETUP------------------------------- ; BANK1 ; BCF INTCON, GIE ;BCF/BSF = DIS/ENABLE GLOBAL INTERRUPT. ; BCF INTCON, PEIE ;BCF/BSF = DIS/ENABLE Разрешение прерываний от переферийных модулей ; BCF INTCON, T0IE ;BCF/BSF = DIS/ENABLE Разрешение прерывания по переполнению TMR0 ; BCF INTCON, INTE ;BCF/BSF = DIS/ENABLE RB0 INTERRUPT. ; BCF INTCON, RBIE ;BCF/BSF = DIS/ENABLE RB7-4 INTERRUPT. BSF PIE1, TMR1IE ;BCF/BSF = DIS/ENABLE Разрешение прерывания по переполнению TMR1 ;-------------------------------------------------------------------------------------- ;-------------------------USART CONFIGURATION/SETUP------------------------------------ BANK1 BCF PIE1, TXIE ;BCF/BSF = DIS/ENABLE TX INTERRUPT. BSF TXSTA, CSRC ;BCF/BSF = EXT/INTERNAL GENERATOR. BCF TXSTA, TX9 ;BCF/BSF = 8-BIT/9-BIT TRANSMISSION. BSF TXSTA, TXEN ;BCF/BSF = DIS/ENABLE TRANSMISSION. BCF TXSTA, SYNC ;BCF/BSF = A/SYNCHRONOUS MODE. BSF TXSTA, BRGH ;BCF/BSF = LO/HI SPEED BAUD RATE SELECT. LOADF SPBRG, .12 ;SET BAUD RATE TO 19.2 KBPS. BANK0 BSF RCSTA, SPEN ;BCF/BSF = DIS/ENABLE SERIAL PORT. BCF RCSTA, RX9 ;BCF/BSF = 8-BIT/9-BIT TRANSMISSION. BSF RCSTA, SREN ;BCF/BSF = DIS/ENABLE SINGLE RECEIVE. BCF RCSTA, CREN ;BCF/BSF = DIS/ENABLE CONTINUOS RECEIVE. BSF RCSTA, SPEN ;BCF/BSF = DIS/ENABLE SERIAL PORT. ;-------------------------------------------------------------------------------------- RETURN ;*********************MAIN*********************** MAIN: CALL INIT_LCD ERR_TEST: CALL CLEAR CALL GET_ERROR BTFSC IF_ERROR, 7 GOTO ERR_TEST CALL CLEAR CALL LCD_1 GET: CALL GET_VELOCITY CALL SEND_USART CALL LCD_UPDATE GOTO GET ;*****************END 0F MAIN****************** int_t BCF T1CON, TMR1ON ;BCF/BSF = DISABLE/ENABLE TIMER1 ON. BCF PIE1, TMR1IF ;BCF/BSF = DISABLE/ENABLE Разрешение прерывания по переполнению TMR1 CLRF TMR1L ;; THEN, START TIMING. CLRF TMR1H MOVF_F TMR1L, TIME_LO ;; FINALY, COPY TIMER1 INTO LO/HI BYTES. MOVF_F TMR1H, TIME_HI GOTO ERR_TEST ;Проверяем датчики GET_ERROR: ;; DUAL SENSOR DETECTION. BCF IF_ERROR, 7 LOADF CHAR, 0X00 CALL SET_ADDRESS BTFSS SENSOR_1 GOTO $ + 3 CALL D1_ER GOTO $ + 2 CALL D1_OK LOADF CHAR, 0X40 CALL SET_ADDRESS BTFSS SENSOR_2 GOTO $ + 3 CALL D2_ER GOTO $ + 2 CALL D2_OK LOADF MS_TIME, .250 ;; 1.5 SEC DELAY. CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY RETURN D1_OK: CHR_LCD_OUT 'D' CHR_LCD_OUT '1' CHR_LCD_OUT '-' CHR_LCD_OUT 'O' CHR_LCD_OUT 'K' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' RETURN D1_ER: CHR_LCD_OUT 'D' CHR_LCD_OUT '1' CHR_LCD_OUT '-' CHR_LCD_OUT 'E' CHR_LCD_OUT 'R' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' BSF IF_ERROR, 7 RETURN D2_OK: CHR_LCD_OUT 'D' CHR_LCD_OUT '2' CHR_LCD_OUT '-' CHR_LCD_OUT 'O' CHR_LCD_OUT 'K' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' RETURN D2_ER: CHR_LCD_OUT 'D' CHR_LCD_OUT '2' CHR_LCD_OUT '-' CHR_LCD_OUT 'E' CHR_LCD_OUT 'R' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' CHR_LCD_OUT ' ' BSF IF_ERROR, 7 RETURN ;--------------------------------------- ;Первоначальная надпись на LCD LCD_1: LOADF CHAR, 0X00 CALL SET_ADDRESS CHR_LCD_OUT 'A' CHR_LCD_OUT 'W' CHR_LCD_OUT 'A' CHR_LCD_OUT 'I' CHR_LCD_OUT 'T' CHR_LCD_OUT ' ' CHR_LCD_OUT '-' CHR_LCD_OUT ' ' LOADF CHAR, 0X40 CALL SET_ADDRESS CHR_LCD_OUT 'S' CHR_LCD_OUT 'H' CHR_LCD_OUT 'O' CHR_LCD_OUT 'O' CHR_LCD_OUT 'T' CHR_LCD_OUT '!' CHR_LCD_OUT '!' CHR_LCD_OUT '!' RETURN ;--------------------------------------- ;DETECTION AND TIMING OF PROJECTILE GET_VELOCITY: ;; DUAL SENSOR DETECTION. CLRF TMR1L ;; THEN, START TIMING. CLRF TMR1H BSF INTCON, GIE ;BCF/BSF = DISABLE/ENABLE Глобальное разрешение прерываний BSF INTCON, PEIE ;BCF/BSF = DIS/ENABLE Разрешение прерываний от переферийных модулей BTFSS SENSOR_1 ;; AWAIT DETECTION: ACTIVE HI. GOTO $ - 1 BSF T1CON, TMR1ON ;BCF/BSF = DISABLE/ENABLE TIMER1 ON. BTFSS SENSOR_2 ;; NEXT, AWAIT DETECTION: ACTIVE HI. GOTO $ - 1 BCF T1CON, TMR1ON ;BCF/BSF = DISABLE/ENABLE TIMER1 ON. BCF INTCON, GIE ;BCF/BSF = DISABLE/ENABLE Глобальное разрешение прерываний BCF INTCON, PEIE ;BCF/BSF = DIS/ENABLE Разрешение прерываний от переферийных модулей MOVF_F TMR1L, TIME_LO ;; FINALY, COPY TIMER1 INTO LO/HI BYTES. MOVF_F TMR1H, TIME_HI LOADF MS_TIME, .250 ;; 1 SEC DELAY BEFORE NEXT MEASUREMENT. CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY CALL MS_DELAY RETURN ;--------------------------------------- ;Отсылаем данные в RS232 SEND_USART: CALL TXWAIT MOVF_F TIME_HI, TXREG CALL TXWAIT MOVF_F TIME_LO, TXREG CALL TXWAIT RETURN ;--------------------------------------- ;Использовать эту задержку перед отправкой данных TXREG. TXWAIT: BANK1 BTFSS TXSTA, TRMT ;; IF TX IS COMPLETED, GOTO $ - 1 ;; ELSE, WAIT BANK0 ;; THEN, CONTINUE. LOADF MS_TIME, .1 CALL MS_DELAY RETURN ;-------------------------------------- ;Вычисление скорости и вывод на LCD LCD_UPDATE: CALL CLEAR MOVF_F TIME_HI, HI_BYTE MOVF_F TIME_LO, LO_BYTE CALL HEX16_TO_DEC5 ;; CONVERT HEX TO DECIMAL, CALL DEC_TO_LCD ;; THEN DECIMAL TO LCD DISPLAY. MEM_LCD_OUT TEN_K MEM_LCD_OUT THOU CHR_LCD_OUT '.' MEM_LCD_OUT HUND MEM_LCD_OUT TENS MEM_LCD_OUT ONES CHR_LCD_OUT 'm' CHR_LCD_OUT 's' ; CALL LCD_TO_DEC ;; CALCULATIONS TO METERS PER SECOND. ; LOADF BIT8, .40 ;; DETECTOR DISTANCE = 40 MILLI-METERS ; CALL MUL_BY_1000 ;; MULTIPLY DISTANCE MILLI-METERS BY 1000 ; ; MOVF_F HI16, DIVIDEND1 ;; DIVIDE MILLI-METERS BY TIMING ; MOVF_F LO16, DIVIDEND2 ;; 40,000 / TIME_HI:TIME_LO LOADF DIVIDEND1, 0x9C ;; Для дистанции 40мм LOADF DIVIDEND2, 0x40 ;; 40,000 / TIME_HI:TIME_LO MOVF_F TIME_HI, DIVISOR1 MOVF_F TIME_LO, DIVISOR2 CALL DIVIDE_16_16 ;; RETURNS DIVIDEND+0:DIVIDEND+1 MOVF_F DIVIDEND+0, HI_BYTE ;; VELOCITY RESULT COPY MOVF_F DIVIDEND+1, LO_BYTE ;; VELOCITY RESULT COPY CALL HEX16_TO_DEC5 CALL DEC_TO_LCD LOADF CHAR, 0X40 ;; GOTO LCD SECOND LINE. CALL SET_ADDRESS CHR_LCD_OUT ' ' MEM_LCD_OUT THOU ;; DISPLAY "XXXXX M/S" MEM_LCD_OUT HUND MEM_LCD_OUT TENS MEM_LCD_OUT ONES CHR_LCD_OUT 'm' CHR_LCD_OUT '/' CHR_LCD_OUT 's' ; CALL LCD_TO_DEC RETURN ;--------------------------------------- ;BORROWED FROM MICROCHIP APP NOTES. EXTENSIVELY ;MODIFIED TO SUPPORT 16F628. ;DIVIDE 16BIT BY 16BIT ;INPUT : DVDEND_HI, DVDEND_LO, DVSOR_HI, DVSOR_LO ;OUTPUT: DIVIDEND+0, DIVIDEND+1 ;----Define divide register variables--- ; ACC EQU 0x5C ; Most significant Byte ; SIGN EQU 0x62 ; save location for sign in MSB ; TEMP EQU 0x68 ; temporary storage ; DIVIDEND EQU 0x5C ; Most significant Byte ; DIVISOR EQU 0x65 ; Most significant Byte ; REMAIN EQU 0x60 ; Most significant Byte ; LOOPCOUNT EQU 0x63 ; loop counter ;--------------------------------------- DIVIDE_16_16: MOVF_F DIVIDEND1, DIVIDEND+0 MOVF_F DIVIDEND2, DIVIDEND+1 MOVF_F DIVISOR1, DIVISOR+0 MOVF_F DIVISOR2, DIVISOR+1 CLRF REMAIN+0 CLRF REMAIN+1 MOVLW .16 MOVWF LOOPCOUNT LOOP1616: RLF ACC+0, W RLF REMAIN+1, F RLF REMAIN+0, F MOVF DIVISOR+1, W SUBWF REMAIN+1, F MOVF DIVISOR+0, W BTFSS STATUS, C INCFSZ DIVISOR+0, W SUBWF REMAIN+0, F BTFSC STATUS, C GOTO CONT1616 MOVF DIVISOR+1, W ADDWF REMAIN+1, F MOVF DIVISOR+0, W BTFSC STATUS, C INCFSZ DIVISOR+0, W ADDWF REMAIN+0, F BCF STATUS, C CONT1616: RLF ACC+1, F RLF ACC+0, F DECFSZ LOOPCOUNT, F GOTO LOOP1616 RETURN ;--------------------------------------- ;MULTIPY 8-BIT BY 1000 ;INPUT = BIT8, ;OUTPUT = HI16, LO16 ;MUL_BY_1000: ; CLRF HI16 ; CLRF LO16 ; MOVF_F BIT8, TEMP_MUL ; LOADF CNT1, .100 ; LOADF CNT2, .10 ;MUL1 ; MOVF TEMP_MUL, W ; ADDWF LO16, F ; BTFSS STATUS, C ;; IF CARRY IS SET, ; GOTO $ + 2 ;; ELSE: SKIP ; INCF HI16, F ;; THEN: PROCESS ; ; DECFSZ CNT1, F ; GOTO MUL1 ; LOADF CNT1, .100 ; DECFSZ CNT2, F ; GOTO MUL1 ; RETURN ;--------------------------------------- ;CONVER 16BIT HEX INTO 5 DIGIT BCD ;INPUT : HI_BYTE, LO_BYTE ;OUTPUTS: TEN_K, THOU, HUND, TENS, ONES HEX16_TO_DEC5: MOVF_F HI_BYTE, NUMH ;; MOVF f,d Пересылка регистра F MOVF_F LO_BYTE, NUML SWAPF NUMH,W ;; SWAPF f,d Обмен местами тетрад в f ANDLW 0X0F ;; ANDLW k Логическое "И" константы и W ADDLW 0XF0 ;; ADDLW k Сложение константы с W MOVWF THOU ;; MOVWF f Пересылка W в F ADDWF THOU,F ;; ADDWF f,d Сложение W с f ADDLW .226 ;; ADDLW k Сложение константы с W MOVWF HUND ;; MOVWF f Пересылка W в F ADDLW .50 ;; ADDLW k Сложение константы с W MOVWF ONES ;; MOVWF f Пересылка W в F MOVF NUMH,W ;; MOVF f,d Пересылка регистра F ANDLW 0X0F ;; ANDLW k Логическое "И" константы и W ADDWF HUND,F ;; ADDWF f,d Сложение W с f ADDWF HUND,F ;; ADDWF f,d Сложение W с f ADDWF ONES,F ;; ADDWF f,d Сложение W с f ADDLW .233 ;; ADDLW k Сложение константы с W MOVWF TENS ;; MOVWF f Пересылка W в F ADDWF TENS,F ;; ADDWF f,d Сложение W с f ADDWF TENS,F ;; ADDWF f,d Сложение W с f SWAPF NUML,W ;; SWAPF f,d Обмен местами тетрад в f ANDLW 0X0F ;; ANDLW k Логическое "И" константы и W ADDWF TENS,F ;; ADDWF f,d Сложение W с f ADDWF ONES,F ;; ADDWF f,d Сложение W с f RLF TENS,F ;; RLF f,d Вращение f влево через перенос RLF ONES,F ;; RLF f,d Вращение f влево через перенос COMF ONES,F ;; COMF f,d Инверсия регистра f RLF ONES,F ;; RLF f,d Вращение f влево через перенос MOVF NUML,W ;; MOVF f,d Пересылка регистра F ANDLW 0X0F ;; ANDLW k Логическое "И" константы и W ADDWF ONES,F ;; ADDWF f,d Сложение W с f RLF THOU,F ;; RLF f,d Вращение f влево через перенос MOVLW 0X07 ;; MOVLW k Пересылка константы в W MOVWF TEN_K ;; MOVWF f Пересылка W в F MOVLW .10 ;; MOVLW k Пересылка константы в W HD1: ADDWF ONES,F ;; ADDWF f,d Сложение W с f DECF TENS,F ;; DECF f,d Декремент регистра f BTFSS 3,0 ;; BTFSS f,b Пропустить команду, если бит b=1 GOTO HD1 ;; GOTO k Переход по адресу HD2: ADDWF TENS,F ;; ADDWF f,d Сложение W с f DECF HUND,F ;; DECF f,d Декремент регистра f BTFSS 3,0 ;; BTFSS f,b Пропустить команду, если бит b=1 GOTO HD2 ;; GOTO k Переход по адресу HD3: ADDWF HUND,F ;; ADDWF f,d Сложение W с f DECF THOU,F ;; DECF f,d Декремент регистра f BTFSS 3,0 ;; BTFSS f,b Пропустить команду, если бит b=1 GOTO HD3 ;; GOTO k Переход по адресу HD4: ADDWF THOU,F ;; ADDWF f,d Сложение W с f DECF TEN_K,F ;; DECF f,d Декремент регистра f BTFSS 3,0 ;; BTFSS f,b Пропустить команду, если бит b=1 GOTO HD4 ;; GOTO k Переход по адресу RETURN ;--------------------------------------- ;PREREQUISITE: LOAD THOU, HUND, TENS, ONES ; ;LCD_TO_DEC: ; MOVLW 0X30 ; SUBWF TEN_K, F ; SUBWF THOU, F ; SUBWF HUND, F ; SUBWF TENS, F ; SUBWF ONES, F ; RETURN ;--------------------------------------- ;PREREQUISITE: LOAD TEN_K, THOU, HUND, TENS, ONES ; DEC_TO_LCD: MOVLW 0X30 ADDWF TEN_K, F ADDWF THOU, F ADDWF HUND, F ADDWF TENS, F ADDWF ONES, F RETURN ;----------------------------------------------- ; LCD DRIVER AND COMMANDS FOR 4-BIT INTERFACE ;----------------------------------------------- ;PREREQUISITES: E, RS - OUTPUT ; PORTB 4-7 - OUTPUT ; MS_DELAY - SUBROUTINE INIT_LCD: LOADF MS_TIME, .40 CALL MS_DELAY ;; FUNCTION SET BCF RS ;; SET LCD TO COMMAND MODE LOADF PORTB, B'00100000' CALL PULSE_E LOADF PORTB, B'00100000' CALL PULSE_E LOADF PORTB, B'10000000' CALL PULSE_E LOADF MS_TIME, .1 ;; DISPLAY CONTROL CALL MS_DELAY LOADF PORTB, B'00000000' CALL PULSE_E LOADF PORTB, B'11110000' CALL PULSE_E LOADF MS_TIME, .1 ;; CLEAR DISPLAY CALL MS_DELAY LOADF PORTB, B'00000000' CALL PULSE_E LOADF PORTB, B'00010000' CALL PULSE_E LOADF MS_TIME, .1 ;; ENTRY MODE SET, .2 CALL MS_DELAY LOADF PORTB, B'00000000' CALL PULSE_E LOADF PORTB, B'01100000' CALL PULSE_E LOADF MS_TIME, .2 CALL MS_DELAY CALL BLINK_OFF CALL CURSOR_OFF RETURN PULSE_E: BSF E GOTO $ + 1 GOTO $ + 1 GOTO $ + 1 BCF E LOADF MS_TIME, .1 CALL MS_DELAY RETURN ;------------------------------------------- ;INPUT : CHAR, 'X' ;OUTPUT: SENDS THE CHARACTER TO THE LCD ;SEND_CHAR: ; BSF RS ;; SET LCD TO CHARACTOR MODE ; MOVF CHAR, W ; MOVWF PORTB ; CALL PULSE_E ; SWAPF CHAR, W ; MOVWF PORTB ; CALL PULSE_E ; RETURN ;--------------------------------------- ;INPUT : CHAR, 'X' ;OUTPUT: SENDS THE COMMAND TO THE LCD SEND_CHAR: BSF RS ;; SET LCD TO CHARACTOR MODE GOTO $ + 2 SEND_COMM: BCF RS ;; SET LCD TO COMMAND MODE MOVF CHAR, W MOVWF PORTB CALL PULSE_E SWAPF CHAR, W MOVWF PORTB CALL PULSE_E RETURN ;--------------------------------------- CLEAR: LOADF CHAR, B'00000001' CALL SEND_COMM LOADF MS_TIME, .2 CALL MS_DELAY RETURN ;HOME: ; LOADF CHAR, B'00000010' ; CALL SEND_COMM ; LOADF MS_TIME, .2 ; CALL MS_DELAY ; RETURN SET_ADDRESS: BSF CHAR, 7 CALL SEND_COMM RETURN BLINK_OFF: LOADF CHAR, B'00001110' CALL SEND_COMM RETURN CURSOR_OFF: LOADF CHAR, B'00001100' CALL SEND_COMM RETURN -------------------------------------- Hello jab please convert this assembler in the .HEX thank you for support :) |
||
http поисковик затейник Группа: Модераторы Сообщений: 1045 |
Добавлено: 17-03-2010 17:43 | |
Maybe save it as txt and rename the hex? HEX
|
||
Mitko Группа: Участники Сообщений: 7 |
Добавлено: 17-03-2010 19:01 | |
sorry not work maybe includ and this -------------- shorts.inc #DEFINE BANK0 BCF STATUS, RP0 #DEFINE BANK1 BSF STATUS, RP0 ;~~~~~~~~~~~~~MACROS~~~~~~~~~~~~~~~ LOADF MACRO F_VAR, LIT_NUM MOVLW LIT_NUM MOVWF F_VAR ENDM MOVF_F MACRO F_FROM, F_TO MOVF F_FROM, W MOVWF F_TO ENDM CHR_LCD_OUT MACRO LIT_NUM MOVLW LIT_NUM MOVWF CHAR CALL SEND_CHAR ENDM MEM_LCD_OUT MACRO LIT_NUM MOVF LIT_NUM, W MOVWF CHAR CALL SEND_CHAR ENDM ;~~~~ |
||
jab магистр Группа: Модераторы Сообщений: 4243 |
Добавлено: 18-03-2010 09:49 | |
HEX
|
Страницы: << Prev 1 2 3 4 5 6 Next>> |
Gauss2k - gauss gun у тебя дома / Электроника и Электротехника / Микроконтроллеры, LCD и все, что с ними связано. |