Unless all
specify that are a beginner to the first arms with picbasic pro
I intezione an engine to move step by step with classical schedina STEP and DIR
and there are successful but when you want to see a given (acceleration) on LCD
the frequency of work decreases paurosamente
Almost as I understood the pic can not 'make girasre the engine and at the same time see a given
and so?
there is' a way around the obstacle?
I thank you for helping me understand you can afford
this and 'what I could do with a 16F877
Code:
Code:DEFINE OSC 20 DEFINE LCD_DREG PORTD ' Define LCD connections DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTD DEFINE LCD_RSBIT 2 DEFINE LCD_EREG PORTD DEFINE LCD_EBIT 3 DEFINE LCD_LINES 4 DEFINE LCD_DATAUS 50 VEL VAR WORD ' Velocita'' VELOCITA VAR WORD ACC VAR WORD ' Accellerazio/decellerazione ACCELL VAR WORD servo1 VAR PORTC.1 ' Uscita step motore 1 TRISA = 255 ' Enable first button row PORTA = %11111111 ADCON1 = 7 ' PORTA and PORTE to digital Low servo1 ' Servo output low Main: READ 0 ,VEL 'read 1, VELOCITA READ 2, ACC READ 3, ACCELL LCDOut $fe, $80, "VEL = ", #VEL 'LCDOut $fe, $c0, "VELOCITA = ", #VELOCITA LCDOut $fe, $94, "ACC = ", #ACC LCDOut $fe, $D4, "ACCELL = ", #ACCELL GOTO MAINLOOP UNO: IF PORTA.0 = 1 THEN ACC= ACC+1 PAUSE 10 ENDIF IF PORTA.1 = 1 THEN ACC = ACC-1 PAUSE 10 ENDIF Lcdout $fe, 1 ' Clear screen LCDOut $fe, $94, "ACC = ", #ACC WRITE 2, ACC IF PORTA.2 = 1 THEN GOTO DUE GOTO UNO DUE: IF PORTA.0 = 1 THEN VEL= VEL+1 PAUSE 10 ENDIF IF PORTA.1 = 1 THEN VEL = VEL-1 PAUSE 10 ENDIF Lcdout $fe, 1 ' Clear screen LCDOut $fe, $80, "VEL = ", #VEL WRITE 0 , VEL IF PORTA.3 = 1 THEN GOTO MAINLOOP ENDIF GOTO DUE Mainloop: TRISB = $fe PORTB = 1 IF PORTB.1 = 1 Then GoSUB MOTOR ELSE GOSUB MOTOR2 ENDIF IF PORTA.2 = 1 THEN Lcdout $fe, 1 ' Clear screen LCDOut $fe, $c0, "ENTRATA SETUP " PAUSE 1000 GOTO UNO ELSE GOTO MAINLOOP ENDIF MOTOR: IF VELOCITA < VEL THEN VELOCITA = VEL ENDIF servo1 = 1 ' Start servo pulse PauseUs VELocita servo1 = 0 ' End servo pulse PauseUs VELOCITA velocita = velocita - 1 Lcdout $fe, 1 ' Clear screen LCDOut $fe, $c0, "VEL ",#VELOCITA RETURN GOTO MAINLOOP MOTOR2: IF VELOCITA < (VEL*3) THEN servo1 = 1 ' Start servo pulse PauseUs VELocita servo1 = 0 ' End servo pulse PauseUs VELOCITA ELSE VELOCITA = (VEL * 3) LOW SERVO1 ENDIF velocita = velocita + 1 RETURN GOTO MAINLOOP END




Bookmarks