Re: Strange Behavior 12F1822
"When i'm using 16MHz internal frequency (OSCCON = 01111000) everthing works fine."
You thought everything worked fine.
I see no DEFINE OSC 16 or 32.
"My programm does software-pwm, lighting 5 LED's up and down."
May I suggest that you use DT's MIBAM for these 5-LEDS ?
With 32Mhz, you can get high refresh rate with MIBAM.
Re: Strange Behavior 12F1822
nobner, that is in this line of code?
OSCCON = 110000
Apparently when copying text It did not allow the correct sequence to be copied. Look at the embeded code sequence at the line where you are setting OSCCON.
Re: Strange Behavior 12F1822
Quote:
Originally Posted by
Dave
nobner, that is in this line of code?
OSCCON = 110000
Apparently when copying text It did not allow the correct sequence to be copied. Look at the embeded code sequence at the line where you are setting OSCCON.
It is something with the system here. Sometimes percent sign, %, disappears in code block.
Norbert has it correct in code block.
I guess it will be fixed soon.
Re: Strange Behavior 12F1822
Hi,
This sounds like the classic RMW issue.
Instead of aliasing your LEDn variables to the PORTA register, try alias them to the LATA register and see what happens.
Do a search for read modify write if you don't know what RMW means.
/Henrik.
Re: Strange Behavior 12F1822
Hello,
did a wrong measurement yesterday.
Only Ports RA0 and RA2 have the spikes.
All other ports are working correct at 16MHz and 32MHz.
I added DEFINE OSC 32 - nothing changed.
I replaced the aliases for the LED with direct ports in the programm (PORTA.0=1) - nothing changed.
Now i'll search for RMW as recommended.
Re: Strange Behavior 12F1822
Hi,
Replacing the alias with direct port adress doesn't make any difference. What I suggested was to write to the LAT register instead of the PORT register, ie:
LATA.0=1 instead of PORTA.0=1
or created the alias pointing on the LAT register instead of the PORT regsiter:
LED1 VAR LATA.0 instead of LED1 VAR PORTA.0
Re: Strange Behavior 12F1822
Hi Henrik,
thank you for your great help, writing the LAT register did the job. Signals are perfect now.
I also found now a second solution for the problem - using the "high porta.0" and "low porta.0" works also.
Thank you very much,
best regards
Norbert
Re: Strange Behavior 12F1822
Hi,
HIGH PORTB.0 works because it takes longer to execute than PORTB.0=1. This is because it also sets the TRIS register each time they executes.
In this case the extra delay introduced by the inherit write to TRIS was enough to allow the voltage on the pin to rise above the threshold within time to avoid the RMW issue. But there's no guarantee it'll work the next time as it depends on the oscillator speed (as you've noticed), load on the pin, PCB trace capacitance and so on. For devices which have both a PORT and a LAT register you really should write to LAT to avoid these kind of RMW issues.
Good luck!
/Henrik
Re: Strange Behavior 12F1822
Quote:
Originally Posted by
nobner
Hi Henrik,
thank you for your great help, writing the LAT register did the job. Signals are perfect now.
I also found now a second solution for the problem - using the "high porta.0" and "low porta.0" works also.
Thank you very much,
best regards
Norbert
Norbert,
So, your code is working as expected without having DEFINE OSC X in your code block?
If you are using 32MHz or 16 MHz or 8Mhz you need to tell the compiler at what speed it is running.
Otherwise, it will compile for 4Mhz.
For High and Low commands, it may not reflect the difference;
But, if you are using PWM commands especially something like MIBAM, there will be serious difference.
For example, if you set your OSCCON register to 8Mhz and enable PLL (that gives 32Mhz), as you did, but do not have DEFINE OSC 32 , the chip will run at 32Mhz, but the compiler will compile your code for 4Mhz as default.
If I am wrong with anything with my sayings here, someone please correct me.
Re: Strange Behavior 12F1822
Hi Sayzer,
i tried with DEFINE OSC 32 and without DEFINE OSC 32, it made no visible difference in my application,
PWM-frequency is the same.
Finally I put DEFINE OSC 32 in my code, everything works fine.
Thanks to all for your support.