Hi Melanie my lcd defines are:
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTE
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 1
DEFINE LCD_RWREG PORTE
DEFINE LCD_RWBIT 2
Hi Melanie my lcd defines are:
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTE
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 1
DEFINE LCD_RWREG PORTE
DEFINE LCD_RWBIT 2
If you look at the datasheet, you can see that PortE, bit 0,1, and 2 are all Analog ports. So what is most likely happening, is that the PIC is in analog mode for these pins and not giving you digital outputs.
Put this in your code before the DEFINES:
ADCON1.3=0
ADCON1.2=1
ADCON1.1=1
ADCON1.0=0
These 4 lines will make all of your analog pins into digital pins. If you need to use some of your digital pins as analog ones, then just change these 4 bits according to the table in the datasheet referenced below.
To see how I came to this, look at page 182 (184 of pdf) in the PIC 18f452 datasheet.
Thank you very much MikeTamu i just assumed that PBP took care of all that for me as there is no reference to it in the pbp manual.
Thanks again.
I am having similar problems trying to get an LCD working on EasyPIC3 from Mikroelectronika Board using PBP and 18F452 MCU. Although i can get the LED to blink , I cannot get the LCD to work. Can you help.
EasyPIC3 Development Board Configuration -
D4 - RB4
D5 - RB5
D6 - RB6
D7 - RB7
RS - RB2
E - RB3
RW - GND
My Code:
DEFINE OSC 8
' HARDWARE DEFINES
'-----------------------------------------------------------------
' Define LCD pins
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
'-----------------------------------------------------------------
TRISA = %111111 'INITIALIZE PORT DIRECTIONS
TRISB = %00000000
TRISC = %10101001
TRISD = %00000011
TRISE = %00000111
Adcon1 = 7 ' Set PORTA DIGITAL
INTCON2.7=1 ' DISABLE Pull-Up's
'-----------------------------------------------------------------
PAUSE 500
Lcdout $fe , 1 , "EasyPIC3 DEV"
LCDOut $FE,$C0, "Board v1A"
PAUSE 2000
END
Be sure you set HS_OSC fuse before programming your PIC
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hello,
Thanks for coming to my help once again, yes the Crystal fuse is set properly as i have a small led blink rotuine after this display , which works properly.
The LCD works with MikroBasic Compiler, But does not come on with PBP.
Because you are running at 8MHz, try including one or both of these and increasing the times as shown here
DEFINE LCD_COMMANDUS 4000
DEFINE LCD_DATAUS 100
Paul Borgmeier
Salt Lake City, UT
USA
__________________
Hava a look in the datasheet, register 17-2, PDF page 184
<img SRC="http://www.picbasic.co.uk/forum/attachment.php?attachmentid=1361&stc=1&d=117069960 6">
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Thanks Mr E
clear enough.
I believe it's not possible to set the pins like I said
Could you pls. tell me something more about ADCOM0.
Datasheets are useful but something they are a little
too complicate if you are not full into the subject.
Thanks
Lotondo
I can't tell anything about ADCOM As it doesn't exist, but let's try with ADCON0
If you plan to use PBP ADCIN, use my PicMultiCalc software. It make things easy. Let's say your OSC=20 MHz, your analog source impedance is 1K and you want to make a 10 Bit conversion, you need to add those DEFINEs at the top of your code
ADC_CLOCK 2 refer to ADCS1:ADCS0 bits (ADCON0<7:6>)Code:DEFINE ADC_BITS 10 ' ADCIN resolution (Bits) DEFINE ADC_CLOCK 2 ' ADC clock source (Fosc/32) DEFINE ADC_SAMPLEUS 3 ' ADC sampling time (uSec)
Sure you could even use the usual Frc and set your Sampling time to 50uSec and it will cover almost every possible situation.
Even by using the PicMultiCalc, you'll need to set the ADFM bit in ADCON1 register. Yeah i didn't include this in the software as Microchip change their mind in almost every new PIC. Maybe One day... maybe.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Now, if you plan to NOT use ADCIN, you must do everything manually. Here's ashort example... OK OK it looks huge but...
Code:' ' PIC configuration fuses ' ======================== asm __CONFIG _CONFIG1H, _HS_OSC_1H ; HS osc (20 MHz ; __CONFIG _CONFIG2L, _BOR_ON_2L & _BORV_27_2L & _PWRT_ON_2L ; Enable Brown out voltage detect ; Brown out voltage threshold 2.7 Volt ; __CONFIG _CONFIG2H, _WDT_OFF_2H ; Disable watch dog timer ; __CONFIG _CONFIG3H, _CCP2MX_OFF_3H ; Use default PORTC.1 for CCP2 ; __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L ; enable stack overflow ; disable low-voltage programming mode ; disable background debugger ; __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L ; disable code protect (user block) ; __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H ; disable code protect (boot block) ; __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L ; disable write protect (user block) ; __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H ; disable Write protect CONFIG regs ; disable write protect boot block ; disable rite protect Data EE ; __CONFIG _CONFIG7L, _EBTR0_OFF_7L ; Disable table Read protect user block ; __CONFIG _CONFIG7H, _EBTRB_OFF_7H ; Disable Read protect boot block enable endasm ' ' Hardware configuration ' ====================== ' DEFINE OSC 20 ' ' Adc ' --- ADCON0 = %10000001 ' Conversion clock = Fosc/32 ' AN0 selected ' turn on ADC ADCON1 = %110001110 ' right justified results ' Conversion clock = Fosc/32 ' PORTA.0 as analog, all other to digital ' ' Hardware assignment ' =================== ' ' LCD ' --- DEFINE LCD_DREG PORTD ' LCD data port DEFINE LCD_DBIT 4 ' LCD data starting bit 0 or 4 DEFINE LCD_RSREG PORTD ' LCD register select port DEFINE LCD_RSBIT 2 ' LCD register select bit DEFINE LCD_EREG PORTD ' LCD enable port DEFINE LCD_EBIT 3 ' LCD enable bit DEFINE LCD_BITS 4 ' LCD bus size 4 or 8 DEFINE LCD_LINES 2 ' Number lines on LCD DEFINE LCD_COMMANDUS 2000 ' Command delay time in us DEFINE LCD_DATAUS 50 ' Data delay time in us ' ' Alias definition ' ================ ' ' ADC ' --- GoDone var ADCON0.2 ' use to start/stop/check ' AD conversion ADON VAR ADCON0.0 ' use to start/shut-off ADC ' ' Variable definition ' =================== @AdResult = ADRESL AdResult var word EXT ' Store ADC result ' ' Software constants ' ================== ADC_SampleUs con 3 ' ADC sampling time ' ' Program Start here ' ================== Pause 500 ' LCD start up delay Start: ' ' A/D conversion ' -------------- adon = 1 ' turn on ADC pauseus adc_sampleus ' Wait minimum sampling time godone = 1 ' start conversion while godone : wend ' check if finished ' adon = 0 ' turn off ADC ' ' Show result on LCD ' ------------------ lcdout $FE,1, "Result=:", dec adresult ' show result on LCD pause 250 goto stART
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Bookmarks