Пропорциональное управление на МК (Знание=Сила)
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
все систему запустил, на борту имеется понипрог, протеус и авр студио 5
что делать теперь?
что делать теперь?
не зная броду не лезь к вольтмоду
- Реклама
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
есть у меня вот такая панелька для программирования
не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
тинька через программатор видится ?
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
ну раньше видилась и да же прошивалась...
сейчас подключу - вспомню, как это делается...
сейчас подключу - вспомню, как это делается...
не зная броду не лезь к вольтмоду
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
проверил, все работает - прочитал фьюзы и данные.
Что теперь ?
Что теперь ?
не зная броду не лезь к вольтмоду
- Реклама
Re: Пропорциональное управление на МК (Знание=Сила)
Давай в проект инициализацию портов ввода вывода
пин порта на передатчик в "1" и на него повесь светик или так проверь что там логическая единица появилась
p.s. чтобы проверить что мега от внутреннего генератора работает (или ты уже внешний генератор фюзами включил ?)
пин порта на передатчик в "1" и на него повесь светик или так проверь что там логическая единица появилась
p.s. чтобы проверить что мега от внутреннего генератора работает (или ты уже внешний генератор фюзами включил ?)
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
это я делать не умею покаВитГо писал(а):p.s. чтобы проверить что мега от внутреннего генератора работает (или ты уже внешний генератор фюзами включил ?)
вот код Ты имел ввиду ?
Спойлер
Код: Выделить всё
/*
* Proba2.asm
*
* Created: 28.08.2012 12:11:36
* Author: UWRTEY
*/
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def Temp5=R21
.def Temp6=R22
.def Temp7=R23
.def Temp8=R24
.def Temp9=R25
.dseg ;оперативка
key_buff: .byte 5 ; зарезервируем 5 байт в ОЗУ
;******************************************************************************
;******************************************************************************
.cseg
.org 0
; СТАРТ
rjmp RESET ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
.org INT0addr; = 0x0001 ; External Interrupt Request 0
reti
.org INT1addr; = 0x0002 ; External Interrupt Request 1
reti
.org ICP1addr; = 0x0003 ; Timer/Counter1 Capture Event
reti
.org OC1Aaddr; = 0x0004 ; Timer/Counter1 Compare Match A/////////////////////////
rjmp TIM1_COMPA
.org OVF1addr; = 0x0005 ; Timer/Counter1 Overflow
reti
.org OVF0addr; = 0x0006 ; Timer/Counter0 Overflow
reti
.org URXCaddr; = 0x0007 ; USART, Rx Complete
reti
.org UDREaddr; = 0x0008 ; USART Data Register Empty
reti
.org UTXCaddr; = 0x0009 ; USART, Tx Complete
reti
.org ACIaddr; = 0x000a ; Analog Comparator
reti
.org PCIBaddr; = 0x000b ; Pin Change Interrupt Request B
reti
.org OC1Baddr; = 0x000c ;
reti
.org OC0Aaddr; = 0x000d ;
reti
.org OC0Baddr; = 0x000e ;
reti
.org USI_STARTaddr; = 0x000f ; USI Start Condition
reti
.org USI_OVFaddr; = 0x0010 ; USI Overflow
reti
.org ERDYaddr; = 0x0011 ;
reti
.org WDTaddr; = 0x0012 ; Watchdog Timer Overflow
reti
.org PCIAaddr; = 0x0013 ; Pin Change Interrupt Request A
reti
.org PCIDaddr; = 0x0014 ; Pin Change Interrupt Request D
reti
;******************************************************************************
;******************************************************************************
;старт
;******************************************************************************
reset: ; включение микроконтроллера
cli ; глобальный запрет на прерывания
ldi Temp,low(RamEnd) ; инициализации стека
out SPL,Temp ;
ldi Temp,0b00000100 ;
out DDRB,Temp ; настроили порт "В" (0-ввод, 1-вывод)
; 00000х00 - "вывод" на передатчик (PB3- 15 ножка)
; хххх0000 - "ввод" для чтения строк клавиатуры
ldi Temp,0b00001111 ;
out DDRD,Temp ; настраиваем порт "D" (0-ввод, 1-вывод)
; 0000хххх - на вывод столбцов клавы
ldi Temp,(1<<COM1A0) ;переключать ножку "OC1A" по совпадению (PB3- 15 ножка)
out TCCR1A,Temp ;*1
ldi Temp,(1<<wgm12)|(1<<cs10) ;подключили режим "CTC" (вместе с *1) и установили тактовый сигнал = CK (1:1)
out TCCR1B,Temp ; таймер начал считать!!!
; инициализация компаратора
ldi Temp,0xC ; 3кГц, 1/3000=0,00033сек=330мкс, 330/2=165мкс длительность импульса или паузы(время-Т)
out OCR1AH,Temp ; 0,05мкс*65535=3276,75 3276,75>165 --- по этому не будем делить тактовую частоту (СК)
ldi Temp,0xE4 ; 165мкс/0,05мкс=3300 тиков таймера 3300=CE4(hex)
out OCR1AL,Temp ; если 6600=19C8(hex)
ldi Temp,(1<<OCIE1A) ; разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0 ; обнуление таймера при включении
out TCNT1H,Temp
out TCNT1L,Temp
sei ; глобальное разрешение прерываний
ldi Temp,0b00000100 ; выводим в порт "Б" на "OC1A" импульс
out PortB,Temp
;*******************************************************************************
; главный цикл
;*******************************************************************************
main cycle:
rjmp main cycle
;*******************************************************************************
;обработка прерывания
;*******************************************************************************
TIM1_COMPA:
reti ; ( выход )ни чего обрабатывать не нужно
; включен режим CTC
; обнуление таймера происходит автоматически
; "OC1A" меняет свое логическое состояние автоматически
;*******************************************************************************
где F зависит от выставленных фьюзов или же от внутреннего генератора
не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
Ну это ты далеко зашагал...
1. нужно сделать .include файла определений контроллера ! мы это уже обсуждали где то выше
2. В программе сделай только настройку портов ввода вывода, таймер настраивать не нужно, стек тоже можешь не настраивать. только настройки DDRx !
3. после настройки портов выведи в пин порта передатчика "1" (зажги светодиод)
4. в конце программы поставь loop: rjmp loop (чтобы зациклиться на месте)
1. нужно сделать .include файла определений контроллера ! мы это уже обсуждали где то выше
2. В программе сделай только настройку портов ввода вывода, таймер настраивать не нужно, стек тоже можешь не настраивать. только настройки DDRx !
3. после настройки портов выведи в пин порта передатчика "1" (зажги светодиод)
4. в конце программы поставь loop: rjmp loop (чтобы зациклиться на месте)
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
это очень просто...
не зная броду не лезь к вольтмоду
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
оно ?
Спойлер
Код: Выделить всё
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def Temp5=R21
.def Temp6=R22
.def Temp7=R23
.def Temp8=R24
.def Temp9=R25
.dseg ;оперативка
key_buff: .byte 5 ; зарезервируем 5 байт в ОЗУ
;******************************************************************************
;******************************************************************************
.cseg
.org 0
; СТАРТ
rjmp RESET ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
.org INT0addr; = 0x0001 ; External Interrupt Request 0
reti
.org INT1addr; = 0x0002 ; External Interrupt Request 1
reti
.org ICP1addr; = 0x0003 ; Timer/Counter1 Capture Event
reti
.org OC1Aaddr; = 0x0004 ; Timer/Counter1 Compare Match A/////////////////////////
reti
.org OVF1addr; = 0x0005 ; Timer/Counter1 Overflow
reti
.org OVF0addr; = 0x0006 ; Timer/Counter0 Overflow
reti
.org URXCaddr; = 0x0007 ; USART, Rx Complete
reti
.org UDREaddr; = 0x0008 ; USART Data Register Empty
reti
.org UTXCaddr; = 0x0009 ; USART, Tx Complete
reti
.org ACIaddr; = 0x000a ; Analog Comparator
reti
.org PCIBaddr; = 0x000b ; Pin Change Interrupt Request B
reti
.org OC1Baddr; = 0x000c ;
reti
.org OC0Aaddr; = 0x000d ;
reti
.org OC0Baddr; = 0x000e ;
reti
.org USI_STARTaddr; = 0x000f ; USI Start Condition
reti
.org USI_OVFaddr; = 0x0010 ; USI Overflow
reti
.org ERDYaddr; = 0x0011 ;
reti
.org WDTaddr; = 0x0012 ; Watchdog Timer Overflow
reti
.org PCIAaddr; = 0x0013 ; Pin Change Interrupt Request A
reti
.org PCIDaddr; = 0x0014 ; Pin Change Interrupt Request D
reti
;******************************************************************************
;******************************************************************************
;старт
;******************************************************************************
reset: ; включение микроконтроллера
cli ; глобальный запрет на прерывания
ldi Temp,0b00001000 ; (вот тут косяк был)
out DDRB,Temp ; настроили порт "В" (0-ввод, 1-вывод)
; 0000х000 - "вывод" на передатчик (PB3- 15 ножка)
; хххх0000 - "ввод" для чтения строк клавиатуры
ldi Temp,0b00001111 ;
out DDRD,Temp ; настраиваем порт "D" (0-ввод, 1-вывод)
; 0000хххх - на вывод столбцов клавы
ldi Temp,0b00001000 ; выводим в порт "Б" на "OC1A" импульс (вот тут косяк был)
out PortB,Temp
;*******************************************************************************
; главный цикл
;*******************************************************************************
main cycle:
rjmp main cycle
Последний раз редактировалось uwrtey Вс сен 02, 2012 21:18:50, всего редактировалось 1 раз.
не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
светодиод зажегся ? (уровень лог "1" появился?)
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
косяки конечно были! исправил. (код выше тоже поправил)
Залил - на 15 ноге лог_1
Залил - на 15 ноге лог_1
не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
теперь давай код инициализации таймера добавь,
в OCR1A запиши значение побольше 0чFFFF
и проверь импульсы на OC1A
в OCR1A запиши значение побольше 0чFFFF
и проверь импульсы на OC1A
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
вот пока только код накалякал
Спойлер
Код: Выделить всё
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def Temp5=R21
.def Temp6=R22
.def Temp7=R23
.def Temp8=R24
.def Temp9=R25
.dseg ;оперативка
key_buff: .byte 5 ; зарезервируем 5 байт в ОЗУ
;******************************************************************************
;******************************************************************************
.cseg
.org 0
; СТАРТ
rjmp RESET ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
.org INT0addr; = 0x0001 ; External Interrupt Request 0
reti
.org INT1addr; = 0x0002 ; External Interrupt Request 1
reti
.org ICP1addr; = 0x0003 ; Timer/Counter1 Capture Event
reti
.org OC1Aaddr; = 0x0004 ; Timer/Counter1 Compare Match A/////////////////////////
rjmp TIM1_COMPA
.org OVF1addr; = 0x0005 ; Timer/Counter1 Overflow
reti
.org OVF0addr; = 0x0006 ; Timer/Counter0 Overflow
reti
.org URXCaddr; = 0x0007 ; USART, Rx Complete
reti
.org UDREaddr; = 0x0008 ; USART Data Register Empty
reti
.org UTXCaddr; = 0x0009 ; USART, Tx Complete
reti
.org ACIaddr; = 0x000a ; Analog Comparator
reti
.org PCIBaddr; = 0x000b ; Pin Change Interrupt Request B
reti
.org OC1Baddr; = 0x000c ;
reti
.org OC0Aaddr; = 0x000d ;
reti
.org OC0Baddr; = 0x000e ;
reti
.org USI_STARTaddr; = 0x000f ; USI Start Condition
reti
.org USI_OVFaddr; = 0x0010 ; USI Overflow
reti
.org ERDYaddr; = 0x0011 ;
reti
.org WDTaddr; = 0x0012 ; Watchdog Timer Overflow
reti
.org PCIAaddr; = 0x0013 ; Pin Change Interrupt Request A
reti
.org PCIDaddr; = 0x0014 ; Pin Change Interrupt Request D
reti
;******************************************************************************
;******************************************************************************
;старт
;******************************************************************************
reset: ; включение микроконтроллера
cli ; глобальный запрет на прерывания
ldi Temp,low(RamEnd) ; инициализации стека
out SPL,Temp ;
ldi Temp,0b00001000 ;
out DDRB,Temp ; настроили порт "В" (0-ввод, 1-вывод)
; 0000х000 - "вывод" на передатчик (PB3- 15 ножка)
; хххх0000 - "ввод" для чтения строк клавиатуры
ldi Temp,0b00001111 ;
out DDRD,Temp ; настраиваем порт "D" (0-ввод, 1-вывод)
; 0000хххх - на вывод столбцов клавы
ldi Temp,(1<<COM1A0) ;переключать ножку "OC1A" по совпадению (PB3- 15 ножка)
out TCCR1A,Temp ;*1
ldi Temp,(1<<wgm12)|(1<<cs10) ;подключили режим "CTC" (вместе с *1) и установили тактовый сигнал = CK (1:1)
out TCCR1B,Temp ; таймер начал считать!!!
; инициализация компаратора
ldi Temp,0xFF ; как и просил -побольше ( 0xFFFF )
out OCR1AH,Temp ;
ldi Temp,0xFF ;
out OCR1AL,Temp ;
ldi Temp,(1<<OCIE1A) ; разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0 ; обнуление таймера при включении
out TCNT1H,Temp
out TCNT1L,Temp
sei ; глобальное разрешение прерываний
ldi Temp,0b00001000 ; выводим в порт "Б" на "OC1A" импульс
out PortB,Temp
;*******************************************************************************
; главный цикл
;*******************************************************************************
main_cycle:
rjmp main_cycle
;*******************************************************************************
;обработка прерывания
;*******************************************************************************
TIM1_COMPA:
reti ; ( выход )ни чего обрабатывать не нужно
; включен режим CTC
; обнуление таймера происходит автоматически
; "OC1A" меняет свое логическое состояние автоматически
;*******************************************************************************
не зная броду не лезь к вольтмоду
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
прошил, все работает (на выходе OC1A прямоугольные импульсы)
захотел измерить частоту и подключил осциллограф - но так и не смог увидеть четкую картинку (видимо частота маловата)
(еще и не умею толком пользоваться осциллографом)
вдобавок глянул на картинку "осциллографом из звуковой карточки"
захотел измерить частоту и подключил осциллограф - но так и не смог увидеть четкую картинку (видимо частота маловата)
(еще и не умею толком пользоваться осциллографом)
вдобавок глянул на картинку "осциллографом из звуковой карточки"
не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
задай пред-делитель для таймера побольше (1024 там есть)
напиши ПОДПРОГРАММУ сканирования клавиатуры в буфер озу
должна быть именно подпрограмма, то есть вызываться по rcall и возвращаться по ret
напиши ПОДПРОГРАММУ сканирования клавиатуры в буфер озу
должна быть именно подпрограмма, то есть вызываться по rcall и возвращаться по ret
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
ок, вечером попробую 
не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
Нужно будет сделать подпрограмму сканирования клавиатуры
и подпрограмму проверки нажатой кнопки (любой)
по идее подпрограмма проверки кнопок просто должна сравнивать 5 байт считанных линий клавиатуры с 0x00
если значение не равно 0х00 - значит какая то кнопка была нажата и нужно начать передачу
в нашем варианте если зарегистрировано нажатие любой кнопки нужно будет просто вывести "1" на какой нить порт микроконтроллера - так мы проконтролируем что программа считывает значения с клавиатуры
и подпрограмму проверки нажатой кнопки (любой)
по идее подпрограмма проверки кнопок просто должна сравнивать 5 байт считанных линий клавиатуры с 0x00
если значение не равно 0х00 - значит какая то кнопка была нажата и нужно начать передачу
в нашем варианте если зарегистрировано нажатие любой кнопки нужно будет просто вывести "1" на какой нить порт микроконтроллера - так мы проконтролируем что программа считывает значения с клавиатуры


