Делитель частоты инкрементального энкодера.
Понадобилось мне согласовать контроллер DVP20SX211 с частотником 45P5GSL
Как оказалось производитель китай. Вышел прямо на производителя, но засада то, документации на него даже у самого производителя не оказалось )))
Мол модель старая (2013г.) , максимум чем могут помочь, это продать новый )))
Немного всеже пролили свет, скинув мануал от похожих частотников.
Дальнейшее изучение выявило отсутствие возможности командовать частотником по модбасу.
Но благо на разьеме есть выход энкодера обратной связи, с максимальной частотой на выходе 20кГц.
Контроллер DVP20SX211 такую частоту не способен считать.
Пришлось немного химичить.
Вышел такой вот делитель выхода энкодера по одному из каналов, в данном случае А.
Что на входе и выходе:
- IMG_000.jpg (38.87 Кіб) Переглянуто 6601 раз
Плата собрана на attiny13 , с написанием пары строк
.DSEG ; Сегмент ОЗУ
.CSEG
.org 0 ;Задание нулевого адреса старта программы
rjmp reset ;Безусловный переход к метке reset
.org 1
rjmp Prer
.org 2
reti ;Pin Change Interrupt0
.org 3
reti ;timer0_ovf
.org 4
reti ;EEPROM write complete
.org 5
reti ;Analog Comparator Interrupt
.org 6
reti ;timerA;Timer_Counter0A; Compare Match A
.org 7
reti ;Timer_Counter0B; Compare Match B
.org 8
reti ;Watchdog Timeout
.org 9
reti ;conversion;ADC Conversion Complete Handle
reset:
wdr; Reset Watchdog Timer
;ldi r16,24
;out WDTCR, r16;
;ldi r16,12
;out WDTCR, r16;
LDI ZL,Low(SRAM_START) ; Адрес начала ОЗУ в индекс
LDI ZH,High(SRAM_START)
CLR R16 ; Очищаем R16
Flush: ST Z+,R16 ; Сохраняем 0 в ячейку памяти
CPI ZH,High(RAMEND+1) ; Достигли конца оперативки?
BRNE Flush ; Нет? Крутимся дальше!
CPI ZL,Low(RAMEND+1) ; А младший байт достиг конца?
BRNE Flush
CLR ZL ; Очищаем индекс
CLR ZH
LDI ZL, 30 ; Адрес самого старшего регистра
CLR ZH ; А тут у нас будет ноль
DEC ZL ; Уменьшая адрес
ST Z, ZH ; Записываем в регистр 0
BRNE PC-2 ; Пока не перебрали все не успокоились
ldi r16, RAMEND ;Загрузка в регистр r16 адреса верхней границы ОЗУ
out SPL, r16
sbi DDRB, 4
sbi PORTB, 1
ldi r16,3
out MCUCR,r16 ;
ldi r16,(1<<INT0);
out GIMSK, r16 ;
ldi r16,(1<<6)
out GIFR,r16
sei
main:
rjmp main
Prer:
sbis PINB,1
rjmp Prer1
sbis PINB,1
rjmp Prer1
sbis PINB,1
rjmp Prer1
sbis PINB,1
rjmp Prer1
sbis PINB,1
rjmp Prer1
inc r16 ; Увеличить на 1 r16
cpi r16,10 ; Делитель времени
brlo Prer1
clr r16 ; Очистить r18
sbis PINB,4
rjmp Prer2
cbi PORTB,4 ; Очистить бит в i/o
rjmp Prer1
Prer2:
sbi PORTB,4 ; Установить бит i/o
Prer1:
reti
Дальше сигнал улетает в DVP20SX211 и уже от туда задается скорость частотника аналоговым уровнем.