![]() |
![]() |
![]() |
|
|
|||||||
| Micro Controllers Discuss all aspects of micro controllers - building them, coding them, etc. All controllers are welcome - PIC, BASIC, Z8 Encore!, etc. |
|
|
Thread Tools | Display Modes |
|
|
(permalink) |
|
Hi
I need to generate the following pattern coding for two different ports(a and b). How do i assign the ports and first it has to generate on portA and with some delay then the next pattern to be generated. Whatever pattern generated want to look back in the LCD on the PICDEMplus eval board- how i can do this. LIST p=16F876A ;tell assembler what chip we are using include "P16F876A.inc" ;include the defaults for the chip ;---------------------- #define CONF1 _CP_OFF & _DEBUG_OFF & _CPD_OFF #define CONF2 _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC __CONFIG CONF1 & CONF2 ;--------------------- cblock 0x20 ;start of general purpose registers pulsePolarity ;used to store previous pulse polarity endc ;------------------------- ;Control line defs GND equ b'00001010' POS equ b'00001100' NEG equ b'00000011' ;--------------------------- org 0x0000 ;org sets the origin, 0x0000 for the 16F876A ;----------- ;this is where the program starts running movlw 0x07 movwf CMCON ;turn comparators off (make it like a 16F84) bsf STATUS, RP0 ;select bank 1 movlw b'00000000' ;set PortB all outputs movwf TRISA bcf STATUS, RP0 ;select bank 0 main bcf pulsePolarity,0 theWork call pulse ; Positive Pulse call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendZero call sendZero call sendOne call sendOne call sendZero call sendOne call sendZero call sendZero call sendZero call sendOne call sendOne call sendOne call sendOne call sendZero call sendZero call sendZero call sendOne call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendOne call sendOne call sendOne call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero goto theWork ; Idle for 1/10th clock period(10us) ------------------------------------------------ pulseWidthDelay nop nop nop nop return ; Idle for one reference clock period(100us) -------------------------------------- groundDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay nop nop nop nop nop nop return ;------------------------------------------------------- pulse btfsc pulsePolarity,0 goto posPulse negPulse bsf pulsePolarity,0 movlw NEG goto pulseIt posPulse bcf pulsePolarity,0 movlw POS pulseIt movwf PORTA call pulseWidthDelay movlw GND movwf PORTA return ;--------------------------------------------------------- sendZero call groundDelay call groundDelay call pulse return ;---------------------------------------------------------- sendOne call groundDelay call pulse call groundDelay call pulse return ;--------------------------------------------------------- sendSlash call sendOne ; sending '/' - 1111001(Fh) call sendOne call sendOne call sendOne call sendZero call sendZero call sendOne return ;-------------------------------------------------------- end |
|
|
|
|
|
|
(permalink) |
|
I suggest you give more details of what you are trying to do, I can't make any sense of what you are attempting.
|
|
|
|
|
|
|
(permalink) |
|
Hi
I am generating the 0101 pattern using the PIC IC to driver a motor circuit. This i want to cross check in the LCD of the full pattern instead of monitoring in the scope. The same pattern to be generated on the two ports(A,B) also. can u pl.help me on this. |
|
|
|
|
|
|
(permalink) |
|
I don't quite understand your 2nd point. But we usually drive motors using PWM. Most PICs should have one or more PWM modules built-in. And you are using 2 ports for driving motors? That's a lot of motors.
|
|
|
|
|
|
|
(permalink) |
|
There's still very little information there, are you trying to feed a stepper motor?, or multiple DC motors?.
|
|
|
|
|
|
|
(permalink) |
|
Hi
Sorry for not giving clear details. Actually the pattern output will be given to multilple motors in the intial phase of the project - then in the second phase it will be connected to stepper motor. first i have to generate the pattern on both the port - the portA pattern can be started first then after some time -may be after 5us - the portB pattern to be generated. Whatever pattern generated - i want to see it in 2x16 character LCD. How the LCD will take the pattern generation inputs? Is there any conversion to be done ? help me on the above queries. |
|
|
|
|
|
|
(permalink) | ||
|
Quote:
Quote:
This code does it. Code:
_LCD_BIN_DATA MOVWF LCD_DAT1 MOVLW 8 MOVWF LCD_DAT2 LCD_LABEL1 CLRW RLF LCD_DAT1, F BTFSC STATUS,C MOVLW 1 CALL _HEX_Table CALL _LCD_CHAR DECFSZ LCD_DAT2,F GOTO LCD_LABEL1 RETURN _HEX_Table addwf PCL , f retlw 0x30 retlw 0x31 retlw 0x32 retlw 0x33 retlw 0x34 retlw 0x35 retlw 0x36 retlw 0x37 retlw 0x38 retlw 0x39 retlw 0x41 retlw 0x42 retlw 0x43 retlw 0x44 retlw 0x45 retlw 0x46 |
|||
|
|
|
|
|
(permalink) |
|
Hi
Thanks for the code. But one clarification -in the code call _LCD_CHAR to be called from where?? also i want to generate the same pattern in portA and portB. can i modify the code like this:- LIST p=16F876A ;tell assembler what chip we are using include "P16F876A.inc" ;include the defaults for the chip ;---------------------- #define CONF1 _CP_OFF & _DEBUG_OFF & _CPD_OFF #define CONF2 _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC __CONFIG CONF1 & CONF2 ;--------------------- cblock 0x20 ;start of general purpose registers pulsePolarity ;used to store previous pulse polarity endc ;------------------------- ;Control line defs GND equ b'00001010' POS equ b'00001100' NEG equ b'00000011' LCD_DAT1 equ 0x01 LCD_DAT2 equ 0x02 ;--------------------------- org 0x0000 ;org sets the origin, 0x0000 for the 16F876A ;----------- ;this is where the program starts running movlw 0x07 movwf CMCON ;turn comparators off (make it like a 16F876A bsf STATUS, RP0 ;select bank 1 movlw b'00000000' ;set PortB all outputs movwf TRISA bcf STATUS, RP0 ;select bank 0 _LCD_BIN_DATA MOVWF LCD_DAT1 MOVLW 8 MOVWF LCD_DAT2 LCD_LABEL1 CLRW RLF LCD_DAT1,F BTFSC STATUS,C MOVLW 1 call theWork DECFSZ LCD_DAT2,F goto LCD_LABEL1 main bcf pulsePolarity,0 theWork call pulse ; Positive Pulse call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendZero call sendOne call sendOne call sendOne call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendOne call sendZero call sendOne call sendOne call sendZero call sendZero call sendZero call sendOne call sendZero call sendOne call sendOne call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendOne call sendZero call sendOne call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendOne call sendZero call sendOne call sendOne call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendZero call sendOne call sendOne call sendOne call sendOne call sendOne call sendZero call sendOne call sendOne call sendOne call sendOne call sendZero call sendZero call sendOne call sendZero call sendOne call sendOne call sendOne call sendZero call sendOne call sendOne call sendOne call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendZero call sendOne call sendZero call sendOne call sendOne call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendOne call sendZero call sendOne call sendOne call sendOne call sendOne call sendOne call sendOne call sendZero call sendZero call sendOne call sendOne call sendOne call sendZero call sendOne call sendZero call sendOne call sendOne call sendOne call sendZero call sendOne call sendZero call sendOne call sendOne call sendOne call sendOne call sendZero call sendOne call sendOne call sendZero call sendOne call sendOne call sendOne call sendZero call sendZero call sendZero call sendZero call sendOne call sendOne call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendZero call sendOne call sendOne call sendOne call sendOne call sendOne call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendOne call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendZero call sendOne call sendZero call sendOne call sendOne call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendZero call sendZero call sendZero call sendOne call sendOne call sendZero call sendOne call sendOne call sendZero call sendZero call sendOne call sendOne call sendZero call sendZero call sendOne call sendZero call sendZero call sendZero call sendOne call sendZero call sendOne call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendSlash call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendOne call sendOne call sendOne call sendOne call sendOne call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero call sendZero goto theWork ; Idle for 1/10th clock period(10us) ------------------------------------------------ pulseWidthDelay nop nop nop nop return ; Idle for one reference clock period(100us) -------------------------------------- groundDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay call pulseWidthDelay nop nop nop nop nop nop return ;------------------------------------------------------- pulse btfsc pulsePolarity,0 goto posPulse negPulse bsf pulsePolarity,0 movlw NEG goto pulseIt posPulse bcf pulsePolarity,0 movlw POS pulseIt movwf PORTA call pulseWidthDelay movlw GND movwf PORTA return ;--------------------------------------------------------- sendZero call groundDelay call groundDelay call pulse return ;---------------------------------------------------------- sendOne call groundDelay call pulse call groundDelay call pulse return ;--------------------------------------------------------- sendSlash call sendOne call sendOne call sendOne call sendOne call sendZero call sendZero call sendOne return ;-------------------------------------------------------- end |
|
|
|
|
|
|
(permalink) | |
|
Quote:
If you don't have LCD code, check my tutorials. As for your modifications, you can't call your routine from the middle of the display loop (and I'm baffled as to why you should think of it?). You should call the _LCD_BIN_DATA routine when ever you want to display the value of W in binary. You will also need to add formatting routines as well, moving the cursor to where you want etc. |
||
|
|
|