Страница 1 из 1

Срочно нужна помощь Tiny15 PWM

Добавлено: Пн окт 29, 2012 08:17:00
Arik
Всем привет! Написал программу, но в железе проверить нет возможности и протеуса тоже нет :-( Помогите пожалуйста проверьте в железе и если нужно подправьте плиз прогу. Она должна работать так: если на PB.3 лог 0 то на PB.1 выдается нарастающий шим (моторчик набирает скорость а если лог 1 то шим не выдается Проверьте на моторчике пожалуйста срочно надо! Спасибо!

Код: Выделить всё

.include "..\avr_assembler\appnotes\tn15def.inc"
.cseg
.org 0
   rjmp start
   reti      ; Addr $01
   reti      ; Addr $02
   reti      ; Addr $03
   reti      ; Addr $04
   reti      ; Addr $05
   reti      ; Addr $06        Use 'rjmp myVector'
   reti      ; Addr $07        to define a interrupt vector
   reti      ; Addr $08
   reti      ; Addr $09
   reti      ; Addr $0A
   reti      ; Addr $0B        This is just an example
   reti      ; Addr $0C        Not all MCUs have the same
   reti      ; Addr $0D        number of interrupt vectors
   reti      ; Addr $0E
   reti      ; Addr $0F
   reti      ; Addr $10
start:
	ldi r17,0b00001010 ;nastroika porta B
	out DDRB,r17
	ldi r17,0b00001000
	out portb,r17
	nop

	ldi r17,(1<<COM1A1)|(1<<CS10)|(1<<CS11)|(1<<CS12)|(1<<PWM1)
	out TCCR1,r17
	ldi r20,159
	out ocr1b,r20
	ldi r17,0
	out ocr1a,r17
	nop

scan:
	sbic pinb,3   ; esli pinb3 = 1 pereiti na scan a esli = 0 to
	rcall scan
	
	ldi r17,80    ; 50%
	out ocr1a,r17
	rcall delay

	sbic pinb,3   ; esli pinb3 = 1 idem na start, esli = 0 idem dalshe
	rcall start
	ldi r17,100  ; 60%
	out ocr1a,r17
	rcall delay

	sbic pinb,3   ; esli pinb3 = 1 idem na scan, esli = 0 idem dalshe
	rcall start
	ldi r17,120    ; 70%
	out ocr1a,r17
	rcall delay
	
	sbic pinb,3   ; esli pinb3 = 1 idem na scan, esli = 0 idem dalshe
	rcall start
	ldi r17,140    ; 80%
	out ocr1a,r17
	rcall delay
	
	sbic pinb,3   ; esli pinb3 = 1 idem na scan, esli = 0 idem na loop
	rcall start
	ldi r17,159   ; 99%
	out ocr1a,r17
	rcall delay

loop:		
	sbic pinb,3   ; esli pinb3 = 1 idem na scan, esli = 0 idem na loop
	rcall start
	rcall loop
		
delay:
; ===========
;    delay loop generator
;     12000000 cycles:
; -----------------------------
; delaying 11999976 cycles:
          ldi  R20, $3E
WGLOOP0:  ldi  R21, $FD
WGLOOP1:  ldi  R22, $FE
WGLOOP2:  dec  R22
          brne WGLOOP2
          dec  R21
          brne WGLOOP1
          dec  R20
          brne WGLOOP0
; -----------------------------
; delaying 24 cycles:
          ldi  R20, $08
WGLOOP3:  dec  R20
          brne WGLOOP3
; ===========
ret

Re: Срочно нужна помощь Tiny15 PWM

Добавлено: Сб ноя 03, 2012 04:26:29
Enigm
Найти скачать протэус займет не больше 2-3 часов.
На ваш проэкт протэус ругается на ошибки в коде. (program stack underflow)
Но проэкт работает, и работает так.
Как только подали и удерживаем 0 , то шим начинает работать и медленно увеличивать, но если убрать 0, то шим не замолкает, а продолжает свою работу без наростания.
Править вам, так как я пишу в другой среде.

Re: Срочно нужна помощь Tiny15 PWM

Добавлено: Сб ноя 03, 2012 20:28:14
korsaj
Вот эти строки дают переполнение стека

Код: Выделить всё

scan:
   sbic pinb,3   ; esli pinb3 = 1 pereiti na scan a esli = 0 to
   rcall scan
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
   rcall start
   rcall loop
Вместо rcall нужно использовать rjmp

И чтобы не было ШИМ после отпускания кнопки надо написать так

Код: Выделить всё

scan:
   sbic pinb,3   ; esli pinb3 = 1 pereiti na scan a esli = 0 to
   out ocr1a,r17
   rjmp scan

Re: Срочно нужна помощь Tiny15 PWM

Добавлено: Пт янв 17, 2014 13:44:36
Arik
Спасибо большое за помощь сам давно разобрался просто не было времени зайти и отписаться. Тестировал сразу в железе но плата что то дорого обошлась в 700 рублей плюс компоненты (которые уже были) Это модуль управления детским водным мотоциклом. Родную плату было не достать делал свою. Спасибо!