Re: 18F46K22 being dyslexic
READ-MODIFY-WRITE (R-M-W).
Especially at 64Mhz.
Use LATB instead of PORTB
Re: 18F46K22 being dyslexic
Never had an issue with using PORT at 64MHz... but i gave it a go...
Modified code to...
Code:
BAT1BLEED VAR LATB.7
BAT1BLEEDIND VAR LATB.6
BAT2BLEED VAR LATB.5
BAT2BLEEDIND VAR LATB.4
ALARM VAR LATB.3
And, i get BAT2BLEEDIND and ALARM LED's on during initialisation phase, and then the ALARM LED only comes on when it's running. Which is odd since that section of code for the alarm LED has been commented out.
The batteries are sufficiently unbalanced to cause it to try to balance them. The LCD readings are,
0346 0377 0031
Oh, i forgot to mention I'm running the last release of 2.60 with PBPL
Re: 18F46K22 being dyslexic
ok, i modified the cod to use a temporary byte variable in ram and then write the var to LATB as follows...
Code:
TEMPPORTC VAR BYTE
BAT1BLEED VAR TEMPPORTC.7
BAT1BLEEDIND VAR TEMPPORTC.6
BAT2BLEED VAR TEMPPORTC.5
BAT2BLEEDIND VAR TEMPPORTC.4
ALARM VAR TEMPPORTC.3
Code:
IF BAT2TEMP > BAT1TEMP+5 THEN
BAT2BLEED = 1
BAT2BLEEDIND = 1
BAT1BLEED = 0
BAT1BLEEDIND = 0
BAT2BLEEDCOUNT = 0
LATB = TEMPPORTC
ELSE
for diagnostics i modified the LCD command to the following...
Code:
LCDOUT $FE, $80, DEC4 BAT1TEMP, " ", DEC4 BAT2TEMP, " "
IF BAT1TEMP > BAT2TEMP THEN
LCDOUT DEC4 (BAT1TEMP - BAT2TEMP), " "
ELSE
LCDOUT DEC4 (BAT2TEMP - BAT1TEMP), " "
ENDIF
LCDOUT $FE, $C0, BIN8 TEMPPORTC
the second line on the LCD reads
But, again, only the ALARM LED is on...
So, the temp var is correct, but it's not setting to port correctly????
Re: 18F46K22 being dyslexic
Apologies for the multiple posts, I'm just documenting what I've done for diagnostics...
Just for fun i decided to read the LATB register back and display it on the LCD...
Code:
LCDOUT $FE, $C0, BIN8 TEMPPORTC, " ", BIN8 LATB
and the LCD reads...
so... it's setting LATB correctly... but it's not giving me the output???? :confused:
Re: 18F46K22 being dyslexic
Reading the LATB register does not show the actual state of the pins.
Reading PORTB does, so you might want to add PORTB to your LCD readout like in the image below.
I've run your program in Proteus and everything seems fine.
I did add PORTB to the LCD, it's on the third line.
Obviously, a simulator doesn't prove that it will work on real hardware, but Proteus is really really good.
http://support.melabs.com/DT/comwarrior.png
If your LAT register shows 1's, and the TRIS register is 0's then the PORT register should show the same values as the LAT register.
Re: 18F46K22 being dyslexic
Darrel, I'm getting lamer and lazier every day. I have Proteus, but never got it to work with PBP. Do you have a 'quick-start' guide of some sort to get me started?
Re: 18F46K22 being dyslexic
Quote:
Originally Posted by
Charles Linquis
Darrel, I'm getting lamer and lazier every day. I have Proteus, but never got it to work with PBP. Do you have a 'quick-start' guide of some sort to get me started?
Hi Charles,
I didn't, but I just recorded a simple demo that should get you going.
Unscripted, umms and sniffles included. :)
http://support.melabs.com/DT/Proteus...oteusDemo.html
Re: 18F46K22 being dyslexic
Darrel,
Thanks! That got me going. Now I just have to learn to use Proteus' schematic capture. I normally use Altium.
Why didn't LabCenter do this? You should sell your efforts to them. And then you should do more on other topics.
Debugging/simulation in all its forms seems like fertile ground.
Re: 18F46K22 being dyslexic
hi guys, thank you for the help...
yes tried port and lat alternates same results.
i wrote a test sequence to test all the IO pins sequentially... and i marked on the data sheet which pins were not doing what they were supposed to and then noticed a paturn.
I read the device registers for things like MSSP, EUSARTS, PWM etc etc and found that after a cold start these registers were not in the states they were supposed to be acording to the datasheet. So basically, their was hardware turned on that should be off that was taking control of the pins.
I modified the program to reset any register that wasn't in it's proper state. once i did this everything worked perfectly.
I went through the remains of the last batch of 46K22's (~15) and found that every single one had the same issue, but once the registers were reset they never had an issue.
So, thursday last week i sent a large email bug report to microchip detailing what was wrong and what it looks like that is the problem. I also included the chip batch numbers.
As of yet, i have only received the standard acknowledgement of email... which i find to be quite disappointing for such a large company.
I also searched micro-chips documentation and forums etc for any other report of this issue and i seem to be the first / the only one...
So, in the event someone else has a similar issue, this details how to diagnose it and then fix it.
EDIT:
It's a shame that PBP3 didn't come with a simulator... it was also quite disappointing.
Re: 18F46K22 being dyslexic
So which registers don't have the correct power-on value?
I don't have a 46K22 to look at.
Re: 18F46K22 being dyslexic
Comwarrior, I have been watching this thread quite closly because I have been using the 18F46K22's for quite some time. I have never noticed a problem with them being "Dyslexic". However, I have never ASSUMED the state of ANY registers of ANY PIC's I have used in the past. How could you assume the state to be as printed in the documentation when there is nothing like a BIOS to set them after a power on sequence or a power disturbance. Poweron states are slightly better than random as far as I have seen in the past so I have ALWAYS set ALL register states after poweron or reset.... You should too..... Never assume anything...
Re: 18F46K22 being dyslexic
Dave,
No, All registers have a defined power-on state. And those states are clearly listed in the datasheet. There's nothing random about it.
I've never seen a chip power-up with in-correct states before, so i would like to see what comwarrior found.
People should NOT try to initialize every register at the beginning of the program.
This creates many more problems then it will ever solve, since most people will not bother to read the datasheet to find out what they should set them to.
comwarrior,
What revision is the datasheet you are using?