Hello together,
i'm using the 12F1822 for the first time.
My programm does software-pwm, lighting 5 LED's up and down.
When i'm using 16MHz internal frequency (OSCCON = 01111000) everthing works fine.
When i'm using 32MHz internal frequency (OSCCON = 01110000) port RA4 and RA5 are working fine,
on ports RA0,1,2 i get short (200ns) high to low spikes in the high-time of my pwm-signal.
The spikes have a frequency of 50KHz.
I looked in the datasheet an tried to disable comparator, ADC, an so on.
Nothing helped.
Does anybody has an idea?
Thanks in advance!
Norbert
Code:REM Prozessordefinitionen und Register setzen #CONFIG __config _CONFIG1, _FOSC_INTOSC & _CLKOUTEN_OFF & _WDTE_ON & _PWRTE_OFF & _MCLRE_ON & _BOREN_ON __config _CONFIG2, _PLLEN_ON #ENDCONFIG OSCCON = 110000 TRISA = 001000 ANSELA = 0 CM1CON0 = 0 disable LED1 var PORTA.0 LED2 var PORTA.1 LED3 var PORTA.2 LED4 var PORTA.4 LED5 var PORTA.5 WERT_01 var byte WERT_01 = 10 REM Wert auf 10 setzen, damit LED nicht ganz aus geht WERT_02 var byte WERT_02 = 10 REM Wert auf 10 setzen, damit LED nicht ganz aus geht BASIS_01 VAR byte BASIS_01 = 0 BASIS_02 VAR byte BASIS_02 = 0 ZAEHL_101 var BYTE ZAEHL_101=0 ZAEHL_102 var byte ZAEHL_102=0 ZAEHL_201 var BYTE ZAEHL_201=0 ZAEHL_202 var byte ZAEHL_202=0 AUF_01 VAR BIT AUF_01=0 AUF_02 VAR BIT AUF_02=0 START: rem LED1 IF AUF_01 = 0 THEN IF WERT_01 < BASIS_01 then led1=0 LED2=0 LED4=1 ENDIF IF WERT_01 > BASIS_01 THEN LED1=1 LED2=1 LED4=0 ENDIF BASIS_01 = BASIS_01 + 1 IF BASIS_01 = 250 then LET BASIS_01 = 0 ZAEHL_101 = ZAEHL_101 + 1 IF ZAEHL_101 = 250 THEN ZAEHL_102 = ZAEHL_102 + 1 ZAEHL_101 = 0 ENDIF IF ZAEHL_102 = 5 THEN WERT_01 = WERT_01 + 1 ZAEHL_102 = 0 ENDIF IF WERT_01 = 240 AND BASIS_01 = 0 THEN AUF_01 = 1 WERT_01 = 10 BASIS_01 = 10 ENDIF endif IF AUF_01 = 1 THEN IF WERT_01 < BASIS_01 THEN LED1=1 LED2=1 LED4=0 ENDIF IF WERT_01 > BASIS_01 then led1=0 LED2=0 LED4=1 ENDIF BASIS_01 = BASIS_01 + 1 IF BASIS_01 = 250 then LET BASIS_01 = 0 ZAEHL_101 = ZAEHL_101 + 1 IF ZAEHL_101 = 250 THEN ZAEHL_102 = ZAEHL_102 + 1 ZAEHL_101 = 0 ENDIF IF ZAEHL_102 = 5 THEN WERT_01 = WERT_01 + 1 ZAEHL_102 = 0 ENDIF IF WERT_01 = 240 And basis_01 = 0 THEN AUF_01 = 0 WERT_01 = 10 BASIS_01 = 10 ENDIF REM Wert auf 240 und 10 setzen, damit LED nicht ganz aus geht endif REM LED2 IF AUF_02 = 0 THEN IF WERT_02 < BASIS_02 then led3=0 LED5=0 ENDIF IF WERT_02 > BASIS_02 THEN LED3=1 LED5=1 ENDIF BASIS_02 = BASIS_02 + 1 IF BASIS_02 = 250 then LET BASIS_02 = 0 ZAEHL_201 = ZAEHL_201 + 1 IF ZAEHL_201 = 250 THEN ZAEHL_202 = ZAEHL_202 + 1 ZAEHL_201 = 0 ENDIF IF ZAEHL_202 = 3 THEN WERT_02 = WERT_02 + 1 ZAEHL_202 = 0 ENDIF IF WERT_02 = 240 AND BASIS_02 = 0 THEN AUF_02 = 1 WERT_02 = 10 BASIS_02 = 10 ENDIF endif IF AUF_02 = 1 THEN IF WERT_02 < BASIS_02 THEN LED3=1 LED5=1 ENDIF IF WERT_02 > BASIS_02 then led3=0 LED5=0 ENDIF BASIS_02 = BASIS_02 + 1 IF BASIS_02 = 250 then LET BASIS_02 = 0 ZAEHL_201 = ZAEHL_201 + 1 IF ZAEHL_201 = 250 THEN ZAEHL_202 = ZAEHL_202 + 1 ZAEHL_201 = 0 ENDIF IF ZAEHL_202 = 3 THEN WERT_02 = WERT_02 + 1 ZAEHL_202 = 0 ENDIF IF WERT_02 = 240 AND BASIS_02 = 0 THEN AUF_02 = 0 WERT_02 = 10 BASIS_02 = 10 ENDIF REM Wert auf 240 und 10 setzen, damit LED nicht ganz aus geht endif GOTO START end





Bookmarks